Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgRepository.java @ 539:9edfd5a223b8
Commit: handle empty repository case
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Wed, 13 Feb 2013 18:44:58 +0100 |
| parents | 2f9ed6bcefa2 |
| children | e4ee4bf4c7d0 |
comparison
equal
deleted
inserted
replaced
| 538:dd4f6311af52 | 539:9edfd5a223b8 |
|---|---|
| 182 } | 182 } |
| 183 | 183 |
| 184 public HgChangelog getChangelog() { | 184 public HgChangelog getChangelog() { |
| 185 if (changelog == null) { | 185 if (changelog == null) { |
| 186 File chlogFile = impl.getFileFromStoreDir("00changelog.i"); | 186 File chlogFile = impl.getFileFromStoreDir("00changelog.i"); |
| 187 if (!chlogFile.exists()) { | |
| 188 // fake its existence | |
| 189 chlogFile = fakeNonExistentFile(chlogFile); | |
| 190 } | |
| 191 RevlogStream content = new RevlogStream(impl.getDataAccess(), chlogFile); | 187 RevlogStream content = new RevlogStream(impl.getDataAccess(), chlogFile); |
| 192 changelog = new HgChangelog(this, content); | 188 changelog = new HgChangelog(this, content); |
| 193 } | 189 } |
| 194 return changelog; | 190 return changelog; |
| 195 } | 191 } |
| 196 | 192 |
| 197 public HgManifest getManifest() { | 193 public HgManifest getManifest() { |
| 198 if (manifest == null) { | 194 if (manifest == null) { |
| 199 File manifestFile = impl.getFileFromStoreDir("00manifest.i"); | 195 File manifestFile = impl.getFileFromStoreDir("00manifest.i"); |
| 200 if (!manifestFile.exists()) { | |
| 201 manifestFile = fakeNonExistentFile(manifestFile); | |
| 202 } | |
| 203 RevlogStream content = new RevlogStream(impl.getDataAccess(), manifestFile); | 196 RevlogStream content = new RevlogStream(impl.getDataAccess(), manifestFile); |
| 204 manifest = new HgManifest(this, content, impl.buildFileNameEncodingHelper()); | 197 manifest = new HgManifest(this, content, impl.buildFileNameEncodingHelper()); |
| 205 } | 198 } |
| 206 return manifest; | 199 return manifest; |
| 207 } | 200 } |
| 510 return s; | 503 return s; |
| 511 } | 504 } |
| 512 return null; | 505 return null; |
| 513 } | 506 } |
| 514 | 507 |
| 515 private File fakeNonExistentFile(File expected) throws HgInvalidFileException { | 508 /*package-local*/ RevlogStream createStoreFile(Path path) throws HgInvalidControlFileException { |
| 509 File f = impl.getFileFromDataDir(path); | |
| 516 try { | 510 try { |
| 517 File fake = File.createTempFile(expected.getName(), null); | 511 if (!f.exists()) { |
| 518 fake.deleteOnExit(); | 512 f.getParentFile().mkdirs(); |
| 519 return fake; | 513 f.createNewFile(); |
| 514 } | |
| 515 RevlogStream s = new RevlogStream(impl.getDataAccess(), f); | |
| 516 if (impl.shallCacheRevlogs()) { | |
| 517 streamsCache.put(path, new SoftReference<RevlogStream>(s)); | |
| 518 } | |
| 519 return s; | |
| 520 } catch (IOException ex) { | 520 } catch (IOException ex) { |
| 521 getSessionContext().getLog().dump(getClass(), Info, ex, null); | 521 throw new HgInvalidControlFileException("Can't create a file in the storage", ex, f); |
| 522 throw new HgInvalidFileException(String.format("Failed to fake existence of file %s", expected), ex); | |
| 523 } | 522 } |
| 524 } | 523 } |
| 525 | 524 |
| 526 /*package-local*/ List<Filter> getFiltersFromRepoToWorkingDir(Path p) { | 525 /*package-local*/ List<Filter> getFiltersFromRepoToWorkingDir(Path p) { |
| 527 return instantiateFilters(p, new Filter.Options(Filter.Direction.FromRepo)); | 526 return instantiateFilters(p, new Filter.Options(Filter.Direction.FromRepo)); |
