Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/Internals.java @ 591:e447384f3771
CommitFacility as internal class; refactored infrastructure around internals (access to RevlogStream)
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 30 Apr 2013 18:55:42 +0200 |
| parents | ed243b668502 |
| children | e1b29756f901 |
comparison
equal
deleted
inserted
replaced
| 590:8cbc2a883d95 | 591:e447384f3771 |
|---|---|
| 30 import java.util.StringTokenizer; | 30 import java.util.StringTokenizer; |
| 31 | 31 |
| 32 import org.tmatesoft.hg.core.SessionContext; | 32 import org.tmatesoft.hg.core.SessionContext; |
| 33 import org.tmatesoft.hg.repo.HgDataFile; | 33 import org.tmatesoft.hg.repo.HgDataFile; |
| 34 import org.tmatesoft.hg.repo.HgInternals; | 34 import org.tmatesoft.hg.repo.HgInternals; |
| 35 import org.tmatesoft.hg.repo.HgInvalidControlFileException; | |
| 35 import org.tmatesoft.hg.repo.HgRepoConfig.ExtensionsSection; | 36 import org.tmatesoft.hg.repo.HgRepoConfig.ExtensionsSection; |
| 36 import org.tmatesoft.hg.repo.HgRepository; | 37 import org.tmatesoft.hg.repo.HgRepository; |
| 37 import org.tmatesoft.hg.repo.HgRepositoryFiles; | 38 import org.tmatesoft.hg.repo.HgRepositoryFiles; |
| 38 import org.tmatesoft.hg.repo.HgRepositoryLock; | 39 import org.tmatesoft.hg.repo.HgRepositoryLock; |
| 39 import org.tmatesoft.hg.repo.HgRuntimeException; | 40 import org.tmatesoft.hg.repo.HgRuntimeException; |
| 41 import org.tmatesoft.hg.util.Path; | |
| 40 import org.tmatesoft.hg.util.PathRewrite; | 42 import org.tmatesoft.hg.util.PathRewrite; |
| 41 | 43 |
| 42 /** | 44 /** |
| 43 * Fields/members that shall not be visible | 45 * Fields/members that shall not be visible |
| 44 * | 46 * |
| 113 | 115 |
| 114 private List<Filter.Factory> filterFactories; | 116 private List<Filter.Factory> filterFactories; |
| 115 private final HgRepository repo; | 117 private final HgRepository repo; |
| 116 private final File repoDir; | 118 private final File repoDir; |
| 117 private final boolean isCaseSensitiveFileSystem; | 119 private final boolean isCaseSensitiveFileSystem; |
| 118 private final boolean shallCacheRevlogsInRepo; | |
| 119 private final DataAccessProvider dataAccess; | 120 private final DataAccessProvider dataAccess; |
| 121 private final ImplAccess implAccess; | |
| 120 | 122 |
| 121 private final int requiresFlags; | 123 private final int requiresFlags; |
| 122 | 124 |
| 123 private final PathRewrite dataPathHelper; // access to file storage area (usually under .hg/store/data/), with filenames mangled | 125 private final PathRewrite dataPathHelper; // access to file storage area (usually under .hg/store/data/), with filenames mangled |
| 124 private final PathRewrite repoPathHelper; // access to system files (under .hg/store if requires has 'store' flag) | 126 private final PathRewrite repoPathHelper; // access to system files (under .hg/store if requires has 'store' flag) |
| 125 | 127 |
| 126 public Internals(HgRepository hgRepo, File hgDir) throws HgRuntimeException { | 128 private final RevlogStreamFactory streamProvider; |
| 129 | |
| 130 public Internals(HgRepository hgRepo, File hgDir, ImplAccess implementationAccess) throws HgRuntimeException { | |
| 127 repo = hgRepo; | 131 repo = hgRepo; |
| 128 repoDir = hgDir; | 132 repoDir = hgDir; |
| 133 implAccess = implementationAccess; | |
| 129 isCaseSensitiveFileSystem = !runningOnWindows(); | 134 isCaseSensitiveFileSystem = !runningOnWindows(); |
| 130 SessionContext ctx = repo.getSessionContext(); | 135 SessionContext ctx = repo.getSessionContext(); |
| 131 shallCacheRevlogsInRepo = new PropertyMarshal(ctx).getBoolean(CFG_PROPERTY_REVLOG_STREAM_CACHE, true); | |
| 132 dataAccess = new DataAccessProvider(ctx); | 136 dataAccess = new DataAccessProvider(ctx); |
| 133 RepoInitializer repoInit = new RepoInitializer().initRequiresFromFile(repoDir); | 137 RepoInitializer repoInit = new RepoInitializer().initRequiresFromFile(repoDir); |
| 134 requiresFlags = repoInit.getRequires(); | 138 requiresFlags = repoInit.getRequires(); |
| 135 dataPathHelper = repoInit.buildDataFilesHelper(getSessionContext()); | 139 dataPathHelper = repoInit.buildDataFilesHelper(getSessionContext()); |
| 136 repoPathHelper = repoInit.buildStoreFilesHelper(); | 140 repoPathHelper = repoInit.buildStoreFilesHelper(); |
| 141 boolean shallCacheRevlogsInRepo = new PropertyMarshal(ctx).getBoolean(CFG_PROPERTY_REVLOG_STREAM_CACHE, true); | |
| 142 streamProvider = new RevlogStreamFactory(this, shallCacheRevlogsInRepo); | |
| 137 } | 143 } |
| 138 | 144 |
| 139 public boolean isInvalid() { | 145 public boolean isInvalid() { |
| 140 return !repoDir.exists() || !repoDir.isDirectory(); | 146 return !repoDir.exists() || !repoDir.isDirectory(); |
| 141 } | 147 } |
| 369 // <repo>/.hg/hgrc | 375 // <repo>/.hg/hgrc |
| 370 configFile.addLocation(getFileFromRepoDir("hgrc")); | 376 configFile.addLocation(getFileFromRepoDir("hgrc")); |
| 371 return configFile; | 377 return configFile; |
| 372 } | 378 } |
| 373 | 379 |
| 380 /*package-local*/ImplAccess getImplAccess() { | |
| 381 return implAccess; | |
| 382 } | |
| 374 | 383 |
| 375 private static List<File> getWindowsConfigFilesPerInstall(File hgInstallDir) { | 384 private static List<File> getWindowsConfigFilesPerInstall(File hgInstallDir) { |
| 376 File f = new File(hgInstallDir, "Mercurial.ini"); | 385 File f = new File(hgInstallDir, "Mercurial.ini"); |
| 377 if (f.exists()) { | 386 if (f.exists()) { |
| 378 return Collections.singletonList(f); | 387 return Collections.singletonList(f); |
| 452 } | 461 } |
| 453 } | 462 } |
| 454 // fallback to default, let calling code fail with Exception if can't write | 463 // fallback to default, let calling code fail with Exception if can't write |
| 455 return new File(System.getProperty("user.home"), ".hgrc"); | 464 return new File(System.getProperty("user.home"), ".hgrc"); |
| 456 } | 465 } |
| 457 | 466 |
| 458 public boolean shallCacheRevlogs() { | 467 public RevlogStream createManifestStream() { |
| 459 return shallCacheRevlogsInRepo; | 468 File manifestFile = getFileFromStoreDir("00manifest.i"); |
| 460 } | 469 return streamProvider.create(manifestFile); |
| 461 | 470 } |
| 471 | |
| 472 public RevlogStream createChangelogStream() { | |
| 473 File chlogFile = getFileFromStoreDir("00changelog.i"); | |
| 474 return streamProvider.create(chlogFile); | |
| 475 } | |
| 476 | |
| 477 public RevlogStream resolveStoreFile(Path path) { | |
| 478 return streamProvider.resolveStoreFile(path); | |
| 479 } | |
| 480 | |
| 481 /*package-local*/ RevlogStream createStoreFile(Path path) throws HgInvalidControlFileException { | |
| 482 return streamProvider.createStoreFile(path); | |
| 483 } | |
| 484 | |
| 462 // marker method | 485 // marker method |
| 463 public static IllegalStateException notImplemented() { | 486 public static IllegalStateException notImplemented() { |
| 464 return new IllegalStateException("Not implemented"); | 487 return new IllegalStateException("Not implemented"); |
| 465 } | 488 } |
| 466 | 489 |
| 494 public static int ltoi(long l) { | 517 public static int ltoi(long l) { |
| 495 int i = (int) l; | 518 int i = (int) l; |
| 496 assert ((long) i) == l : "Loss of data!"; | 519 assert ((long) i) == l : "Loss of data!"; |
| 497 return i; | 520 return i; |
| 498 } | 521 } |
| 522 | |
| 523 // access implementation details (fields, methods) of oth.repo package | |
| 524 public interface ImplAccess { | |
| 525 public RevlogStream getStream(HgDataFile df); | |
| 526 public RevlogStream getManifestStream(); | |
| 527 public RevlogStream getChangelogStream(); | |
| 528 } | |
| 499 } | 529 } |
