Mercurial > jhg
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 411:464b4404e75d | 412:63c5a9d7ca3f |
|---|---|
| 69 * | 69 * |
| 70 * <p>E.g. Eclipse defaults to project encoding (Launch config, Common page) when launching an application, | 70 * <p>E.g. Eclipse defaults to project encoding (Launch config, Common page) when launching an application, |
| 71 * and if your project happen to use anything but filesystem default (say, UTF8 on cp1251 system), | 71 * and if your project happen to use anything but filesystem default (say, UTF8 on cp1251 system), |
| 72 * native storage paths won't match | 72 * native storage paths won't match |
| 73 */ | 73 */ |
| 74 public static final String CFG_PROPERT_FS_FILENAME_ENCODING = "hg.fs.filename.encoding"; | 74 public static final String CFG_PROPERTY_FS_FILENAME_ENCODING = "hg.fs.filename.encoding"; |
| 75 | 75 |
| 76 private int requiresFlags = 0; | 76 private int requiresFlags = 0; |
| 77 private List<Filter.Factory> filterFactories; | 77 private List<Filter.Factory> filterFactories; |
| 78 private final SessionContext sessionContext; | 78 private final SessionContext sessionContext; |
| 79 private final boolean isCaseSensitiveFileSystem; | 79 private final boolean isCaseSensitiveFileSystem; |
| 107 } | 107 } |
| 108 } | 108 } |
| 109 | 109 |
| 110 // XXX perhaps, should keep both fields right here, not in the HgRepository | 110 // XXX perhaps, should keep both fields right here, not in the HgRepository |
| 111 public PathRewrite buildDataFilesHelper() { | 111 public PathRewrite buildDataFilesHelper() { |
| 112 Object altEncoding = sessionContext.getProperty(CFG_PROPERT_FS_FILENAME_ENCODING, null); | 112 // Note, tests in TestStorePath depend on the encoding not being cached |
| 113 Charset cs; | 113 Charset cs = getFileEncoding(); |
| 114 if (altEncoding == null) { | 114 // StoragePathHelper needs fine-grained control over char encoding, hence doesn't use EncodingHelper |
| 115 cs = Charset.defaultCharset(); | |
| 116 } else { | |
| 117 try { | |
| 118 cs = Charset.forName(altEncoding.toString()); | |
| 119 } catch (IllegalArgumentException ex) { | |
| 120 // both IllegalCharsetNameException and UnsupportedCharsetException are subclasses of IAE, too | |
| 121 // not severe enough to throw an exception, imo. Just record the fact it's bad ad we ignore it | |
| 122 sessionContext.getLog().error(getClass(), ex, String.format("Bad configuration value for filename encoding %s", altEncoding)); | |
| 123 cs = Charset.defaultCharset(); | |
| 124 } | |
| 125 } | |
| 126 return new StoragePathHelper((requiresFlags & STORE) != 0, (requiresFlags & FNCACHE) != 0, (requiresFlags & DOTENCODE) != 0, cs); | 115 return new StoragePathHelper((requiresFlags & STORE) != 0, (requiresFlags & FNCACHE) != 0, (requiresFlags & DOTENCODE) != 0, cs); |
| 127 } | 116 } |
| 128 | 117 |
| 129 public PathRewrite buildRepositoryFilesHelper() { | 118 public PathRewrite buildRepositoryFilesHelper() { |
| 130 if ((requiresFlags & STORE) != 0) { | 119 if ((requiresFlags & STORE) != 0) { |
| 175 new File(hgDir, "store").mkdir(); // with that, hg verify says ok. | 164 new File(hgDir, "store").mkdir(); // with that, hg verify says ok. |
| 176 } | 165 } |
| 177 | 166 |
| 178 public boolean isCaseSensitiveFileSystem() { | 167 public boolean isCaseSensitiveFileSystem() { |
| 179 return isCaseSensitiveFileSystem; | 168 return isCaseSensitiveFileSystem; |
| 169 } | |
| 170 | |
| 171 public EncodingHelper buildFileNameEncodingHelper() { | |
| 172 return new EncodingHelper(getFileEncoding()); | |
| 173 } | |
| 174 | |
| 175 private Charset getFileEncoding() { | |
| 176 Object altEncoding = sessionContext.getProperty(CFG_PROPERTY_FS_FILENAME_ENCODING, null); | |
| 177 Charset cs; | |
| 178 if (altEncoding == null) { | |
| 179 cs = Charset.defaultCharset(); | |
| 180 } else { | |
| 181 try { | |
| 182 cs = Charset.forName(altEncoding.toString()); | |
| 183 } catch (IllegalArgumentException ex) { | |
| 184 // both IllegalCharsetNameException and UnsupportedCharsetException are subclasses of IAE, too | |
| 185 // not severe enough to throw an exception, imo. Just record the fact it's bad ad we ignore it | |
| 186 sessionContext.getLog().error(Internals.class, ex, String.format("Bad configuration value for filename encoding %s", altEncoding)); | |
| 187 cs = Charset.defaultCharset(); | |
| 188 } | |
| 189 } | |
| 190 return cs; | |
| 180 } | 191 } |
| 181 | 192 |
| 182 public static boolean runningOnWindows() { | 193 public static boolean runningOnWindows() { |
| 183 return System.getProperty("os.name").indexOf("Windows") != -1; | 194 return System.getProperty("os.name").indexOf("Windows") != -1; |
| 184 } | 195 } |
