Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgRepository.java @ 237:6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 10 Jun 2011 04:35:21 +0200 |
| parents | fd845a53f53d |
| children | df9d2854d3d6 |
comparison
equal
deleted
inserted
replaced
| 236:883300108179 | 237:6e1373b54e9b |
|---|---|
| 20 | 20 |
| 21 import java.io.File; | 21 import java.io.File; |
| 22 import java.io.IOException; | 22 import java.io.IOException; |
| 23 import java.io.StringReader; | 23 import java.io.StringReader; |
| 24 import java.lang.ref.SoftReference; | 24 import java.lang.ref.SoftReference; |
| 25 import java.nio.charset.Charset; | |
| 26 import java.util.ArrayList; | 25 import java.util.ArrayList; |
| 27 import java.util.Collections; | 26 import java.util.Collections; |
| 28 import java.util.HashMap; | 27 import java.util.HashMap; |
| 29 import java.util.List; | 28 import java.util.List; |
| 30 | 29 |
| 62 public static IllegalStateException notImplemented() { | 61 public static IllegalStateException notImplemented() { |
| 63 return new IllegalStateException("Not implemented"); | 62 return new IllegalStateException("Not implemented"); |
| 64 } | 63 } |
| 65 | 64 |
| 66 private final File repoDir; // .hg folder | 65 private final File repoDir; // .hg folder |
| 66 private final File workingDir; // .hg/../ | |
| 67 private final String repoLocation; | 67 private final String repoLocation; |
| 68 private final DataAccessProvider dataAccess; | 68 private final DataAccessProvider dataAccess; |
| 69 private final PathRewrite normalizePath; | 69 private final PathRewrite normalizePath; |
| 70 private final PathRewrite dataPathHelper; | 70 private final PathRewrite dataPathHelper; |
| 71 private final PathRewrite repoPathHelper; | 71 private final PathRewrite repoPathHelper; |
| 83 private HgIgnore ignore; | 83 private HgIgnore ignore; |
| 84 private ConfigFile configFile; | 84 private ConfigFile configFile; |
| 85 | 85 |
| 86 HgRepository(String repositoryPath) { | 86 HgRepository(String repositoryPath) { |
| 87 repoDir = null; | 87 repoDir = null; |
| 88 workingDir = null; | |
| 88 repoLocation = repositoryPath; | 89 repoLocation = repositoryPath; |
| 89 dataAccess = null; | 90 dataAccess = null; |
| 90 dataPathHelper = repoPathHelper = null; | 91 dataPathHelper = repoPathHelper = null; |
| 91 normalizePath = null; | 92 normalizePath = null; |
| 92 } | 93 } |
| 94 HgRepository(String repositoryPath, File repositoryRoot) { | 95 HgRepository(String repositoryPath, File repositoryRoot) { |
| 95 assert ".hg".equals(repositoryRoot.getName()) && repositoryRoot.isDirectory(); | 96 assert ".hg".equals(repositoryRoot.getName()) && repositoryRoot.isDirectory(); |
| 96 assert repositoryPath != null; | 97 assert repositoryPath != null; |
| 97 assert repositoryRoot != null; | 98 assert repositoryRoot != null; |
| 98 repoDir = repositoryRoot; | 99 repoDir = repositoryRoot; |
| 100 workingDir = repoDir.getParentFile(); | |
| 101 if (workingDir == null) { | |
| 102 throw new IllegalArgumentException(repoDir.toString()); | |
| 103 } | |
| 99 repoLocation = repositoryPath; | 104 repoLocation = repositoryPath; |
| 100 dataAccess = new DataAccessProvider(); | 105 dataAccess = new DataAccessProvider(); |
| 101 final boolean runningOnWindows = System.getProperty("os.name").indexOf("Windows") != -1; | 106 final boolean runningOnWindows = System.getProperty("os.name").indexOf("Windows") != -1; |
| 102 if (runningOnWindows) { | 107 if (runningOnWindows) { |
| 103 normalizePath = new PathRewrite() { | 108 normalizePath = new PathRewrite() { |
| 228 public Pair<Nodeid,Nodeid> getWorkingCopyParents() { | 233 public Pair<Nodeid,Nodeid> getWorkingCopyParents() { |
| 229 Nodeid[] p = loadDirstate().parents(); | 234 Nodeid[] p = loadDirstate().parents(); |
| 230 return new Pair<Nodeid,Nodeid>(NULL == p[0] ? null : p[0], NULL == p[1] ? null : p[1]); | 235 return new Pair<Nodeid,Nodeid>(NULL == p[0] ? null : p[0], NULL == p[1] ? null : p[1]); |
| 231 } | 236 } |
| 232 | 237 |
| 233 // local to hide use of io.File. | 238 /** |
| 239 * @return location where user files (shall) reside | |
| 240 */ | |
| 241 public File getWorkingDir() { | |
| 242 return workingDir; | |
| 243 } | |
| 244 | |
| 245 // shall be of use only for internal classes | |
| 234 /*package-local*/ File getRepositoryRoot() { | 246 /*package-local*/ File getRepositoryRoot() { |
| 235 return repoDir; | 247 return repoDir; |
| 236 } | 248 } |
| 237 | 249 |
| 238 // XXX package-local, unless there are cases when required from outside (guess, working dir/revision walkers may hide dirstate access and no public visibility needed) | 250 // XXX package-local, unless there are cases when required from outside (guess, working dir/revision walkers may hide dirstate access and no public visibility needed) |
| 305 } | 317 } |
| 306 | 318 |
| 307 /*package-local*/ List<Filter> getFiltersFromWorkingDirToRepo(Path p) { | 319 /*package-local*/ List<Filter> getFiltersFromWorkingDirToRepo(Path p) { |
| 308 return instantiateFilters(p, new Filter.Options(Filter.Direction.ToRepo)); | 320 return instantiateFilters(p, new Filter.Options(Filter.Direction.ToRepo)); |
| 309 } | 321 } |
| 322 | |
| 323 /*package-local*/ File getFile(HgDataFile dataFile) { | |
| 324 return new File(getWorkingDir(), dataFile.getPath().toString()); | |
| 325 } | |
| 310 | 326 |
| 311 private List<Filter> instantiateFilters(Path p, Filter.Options opts) { | 327 private List<Filter> instantiateFilters(Path p, Filter.Options opts) { |
| 312 List<Filter.Factory> factories = impl.getFilters(this, getConfigFile()); | 328 List<Filter.Factory> factories = impl.getFilters(this, getConfigFile()); |
| 313 if (factories.isEmpty()) { | 329 if (factories.isEmpty()) { |
| 314 return Collections.emptyList(); | 330 return Collections.emptyList(); |
