Mercurial > jhg
annotate src/org/tmatesoft/hg/internal/EncodingHelper.java @ 688:1499139a600a
Defect: copies are not reported with default settings (not even as added!). Parameter needCopies removed as there seems to be no reason to condition copies for hi-level api (HgStatus.isCopy() is way down the road)
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Sat, 27 Jul 2013 20:15:37 +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: 
525diff
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: 
418diff
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: 
418diff
changeset | 20 | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
321diff
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: 
412diff
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: 
321diff
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: 
321diff
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: 
321diff
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: 
321diff
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: 
412diff
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: 
527diff
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: 
412diff
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: 
412diff
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: 
527diff
changeset | 35 * | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
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: 
527diff
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: 
321diff
changeset | 43 /* | 
| 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
321diff
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: 
321diff
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: 
321diff
changeset | 46 */ | 
| 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
321diff
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: 
412diff
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: 
321diff
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: 
321diff
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: 
527diff
changeset | 51 private final CharsetEncoder utfEncoder; | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
321diff
changeset | 53 | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
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: 
321diff
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: 
321diff
changeset | 57 encoder = fsEncoding.newEncoder(); | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 58 Charset utf8 = getUTF8(); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 59 if (fsEncoding.equals(utf8)) { | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 60 utfDecoder = decoder; | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 61 utfEncoder = encoder; | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 62 } else { | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 63 utfDecoder = utf8.newDecoder(); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 64 utfEncoder = utf8.newEncoder(); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 65 } | 
| 412 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
321diff
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: 
415diff
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: 
415diff
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: 
415diff
changeset | 70 */ | 
| 412 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
321diff
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: 
415diff
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: 
415diff
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: 
412diff
changeset | 75 /** | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
412diff
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: 
412diff
changeset | 77 */ | 
| 526 
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
525diff
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: 
412diff
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: 
412diff
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: 
412diff
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: 
412diff
changeset | 82 } | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 83 return toArray(encodeWithSystemDefaultFallback(s)); | 
| 525 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 84 } | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 85 | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 86 /** | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 87 * Translate file names from dirstate to amazing Unicode string | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 88 */ | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 89 public String fromDirstate(byte[] data, int start, int length) { | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 90 return decodeWithSystemDefaultFallback(data, start, length); | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 91 } | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 92 | 
| 526 
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
525diff
changeset | 93 public byte[] toDirstate(CharSequence fname) { | 
| 525 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 94 if (fname == null) { | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 95 throw new IllegalArgumentException(); | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 96 } | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 97 return toArray(encodeWithSystemDefaultFallback(fname)); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 98 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 99 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 100 /** | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 102 */ | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 103 public ByteBuffer toFNCache(CharSequence fname) { | 
| 525 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 104 return encodeWithSystemDefaultFallback(fname); | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 105 } | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 106 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
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: 
527diff
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: 
527diff
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: 
527diff
changeset | 111 return toArray(encodeWithSystemDefaultFallback(fname)); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 112 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
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: 
527diff
changeset | 115 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 116 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 117 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
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: 
527diff
changeset | 120 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 121 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
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: 
527diff
changeset | 124 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 125 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
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: 
527diff
changeset | 128 } | 
| 525 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 129 | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 131 return toArray(encodeUnicode(user)); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 132 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 133 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 135 return toArray(encodeUnicode(comment)); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 136 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 137 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 139 return toArray(encodeWithSystemDefaultFallback(file)); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 140 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 141 | 
| 525 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
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: 
412diff
changeset | 143 try { | 
| 525 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 144 return decoder.decode(ByteBuffer.wrap(data, start, length)).toString(); | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 145 } catch (CharacterCodingException ex) { | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
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: 
456diff
changeset | 147 // resort to system-default | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 148 return new String(data, start, length); | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 149 } | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 150 } | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 151 | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 152 private ByteBuffer encodeWithSystemDefaultFallback(CharSequence s) { | 
| 525 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 153 try { | 
| 
0be5be8d57e9
Repository checkout support, first iteration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
456diff
changeset | 154 // synchronized(encoder) { | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
412diff
changeset | 156 // } | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
412diff
changeset | 157 } catch (CharacterCodingException ex) { | 
| 456 
909306e412e2
Refactor LogFacility and SessionContext, better API for both
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
418diff
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: 
412diff
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: 
527diff
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: 
527diff
changeset | 161 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 162 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 163 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 165 byte[] rv; | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 167 rv = bb.array(); | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 169 return rv; | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 170 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 171 // fall through | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 172 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
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: 
527diff
changeset | 175 return rv; | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 176 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 177 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 179 try { | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 181 } catch (CharacterCodingException ex) { | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
667diff
changeset | 183 try { | 
| 
f568330dd9c0
Compile with Java5, ensure generics are fine for other compilers, too
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
667diff
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: 
667diff
changeset | 185 } catch (UnsupportedEncodingException e) { | 
| 
f568330dd9c0
Compile with Java5, ensure generics are fine for other compilers, too
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
667diff
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: 
667diff
changeset | 187 } | 
| 667 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 188 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 189 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 190 | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 192 // | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 193 try { | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 195 } catch (CharacterCodingException ex) { | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 196 byte[] rv; | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
changeset | 197 try { | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 199 } catch (UnsupportedEncodingException e) { | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
527diff
changeset | 201 } | 
| 
fba85bc1dfb8
Refactoring: move all encoding/decoding operations into single place, EncodingHelper
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
527diff
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: 
412diff
changeset | 203 } | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
412diff
changeset | 204 } | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
412diff
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: 
415diff
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: 
321diff
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: 
321diff
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: 
412diff
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: 
526diff
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: 
526diff
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: 
526diff
changeset | 212 } | 
| 320 
678e326fd27c
Issue 15: Exception accessing oddly named file from history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 213 } | 
