Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/EncodingHelper.java @ 525:0be5be8d57e9
Repository checkout support, first iteration
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 11 Jan 2013 18:12:39 +0100 |
| parents | 909306e412e2 |
| children | 2f9ed6bcefa2 |
comparison
equal
deleted
inserted
replaced
| 524:57b2c9eb3c69 | 525:0be5be8d57e9 |
|---|---|
| 63 public byte[] toManifest(String s) { | 63 public byte[] toManifest(String s) { |
| 64 if (s == null) { | 64 if (s == null) { |
| 65 // perhaps, can return byte[0] in this case? | 65 // perhaps, can return byte[0] in this case? |
| 66 throw new IllegalArgumentException(); | 66 throw new IllegalArgumentException(); |
| 67 } | 67 } |
| 68 return encodeWithSystemDefaultFallback(s); | |
| 69 } | |
| 70 | |
| 71 /** | |
| 72 * Translate file names from dirstate to amazing Unicode string | |
| 73 */ | |
| 74 public String fromDirstate(byte[] data, int start, int length) { | |
| 75 return decodeWithSystemDefaultFallback(data, start, length); | |
| 76 } | |
| 77 | |
| 78 public byte[] toDirstate(String fname) { | |
| 79 if (fname == null) { | |
| 80 throw new IllegalArgumentException(); | |
| 81 } | |
| 82 return encodeWithSystemDefaultFallback(fname); | |
| 83 } | |
| 84 | |
| 85 private String decodeWithSystemDefaultFallback(byte[] data, int start, int length) { | |
| 68 try { | 86 try { |
| 69 // synchonized(encoder) { | 87 return decoder.decode(ByteBuffer.wrap(data, start, length)).toString(); |
| 88 } catch (CharacterCodingException ex) { | |
| 89 sessionContext.getLog().dump(getClass(), Error, ex, String.format("Use of charset %s failed, resort to system default", charset().name())); | |
| 90 // resort to system-default | |
| 91 return new String(data, start, length); | |
| 92 } | |
| 93 } | |
| 94 | |
| 95 private byte[] encodeWithSystemDefaultFallback(String s) { | |
| 96 try { | |
| 97 // synchronized(encoder) { | |
| 70 ByteBuffer bb = encoder.encode(CharBuffer.wrap(s)); | 98 ByteBuffer bb = encoder.encode(CharBuffer.wrap(s)); |
| 71 // } | 99 // } |
| 72 byte[] rv = new byte[bb.remaining()]; | 100 byte[] rv = new byte[bb.remaining()]; |
| 73 bb.get(rv, 0, rv.length); | 101 bb.get(rv, 0, rv.length); |
| 74 return rv; | 102 return rv; |
| 77 // resort to system-default | 105 // resort to system-default |
| 78 return s.getBytes(); | 106 return s.getBytes(); |
| 79 } | 107 } |
| 80 } | 108 } |
| 81 | 109 |
| 82 /** | |
| 83 * Translate file names from dirstate to amazing Unicode string | |
| 84 */ | |
| 85 public String fromDirstate(byte[] data, int start, int length) { | |
| 86 return decodeWithSystemDefaultFallback(data, start, length); | |
| 87 } | |
| 88 | |
| 89 private String decodeWithSystemDefaultFallback(byte[] data, int start, int length) { | |
| 90 try { | |
| 91 return decoder.decode(ByteBuffer.wrap(data, start, length)).toString(); | |
| 92 } catch (CharacterCodingException ex) { | |
| 93 sessionContext.getLog().dump(getClass(), Error, ex, String.format("Use of charset %s failed, resort to system default", charset().name())); | |
| 94 // resort to system-default | |
| 95 return new String(data, start, length); | |
| 96 } | |
| 97 } | |
| 98 | |
| 99 private Charset charset() { | 110 private Charset charset() { |
| 100 return encoder.charset(); | 111 return encoder.charset(); |
| 101 } | 112 } |
| 102 | 113 |
| 103 } | 114 } |
