DirCache: Add helper to read from a tree
Application code sometimes wants to read a DirCache from an ObjectId, but its confusing how to do this because its buried inside the DirCacheBuilder. Use this utility in a few places within JGit that also want to read a DirCache from a tree's ObjectId. Change-Id: I578b7e18e58753d154937f4ab835012b09e5adca
This commit is contained in:
parent
45cc76524b
commit
93eca6dfe1
|
@ -71,9 +71,11 @@
|
|||
import org.eclipse.jgit.internal.JGitText;
|
||||
import org.eclipse.jgit.internal.storage.file.FileSnapshot;
|
||||
import org.eclipse.jgit.internal.storage.file.LockFile;
|
||||
import org.eclipse.jgit.lib.AnyObjectId;
|
||||
import org.eclipse.jgit.lib.Constants;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.ObjectInserter;
|
||||
import org.eclipse.jgit.lib.ObjectReader;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.treewalk.FileTreeIterator;
|
||||
import org.eclipse.jgit.treewalk.TreeWalk;
|
||||
|
@ -146,6 +148,28 @@ public static DirCache newInCore() {
|
|||
return new DirCache(null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new in memory index read from the contents of a tree.
|
||||
*
|
||||
* @param reader
|
||||
* reader to access the tree objects from a repository.
|
||||
* @param treeId
|
||||
* tree to read. Must identify a tree, not a tree-ish.
|
||||
* @return a new cache which has no backing store file, but contains the
|
||||
* contents of {@code treeId}.
|
||||
* @throws IOException
|
||||
* one or more trees not available from the ObjectReader.
|
||||
* @since 4.2
|
||||
*/
|
||||
public static DirCache read(ObjectReader reader, AnyObjectId treeId)
|
||||
throws IOException {
|
||||
DirCache d = newInCore();
|
||||
DirCacheBuilder b = d.builder();
|
||||
b.addTree(null, DirCacheEntry.STAGE_0, reader, treeId);
|
||||
b.finish();
|
||||
return d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new in-core index representation and read an index from disk.
|
||||
* <p>
|
||||
|
|
|
@ -57,8 +57,6 @@
|
|||
import java.util.TimeZone;
|
||||
|
||||
import org.eclipse.jgit.dircache.DirCache;
|
||||
import org.eclipse.jgit.dircache.DirCacheBuilder;
|
||||
import org.eclipse.jgit.dircache.DirCacheEntry;
|
||||
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
|
||||
import org.eclipse.jgit.errors.NoMergeBaseException;
|
||||
import org.eclipse.jgit.internal.JGitText;
|
||||
|
@ -70,7 +68,6 @@
|
|||
import org.eclipse.jgit.revwalk.filter.RevFilter;
|
||||
import org.eclipse.jgit.treewalk.AbstractTreeIterator;
|
||||
import org.eclipse.jgit.treewalk.EmptyTreeIterator;
|
||||
import org.eclipse.jgit.treewalk.TreeWalk;
|
||||
import org.eclipse.jgit.treewalk.WorkingTreeIterator;
|
||||
|
||||
/**
|
||||
|
@ -181,7 +178,7 @@ protected RevCommit getBaseCommit(RevCommit a, RevCommit b, int callDepth)
|
|||
WorkingTreeIterator oldWTreeIt = workingTreeIterator;
|
||||
workingTreeIterator = null;
|
||||
try {
|
||||
dircache = dircacheFromTree(currentBase.getTree());
|
||||
dircache = DirCache.read(reader, currentBase.getTree());
|
||||
inCore = true;
|
||||
|
||||
List<RevCommit> parents = new ArrayList<RevCommit>();
|
||||
|
@ -256,30 +253,4 @@ private static PersonIdent mockAuthor(List<RevCommit> parents) {
|
|||
new Date((time + 1) * 1000L),
|
||||
TimeZone.getTimeZone("GMT+0000")); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new in memory dircache which has the same content as a given
|
||||
* tree.
|
||||
*
|
||||
* @param treeId
|
||||
* the tree which should be used to fill the dircache
|
||||
* @return a new in memory dircache
|
||||
* @throws IOException
|
||||
*/
|
||||
private DirCache dircacheFromTree(ObjectId treeId) throws IOException {
|
||||
DirCache ret = DirCache.newInCore();
|
||||
DirCacheBuilder aBuilder = ret.builder();
|
||||
try (TreeWalk atw = new TreeWalk(reader)) {
|
||||
atw.addTree(treeId);
|
||||
atw.setRecursive(true);
|
||||
while (atw.next()) {
|
||||
DirCacheEntry e = new DirCacheEntry(atw.getRawPath());
|
||||
e.setFileMode(atw.getFileMode(0));
|
||||
e.setObjectId(atw.getObjectId(0));
|
||||
aBuilder.add(e);
|
||||
}
|
||||
}
|
||||
aBuilder.finish();
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,7 +65,6 @@
|
|||
import java.util.NoSuchElementException;
|
||||
|
||||
import org.eclipse.jgit.dircache.DirCache;
|
||||
import org.eclipse.jgit.dircache.DirCacheBuilder;
|
||||
import org.eclipse.jgit.dircache.DirCacheEditor;
|
||||
import org.eclipse.jgit.dircache.DirCacheEditor.PathEdit;
|
||||
import org.eclipse.jgit.dircache.DirCacheEntry;
|
||||
|
@ -448,13 +447,10 @@ public int compare(PendingCert a, PendingCert b) {
|
|||
}
|
||||
|
||||
private DirCache newDirCache() throws IOException {
|
||||
DirCache dc = DirCache.newInCore();
|
||||
if (commit != null) {
|
||||
DirCacheBuilder b = dc.builder();
|
||||
b.addTree(new byte[0], DirCacheEntry.STAGE_0, reader, commit.getTree());
|
||||
b.finish();
|
||||
return DirCache.read(reader, commit.getTree());
|
||||
}
|
||||
return dc;
|
||||
return DirCache.newInCore();
|
||||
}
|
||||
|
||||
private ObjectId saveCert(ObjectInserter inserter, DirCache dc,
|
||||
|
|
Loading…
Reference in New Issue