Mercurial > hg4j
diff src/org/tmatesoft/hg/internal/CommitFacility.java @ 616:5e0313485eef
encode directories as demanded by fncache format
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 14 May 2013 17:31:35 +0200 |
parents | f41dd9a3b8af |
children | 65c01508f002 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/CommitFacility.java Mon May 13 22:48:29 2013 +0200 +++ b/src/org/tmatesoft/hg/internal/CommitFacility.java Tue May 14 17:31:35 2013 +0200 @@ -133,7 +133,7 @@ } // // Register new/changed - ArrayList<Path> newlyAddedFiles = new ArrayList<Path>(); + LinkedHashMap<Path, RevlogStream> newlyAddedFiles = new LinkedHashMap<Path, RevlogStream>(); ArrayList<Path> touchInDirstate = new ArrayList<Path>(); for (Pair<HgDataFile, ByteDataSupplier> e : files.values()) { HgDataFile df = e.first(); @@ -156,7 +156,7 @@ contentStream = repo.getImplAccess().getStream(df); } else { contentStream = repo.createStoreFile(df.getPath()); - newlyAddedFiles.add(df.getPath()); + newlyAddedFiles.put(df.getPath(), contentStream); // FIXME df doesn't get df.content updated, and clients // that would attempt to access newly added file after commit would fail // (despite the fact the file is in there) @@ -183,11 +183,14 @@ byte[] clogContent = changelogBuilder.build(manifestRev, message); RevlogStreamWriter changelogWriter = new RevlogStreamWriter(repo, repo.getImplAccess().getChangelogStream()); Nodeid changesetRev = changelogWriter.addRevision(clogContent, clogRevisionIndex, p1Commit, p2Commit); - // FIXME move fncache update to an external facility, along with dirstate and bookmark update + // TODO move fncache update to an external facility, along with dirstate and bookmark update if (!newlyAddedFiles.isEmpty() && repo.fncacheInUse()) { FNCacheFile fncache = new FNCacheFile(repo); - for (Path p : newlyAddedFiles) { - fncache.add(p); + for (Path p : newlyAddedFiles.keySet()) { + fncache.addIndex(p); + if (!newlyAddedFiles.get(p).isInlineData()) { + fncache.addData(p); + } } try { fncache.write(); @@ -232,9 +235,10 @@ if (p1Commit != NO_REVISION || p2Commit != NO_REVISION) { repo.getRepo().getBookmarks().updateActive(p1Cset, p2Cset, changesetRev); } + // TODO undo.dirstate and undo.branch as described in http://mercurial.selenic.com/wiki/FileFormats#undo..2A // TODO Revisit: might be reasonable to send out a "Repo changed" notification, to clear // e.g. cached branch, tags and so on, not to rely on file change detection methods? - // The same notificaion might come useful once Pull is implemented + // The same notification might come useful once Pull is implemented return changesetRev; } /*