[EGIT PATCH 16/26] Support recursively getting all entries under a subtree path
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Aug 12, 2008, 01:08 UTC
- Message-ID
- <1218503293-14057-17-git-send-email-spearce@spearce.org>
- In-Reply-To
- <1218503293-14057-16-git-send-email-spearce@spearce.org>
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 <spearce@spearce.org> --- .../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