Mercurial > jhg
diff src/org/tmatesoft/hg/repo/HgRepository.java @ 202:706bcc7cfee4
Basic test for HgIncomingCommand. Fix RepositoryComparator for cases when whole repository is unknown. Respect freshly initialized (empty) repositories in general.
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 26 Apr 2011 02:50:06 +0200 |
parents | 3a7696fb457c |
children | 8de327242aa0 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgRepository.java Thu Apr 21 19:16:45 2011 +0200 +++ b/src/org/tmatesoft/hg/repo/HgRepository.java Tue Apr 26 02:50:06 2011 +0200 @@ -124,7 +124,7 @@ public HgChangelog getChangelog() { if (this.changelog == null) { String storagePath = repoPathHelper.rewrite("00changelog.i"); - RevlogStream content = resolve(Path.create(storagePath)); + RevlogStream content = resolve(Path.create(storagePath), true); this.changelog = new HgChangelog(this, content); } return this.changelog; @@ -132,7 +132,7 @@ public HgManifest getManifest() { if (this.manifest == null) { - RevlogStream content = resolve(Path.create(repoPathHelper.rewrite("00manifest.i"))); + RevlogStream content = resolve(Path.create(repoPathHelper.rewrite("00manifest.i")), true); this.manifest = new HgManifest(this, content); } return this.manifest; @@ -154,7 +154,7 @@ public HgDataFile getFileNode(String path) { String nPath = normalizePath.rewrite(path); String storagePath = dataPathHelper.rewrite(nPath); - RevlogStream content = resolve(Path.create(storagePath)); + RevlogStream content = resolve(Path.create(storagePath), false); Path p = Path.create(nPath); if (content == null) { return new HgDataFile(this, p); @@ -164,7 +164,7 @@ public HgDataFile getFileNode(Path path) { String storagePath = dataPathHelper.rewrite(path.toString()); - RevlogStream content = resolve(Path.create(storagePath)); + RevlogStream content = resolve(Path.create(storagePath), false); // XXX no content when no file? or HgDataFile.exists() to detect that? if (content == null) { return new HgDataFile(this, path); @@ -220,7 +220,7 @@ * Perhaps, should be separate interface, like ContentLookup * path - repository storage path (i.e. one usually with .i or .d) */ - /*package-local*/ RevlogStream resolve(Path path) { + /*package-local*/ RevlogStream resolve(Path path, boolean shallFakeNonExistent) { final SoftReference<RevlogStream> ref = streamsCache.get(path); RevlogStream cached = ref == null ? null : ref.get(); if (cached != null) { @@ -231,6 +231,16 @@ RevlogStream s = new RevlogStream(dataAccess, f); streamsCache.put(path, new SoftReference<RevlogStream>(s)); return s; + } else { + if (shallFakeNonExistent) { + try { + File fake = File.createTempFile(f.getName(), null); + fake.deleteOnExit(); + return new RevlogStream(dataAccess, fake); + } catch (IOException ex) { + ex.printStackTrace(); // FIXME report in debug + } + } } return null; // XXX empty stream instead? }