[EGIT PATCH 16/26] Support recursively getting all entries under a subtree path
From: Shawn O. Pearce <hidden>
Date: 2016-06-15 22:45:08
Subsystem:
the rest · Maintainer:
Linus Torvalds
Some applications need to process through all entries of a subtree. A good example is if the entries need to be recreated into another subtree to support a "cp -r a b" or "mv a b" operation. The getEntriesWithin method returns an array of all entries within a single subtree path, allowing the aplication to process over that array in order. Signed-off-by: Shawn O. Pearce <redacted> --- .../src/org/spearce/jgit/dircache/DirCache.java | 22 ++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/dircache/DirCache.java b/org.spearce.jgit/src/org/spearce/jgit/dircache/DirCache.java
index e48fdec..302c514 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/dircache/DirCache.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/dircache/DirCache.java@@ -631,6 +631,28 @@ public class DirCache { return i < 0 ? null : sortedEntries[i]; } + /** + * Recursively get all entries within a subtree. + * + * @param path + * the subtree path to get all entries within. + * @return all entries recursively contained within the subtree. + */ + public DirCacheEntry[] getEntriesWithin(String path) { + if (!path.endsWith("/")) + path += "/"; + final byte[] p = Constants.encode(path); + final int pLen = p.length; + + int eIdx = findEntry(p, pLen); + if (eIdx < 0) + eIdx = -(eIdx + 1); + final int lastIdx = nextEntry(p, pLen, eIdx); + final DirCacheEntry[] r = new DirCacheEntry[lastIdx - eIdx]; + System.arraycopy(sortedEntries, eIdx, r, 0, r.length); + return r; + } + void toArray(final int i, final DirCacheEntry[] dst, final int off, final int cnt) { System.arraycopy(sortedEntries, i, dst, off, cnt);
--
1.6.0.rc2.22.g71b99