Mercurial > jhg
annotate src/org/tmatesoft/hg/internal/EncodingHelper.java @ 710:cf200271439a
KeywordFilter: 'IllegalStateException: need buffer of at least...' during status op for a small file
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Mon, 07 Oct 2013 01:56:05 +0200 | 
| parents | f568330dd9c0 | 
| children | 
| rev | line source | 
|---|---|
| 
320
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
1 /* | 
| 
526
 
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
525 
diff
changeset
 | 
2 * Copyright (c) 2011-2013 TMate Software Ltd | 
| 
320
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
3 * | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
4 * This program is free software; you can redistribute it and/or modify | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
5 * it under the terms of the GNU General Public License as published by | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
6 * the Free Software Foundation; version 2 of the License. | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
7 * | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
8 * This program is distributed in the hope that it will be useful, | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
11 * GNU General Public License for more details. | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
12 * | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
13 * For information on how to redistribute this software under | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
14 * the terms of a license other than GNU General Public License | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
15 * contact TMate Software at support@hg4j.com | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
16 */ | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
17 package org.tmatesoft.hg.internal; | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
18 | 
| 
456
 
909306e412e2
Refactor LogFacility and SessionContext, better API for both
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
19 import static org.tmatesoft.hg.util.LogFacility.Severity.Error; | 
| 
 
909306e412e2
Refactor LogFacility and SessionContext, better API for both
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
20 | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
21 import java.io.UnsupportedEncodingException; | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
22 import java.nio.ByteBuffer; | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
23 import java.nio.CharBuffer; | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
24 import java.nio.charset.CharacterCodingException; | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
25 import java.nio.charset.Charset; | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
26 import java.nio.charset.CharsetDecoder; | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
27 import java.nio.charset.CharsetEncoder; | 
| 
320
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
28 | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
29 import org.tmatesoft.hg.core.SessionContext; | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
30 import org.tmatesoft.hg.repo.HgInvalidStateException; | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
31 | 
| 
320
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
32 /** | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
33 * Keep all encoding-related issues in the single place | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
34 * NOT thread-safe (encoder and decoder requires synchronized access) | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
35 * | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
36 * @see http://mercurial.selenic.com/wiki/EncodingStrategy | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
37 * @see http://mercurial.selenic.com/wiki/WindowsUTF8Plan | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
38 * @see http://mercurial.selenic.com/wiki/CharacterEncodingOnWindows | 
| 
320
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
39 * @author Artem Tikhomirov | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
40 * @author TMate Software Ltd. | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
41 */ | 
| 
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
42 public class EncodingHelper { | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
43 /* | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
44 * To understand what Mercurial thinks of UTF-8 and Unix byte approach to names, see | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
45 * http://mercurial.808500.n3.nabble.com/Unicode-support-request-td3430704.html | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
46 */ | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
47 | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
48 private final SessionContext sessionContext; | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
49 private final CharsetEncoder encoder; | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
50 private final CharsetDecoder decoder; | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
51 private final CharsetEncoder utfEncoder; | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
52 private final CharsetDecoder utfDecoder; | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
53 | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
54 EncodingHelper(Charset fsEncoding, SessionContext.Source ctx) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
55 sessionContext = ctx.getSessionContext(); | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
56 decoder = fsEncoding.newDecoder(); | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
57 encoder = fsEncoding.newEncoder(); | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
58 Charset utf8 = getUTF8(); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
59 if (fsEncoding.equals(utf8)) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
60 utfDecoder = decoder; | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
61 utfEncoder = encoder; | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
62 } else { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
63 utfDecoder = utf8.newDecoder(); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
64 utfEncoder = utf8.newEncoder(); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
65 } | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
66 } | 
| 
320
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
67 | 
| 
418
 
528b6780a8bd
A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
415 
diff
changeset
 | 
68 /** | 
| 
 
528b6780a8bd
A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
415 
diff
changeset
 | 
69 * Translate file names from manifest to amazing Unicode string | 
| 
 
528b6780a8bd
A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
415 
diff
changeset
 | 
70 */ | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
71 public String fromManifest(byte[] data, int start, int length) { | 
| 
418
 
528b6780a8bd
A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
415 
diff
changeset
 | 
72 return decodeWithSystemDefaultFallback(data, start, length); | 
| 
320
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
73 } | 
| 
418
 
528b6780a8bd
A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
415 
diff
changeset
 | 
74 | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
75 /** | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
76 * @return byte representation of the string directly comparable to bytes in manifest | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
77 */ | 
| 
526
 
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
525 
diff
changeset
 | 
78 public byte[] toManifest(CharSequence s) { | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
79 if (s == null) { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
80 // perhaps, can return byte[0] in this case? | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
81 throw new IllegalArgumentException(); | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
82 } | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
83 return toArray(encodeWithSystemDefaultFallback(s)); | 
| 
525
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
84 } | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
85 | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
86 /** | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
87 * Translate file names from dirstate to amazing Unicode string | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
88 */ | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
89 public String fromDirstate(byte[] data, int start, int length) { | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
90 return decodeWithSystemDefaultFallback(data, start, length); | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
91 } | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
92 | 
| 
526
 
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
525 
diff
changeset
 | 
93 public byte[] toDirstate(CharSequence fname) { | 
| 
525
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
94 if (fname == null) { | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
95 throw new IllegalArgumentException(); | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
96 } | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
97 return toArray(encodeWithSystemDefaultFallback(fname)); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
98 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
99 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
100 /** | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
101 * prepare filename to be serialized into fncache file | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
102 */ | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
103 public ByteBuffer toFNCache(CharSequence fname) { | 
| 
525
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
104 return encodeWithSystemDefaultFallback(fname); | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
105 } | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
106 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
107 public byte[] toBundle(CharSequence fname) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
108 // yes, mercurial transfers filenames in local encoding | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
109 // so that if your local encoding doesn't match that on server, | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
110 // and you use native characters, you'd likely fail | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
111 return toArray(encodeWithSystemDefaultFallback(fname)); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
112 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
113 public String fromBundle(byte[] data, int start, int length) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
114 return decodeWithSystemDefaultFallback(data, start, length); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
115 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
116 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
117 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
118 public String userFromChangeset(byte[] data, int start, int length) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
119 return decodeUnicodeWithFallback(data, start, length); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
120 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
121 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
122 public String commentFromChangeset(byte[] data, int start, int length) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
123 return decodeUnicodeWithFallback(data, start, length); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
124 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
125 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
126 public String fileFromChangeset(byte[] data, int start, int length) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
127 return decodeWithSystemDefaultFallback(data, start, length); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
128 } | 
| 
525
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
129 | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
130 public byte[] userToChangeset(CharSequence user) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
131 return toArray(encodeUnicode(user)); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
132 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
133 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
134 public byte[] commentToChangeset(CharSequence comment) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
135 return toArray(encodeUnicode(comment)); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
136 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
137 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
138 public byte[] fileToChangeset(CharSequence file) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
139 return toArray(encodeWithSystemDefaultFallback(file)); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
140 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
141 | 
| 
525
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
142 private String decodeWithSystemDefaultFallback(byte[] data, int start, int length) { | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
143 try { | 
| 
525
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
144 return decoder.decode(ByteBuffer.wrap(data, start, length)).toString(); | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
145 } catch (CharacterCodingException ex) { | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
146 sessionContext.getLog().dump(getClass(), Error, ex, String.format("Use of charset %s failed, resort to system default", charset().name())); | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
147 // resort to system-default | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
148 return new String(data, start, length); | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
149 } | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
150 } | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
151 | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
152 private ByteBuffer encodeWithSystemDefaultFallback(CharSequence s) { | 
| 
525
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
153 try { | 
| 
 
0be5be8d57e9
Repository checkout support, first iteration
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
154 // synchronized(encoder) { | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
155 return encoder.encode(CharBuffer.wrap(s)); | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
156 // } | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
157 } catch (CharacterCodingException ex) { | 
| 
456
 
909306e412e2
Refactor LogFacility and SessionContext, better API for both
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
158 sessionContext.getLog().dump(getClass(), Error, ex, String.format("Use of charset %s failed, resort to system default", charset().name())); | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
159 // resort to system-default | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
160 return ByteBuffer.wrap(s.toString().getBytes()); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
161 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
162 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
163 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
164 private byte[] toArray(ByteBuffer bb) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
165 byte[] rv; | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
166 if (bb.hasArray() && bb.arrayOffset() == 0) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
167 rv = bb.array(); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
168 if (rv.length == bb.remaining()) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
169 return rv; | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
170 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
171 // fall through | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
172 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
173 rv = new byte[bb.remaining()]; | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
174 bb.get(rv, 0, rv.length); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
175 return rv; | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
176 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
177 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
178 private String decodeUnicodeWithFallback(byte[] data, int start, int length) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
179 try { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
180 return utfDecoder.decode(ByteBuffer.wrap(data, start, length)).toString(); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
181 } catch (CharacterCodingException ex) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
182 // TODO post-1.2 respect ui.fallbackencoding actual setting | 
| 
682
 
f568330dd9c0
Compile with Java5, ensure generics are fine for other compilers, too
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
667 
diff
changeset
 | 
183 try { | 
| 
 
f568330dd9c0
Compile with Java5, ensure generics are fine for other compilers, too
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
667 
diff
changeset
 | 
184 return new String(data, start, length, "ISO-8859-1"); // XXX java5 | 
| 
 
f568330dd9c0
Compile with Java5, ensure generics are fine for other compilers, too
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
667 
diff
changeset
 | 
185 } catch (UnsupportedEncodingException e) { | 
| 
 
f568330dd9c0
Compile with Java5, ensure generics are fine for other compilers, too
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
667 
diff
changeset
 | 
186 throw new HgInvalidStateException(ex.getMessage()); | 
| 
 
f568330dd9c0
Compile with Java5, ensure generics are fine for other compilers, too
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
667 
diff
changeset
 | 
187 } | 
| 
667
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
188 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
189 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
190 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
191 private ByteBuffer encodeUnicode(CharSequence s) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
192 // | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
193 try { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
194 return utfEncoder.encode(CharBuffer.wrap(s)); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
195 } catch (CharacterCodingException ex) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
196 byte[] rv; | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
197 try { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
198 rv = s.toString().getBytes(getUTF8().name()); // XXX Java 1.5 | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
199 } catch (UnsupportedEncodingException e) { | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
200 throw new HgInvalidStateException("Unexpected error trying to get UTF-8 encoding"); | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
201 } | 
| 
 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
527 
diff
changeset
 | 
202 return ByteBuffer.wrap(rv); | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
203 } | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
204 } | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
205 | 
| 
418
 
528b6780a8bd
A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
415 
diff
changeset
 | 
206 private Charset charset() { | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
207 return encoder.charset(); | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
321 
diff
changeset
 | 
208 } | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
412 
diff
changeset
 | 
209 | 
| 
527
 
47b7bedf0569
Tests for present HgCheckoutCommand functionality. Update branch information on checkout. Use UTF8 encoding for the branch file
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
526 
diff
changeset
 | 
210 public static Charset getUTF8() { | 
| 
 
47b7bedf0569
Tests for present HgCheckoutCommand functionality. Update branch information on checkout. Use UTF8 encoding for the branch file
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
526 
diff
changeset
 | 
211 return Charset.forName("UTF-8"); | 
| 
 
47b7bedf0569
Tests for present HgCheckoutCommand functionality. Update branch information on checkout. Use UTF8 encoding for the branch file
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
526 
diff
changeset
 | 
212 } | 
| 
320
 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
213 } | 
