[EGIT PATCH 16/26] Support recursively getting all entries under a subtree path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxx>
---
 .../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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux