Mercurial > jhg
diff src/org/tmatesoft/hg/internal/Internals.java @ 412:63c5a9d7ca3f smartgit3
Follow-up for Issue 29: unify path translation for manifest and dirstate
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 21 Mar 2012 14:54:02 +0100 |
parents | 464b4404e75d |
children | bb278ccf9866 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/Internals.java Tue Mar 20 17:56:50 2012 +0100 +++ b/src/org/tmatesoft/hg/internal/Internals.java Wed Mar 21 14:54:02 2012 +0100 @@ -71,7 +71,7 @@ * and if your project happen to use anything but filesystem default (say, UTF8 on cp1251 system), * native storage paths won't match */ - public static final String CFG_PROPERT_FS_FILENAME_ENCODING = "hg.fs.filename.encoding"; + public static final String CFG_PROPERTY_FS_FILENAME_ENCODING = "hg.fs.filename.encoding"; private int requiresFlags = 0; private List<Filter.Factory> filterFactories; @@ -109,20 +109,9 @@ // XXX perhaps, should keep both fields right here, not in the HgRepository public PathRewrite buildDataFilesHelper() { - Object altEncoding = sessionContext.getProperty(CFG_PROPERT_FS_FILENAME_ENCODING, null); - Charset cs; - if (altEncoding == null) { - cs = Charset.defaultCharset(); - } else { - try { - cs = Charset.forName(altEncoding.toString()); - } catch (IllegalArgumentException ex) { - // both IllegalCharsetNameException and UnsupportedCharsetException are subclasses of IAE, too - // not severe enough to throw an exception, imo. Just record the fact it's bad ad we ignore it - sessionContext.getLog().error(getClass(), ex, String.format("Bad configuration value for filename encoding %s", altEncoding)); - cs = Charset.defaultCharset(); - } - } + // Note, tests in TestStorePath depend on the encoding not being cached + Charset cs = getFileEncoding(); + // StoragePathHelper needs fine-grained control over char encoding, hence doesn't use EncodingHelper return new StoragePathHelper((requiresFlags & STORE) != 0, (requiresFlags & FNCACHE) != 0, (requiresFlags & DOTENCODE) != 0, cs); } @@ -178,6 +167,28 @@ public boolean isCaseSensitiveFileSystem() { return isCaseSensitiveFileSystem; } + + public EncodingHelper buildFileNameEncodingHelper() { + return new EncodingHelper(getFileEncoding()); + } + + private Charset getFileEncoding() { + Object altEncoding = sessionContext.getProperty(CFG_PROPERTY_FS_FILENAME_ENCODING, null); + Charset cs; + if (altEncoding == null) { + cs = Charset.defaultCharset(); + } else { + try { + cs = Charset.forName(altEncoding.toString()); + } catch (IllegalArgumentException ex) { + // both IllegalCharsetNameException and UnsupportedCharsetException are subclasses of IAE, too + // not severe enough to throw an exception, imo. Just record the fact it's bad ad we ignore it + sessionContext.getLog().error(Internals.class, ex, String.format("Bad configuration value for filename encoding %s", altEncoding)); + cs = Charset.defaultCharset(); + } + } + return cs; + } public static boolean runningOnWindows() { return System.getProperty("os.name").indexOf("Windows") != -1;