[EGIT PATCH 04/26] Rely upon Constants.CHARSET over Constants.CHARACTER_ENCODING

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This avoids the UnsupportedEncodingException error which we know
must not fail on a JRE that supports jgit.  We have to have the
stock UTF-8 encoding available for basic operation.

In some cases we can also avoid an unnecessary copy.  Some code
paths in the byte[]->String utility methods in the Sun JRE seem
to copy the input byte[] prior to calling the character set for
the conversion.  This copy is unnecessary.

Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx>
---
 .../src/org/spearce/jgit/lib/ObjectWriter.java     |    2 +-
 .../src/org/spearce/jgit/lib/RefDatabase.java      |    9 +++------
 .../src/org/spearce/jgit/lib/RepositoryConfig.java |    4 ++--
 .../org/spearce/jgit/transport/PacketLineIn.java   |    3 ++-
 .../jgit/transport/SideBandInputStream.java        |    3 ++-
 .../spearce/jgit/transport/TransportBundle.java    |    3 ++-
 .../spearce/jgit/transport/WalkPushConnection.java |    4 ++--
 .../jgit/transport/WalkRemoteObjectDatabase.java   |    5 ++---
 .../src/org/spearce/jgit/treewalk/TreeWalk.java    |   10 ++--------
 .../spearce/jgit/treewalk/filter/PathFilter.java   |   10 +---------
 10 files changed, 19 insertions(+), 34 deletions(-)

diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectWriter.java b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectWriter.java
index be2e28c..6c2cd4f 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectWriter.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectWriter.java
@@ -236,7 +236,7 @@ public class ObjectWriter {
 	public ObjectId writeTag(final Tag c) throws IOException {
 		final ByteArrayOutputStream os = new ByteArrayOutputStream();
 		final OutputStreamWriter w = new OutputStreamWriter(os,
-				Constants.CHARACTER_ENCODING);
+				Constants.CHARSET);
 
 		w.write("object ");
 		c.getObjId().copyTo(w);
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java
index 3e68a8d..facd3e4 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java
@@ -45,7 +45,6 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -54,8 +53,6 @@ import org.spearce.jgit.util.FS;
 import org.spearce.jgit.util.NB;
 
 class RefDatabase {
-	private static final String CHAR_ENC = Constants.CHARACTER_ENCODING;
-
 	private static final String REFS_SLASH = "refs/";
 
 	private static final String HEADS_SLASH = Constants.HEADS_PREFIX + "/";
@@ -157,7 +154,7 @@ class RefDatabase {
 	 * @throws IOException
 	 */
 	void link(final String name, final String target) throws IOException {
-		final byte[] content = ("ref: " + target + "\n").getBytes(CHAR_ENC);
+		final byte[] content = Constants.encode("ref: " + target + "\n");
 		final LockFile lck = new LockFile(fileForRef(name));
 		if (!lck.lock())
 			throw new ObjectWritingException("Unable to lock " + name);
@@ -438,9 +435,9 @@ class RefDatabase {
 	}
 
 	private static BufferedReader openReader(final File fileLocation)
-			throws UnsupportedEncodingException, FileNotFoundException {
+			throws FileNotFoundException {
 		return new BufferedReader(new InputStreamReader(new FileInputStream(
-				fileLocation), CHAR_ENC));
+				fileLocation), Constants.CHARSET));
 	}
 
 }
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java
index d1cd5fc..048940d 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java
@@ -517,7 +517,7 @@ public class RepositoryConfig {
 				+ ".lock");
 		final PrintWriter r = new PrintWriter(new BufferedWriter(
 				new OutputStreamWriter(new FileOutputStream(tmp),
-						Constants.CHARACTER_ENCODING))) {
+						Constants.CHARSET))) {
 			@Override
 			public void println() {
 				print('\n');
@@ -585,7 +585,7 @@ public class RepositoryConfig {
 		clear();
 		readFile = true;
 		final BufferedReader r = new BufferedReader(new InputStreamReader(
-				new FileInputStream(configFile), Constants.CHARACTER_ENCODING));
+				new FileInputStream(configFile), Constants.CHARSET));
 		try {
 			Entry last = null;
 			Entry e = new Entry();
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/PacketLineIn.java b/org.spearce.jgit/src/org/spearce/jgit/transport/PacketLineIn.java
index f330638..f87517d 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/PacketLineIn.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/PacketLineIn.java
@@ -47,6 +47,7 @@ import org.spearce.jgit.lib.Constants;
 import org.spearce.jgit.lib.MutableObjectId;
 import org.spearce.jgit.lib.ProgressMonitor;
 import org.spearce.jgit.util.NB;
+import org.spearce.jgit.util.RawParseUtils;
 
 class PacketLineIn {
 	private static final byte fromhex[];
@@ -107,7 +108,7 @@ class PacketLineIn {
 		final byte[] raw = new byte[len];
 		NB.readFully(in, raw, 0, len);
 		readLF();
-		return new String(raw, 0, len, Constants.CHARACTER_ENCODING);
+		return RawParseUtils.decode(Constants.CHARSET, raw, 0, len);
 	}
 
 	private void readLF() throws IOException {
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/SideBandInputStream.java b/org.spearce.jgit/src/org/spearce/jgit/transport/SideBandInputStream.java
index 9ccf5ad..3ec9bff 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/SideBandInputStream.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/SideBandInputStream.java
@@ -48,6 +48,7 @@ import org.spearce.jgit.errors.TransportException;
 import org.spearce.jgit.lib.Constants;
 import org.spearce.jgit.lib.ProgressMonitor;
 import org.spearce.jgit.util.NB;
+import org.spearce.jgit.util.RawParseUtils;
 
 /**
  * Unmultiplexes the data portion of a side-band channel.
@@ -194,6 +195,6 @@ class SideBandInputStream extends InputStream {
 	private String readString(final int len) throws IOException {
 		final byte[] raw = new byte[len];
 		NB.readFully(in, raw, 0, len);
-		return new String(raw, 0, len, Constants.CHARACTER_ENCODING);
+		return RawParseUtils.decode(Constants.CHARSET, raw, 0, len);
 	}
 }
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/TransportBundle.java b/org.spearce.jgit/src/org/spearce/jgit/transport/TransportBundle.java
index 24d49eb..d8c2ba4 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/TransportBundle.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/TransportBundle.java
@@ -58,6 +58,7 @@ import org.spearce.jgit.lib.ProgressMonitor;
 import org.spearce.jgit.lib.Ref;
 import org.spearce.jgit.lib.Repository;
 import org.spearce.jgit.util.FS;
+import org.spearce.jgit.util.RawParseUtils;
 
 /**
  * Supports fetching from a git bundle (sneaker-net object transport).
@@ -193,7 +194,7 @@ class TransportBundle extends PackTransport {
 			bin.skip(lf);
 			if (lf < cnt && hdrbuf[lf] == '\n')
 				bin.skip(1);
-			return new String(hdrbuf, 0, lf, Constants.CHARACTER_ENCODING);
+			return RawParseUtils.decode(Constants.CHARSET, hdrbuf, 0, lf);
 		}
 
 		@Override
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/WalkPushConnection.java b/org.spearce.jgit/src/org/spearce/jgit/transport/WalkPushConnection.java
index 904a699..85bbc14 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/WalkPushConnection.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/WalkPushConnection.java
@@ -325,7 +325,7 @@ class WalkPushConnection extends BaseConnection implements PushConnection {
 			throws TransportException {
 		try {
 			final String ref = "ref: " + pickHEAD(updates) + "\n";
-			final byte[] bytes = ref.getBytes(Constants.CHARACTER_ENCODING);
+			final byte[] bytes = Constants.encode(ref);
 			dest.writeFile("../HEAD", bytes);
 		} catch (IOException e) {
 			throw new TransportException(uri, "cannot create HEAD", e);
@@ -334,7 +334,7 @@ class WalkPushConnection extends BaseConnection implements PushConnection {
 		try {
 			final String config = "[core]\n"
 					+ "\trepositoryformatversion = 0\n";
-			final byte[] bytes = config.getBytes(Constants.CHARACTER_ENCODING);
+			final byte[] bytes = Constants.encode(config);
 			dest.writeFile("../config", bytes);
 		} catch (IOException e) {
 			throw new TransportException(uri, "cannot create config", e);
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/WalkRemoteObjectDatabase.java b/org.spearce.jgit/src/org/spearce/jgit/transport/WalkRemoteObjectDatabase.java
index c5a5199..ababc69 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/WalkRemoteObjectDatabase.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/WalkRemoteObjectDatabase.java
@@ -67,8 +67,6 @@ import org.spearce.jgit.util.NB;
  * independent {@link WalkFetchConnection}.
  */
 abstract class WalkRemoteObjectDatabase {
-	static final String CHARENC = Constants.CHARACTER_ENCODING;
-
 	static final String INFO_PACKS = "info/packs";
 
 	static final String INFO_ALTERNATES = "info/alternates";
@@ -448,7 +446,8 @@ abstract class WalkRemoteObjectDatabase {
 	 *             stream could be created.
 	 */
 	BufferedReader openReader(final String path) throws IOException {
-		return new BufferedReader(new InputStreamReader(open(path).in, CHARENC));
+		final InputStream is = open(path).in;
+		return new BufferedReader(new InputStreamReader(is, Constants.CHARSET));
 	}
 
 	/**
diff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java
index 9f373e6..d4050ec 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java
@@ -38,7 +38,6 @@
 package org.spearce.jgit.treewalk;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.Collections;
 
 import org.spearce.jgit.errors.CorruptObjectException;
@@ -52,6 +51,7 @@ import org.spearce.jgit.lib.Repository;
 import org.spearce.jgit.revwalk.RevTree;
 import org.spearce.jgit.treewalk.filter.PathFilterGroup;
 import org.spearce.jgit.treewalk.filter.TreeFilter;
+import org.spearce.jgit.util.RawParseUtils;
 
 /**
  * Walks one or more {@link AbstractTreeIterator}s in parallel.
@@ -685,12 +685,6 @@ public class TreeWalk {
 	}
 
 	private static String pathOf(final AbstractTreeIterator t) {
-		try {
-			return new String(t.path, 0, t.pathLen,
-					Constants.CHARACTER_ENCODING);
-		} catch (UnsupportedEncodingException uee) {
-			throw new RuntimeException("JVM doesn't support "
-					+ Constants.CHARACTER_ENCODING, uee);
-		}
+		return RawParseUtils.decode(Constants.CHARSET, t.path, 0, t.pathLen);
 	}
 }
diff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/filter/PathFilter.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/filter/PathFilter.java
index 3aff145..56773a3 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/filter/PathFilter.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/filter/PathFilter.java
@@ -37,8 +37,6 @@
 
 package org.spearce.jgit.treewalk.filter;
 
-import java.io.UnsupportedEncodingException;
-
 import org.spearce.jgit.lib.Constants;
 import org.spearce.jgit.treewalk.TreeWalk;
 
@@ -81,13 +79,7 @@ public class PathFilter extends TreeFilter {
 
 	private PathFilter(final String s) {
 		pathStr = s;
-		try {
-			pathRaw = pathStr.getBytes(Constants.CHARACTER_ENCODING);
-		} catch (UnsupportedEncodingException uee) {
-			throw new RuntimeException("JVM doesn't support "
-					+ Constants.CHARACTER_ENCODING
-					+ " which is required for path filtering.", uee);
-		}
+		pathRaw = Constants.encode(pathStr);
 	}
 
 	@Override
-- 
1.6.0.rc2.22.g71b99

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux