git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[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
Previous: Shawn O. PearceNext: Shawn O. Pearce
Message 17 of 26 in “New DirCache API”
  1. 00/26 New DirCache APIShawn O. Pearce, Aug 12, 2008
  2. 01/26 Force all source code to UTF-8 encoding by defaultShawn O. Pearce, Aug 12, 2008
  3. 02/26 Protect WorkingTreeIterator's name encoding from weird ByteBuffersShawn O. Pearce, Aug 12, 2008
  4. 03/26 Add Constants.encode as a utility for quick encoding in UTF-8Shawn O. Pearce, Aug 12, 2008
  5. 04/26 Rely upon Constants.CHARSET over Constants.CHARACTER_ENCODINGShawn O. Pearce, Aug 12, 2008
  6. 05/26 Allow AbstractTreeIterators to find out about StopWalkExceptionsShawn O. Pearce, Aug 12, 2008
  7. 06/26 Implement a new .git/index (aka dircache) read interfaceShawn O. Pearce, Aug 12, 2008
  8. 07/26 Export the new DirCache API to Eclipse plugins using jgitShawn O. Pearce, Aug 12, 2008
  9. 08/26 Support locking (and unlocking) a .git/index through DirCacheShawn O. Pearce, Aug 12, 2008
  10. 09/26 Support writing a .git/index through DirCacheShawn O. Pearce, Aug 12, 2008
  11. 10/26 Support the 'TREE' extension in .git/index through DirCacheShawn O. Pearce, Aug 12, 2008
  12. 11/26 Support using a DirCache within a TreeWalkShawn O. Pearce, Aug 12, 2008
  13. 12/26 Support recreating a .git/index through DirCacheShawn O. Pearce, Aug 12, 2008
  14. 13/26 Support iterating and building a DirCache at the same timeShawn O. Pearce, Aug 12, 2008
  15. 14/26 Support creating a new DirCacheEntry for an arbitrary pathShawn O. Pearce, Aug 12, 2008
  16. 15/26 Support a simplified model of editing index entriesShawn O. Pearce, Aug 12, 2008
  17. 16/26 Support recursively getting all entries under a subtree pathShawn O. Pearce, Aug 12, 2008
  18. 17/26 Support copying meta fields from one DirCacheEntry to anotherShawn O. Pearce, Aug 12, 2008
  19. 18/26 Add JUnit tests for new DirCache APIShawn O. Pearce, Aug 12, 2008
  20. 20/26 Allow the new DirCacheIterator in command line argumentsShawn O. Pearce, Aug 12, 2008
  21. 21/26 Add debugging commands to interact with the new DirCache codeShawn O. Pearce, Aug 12, 2008
  22. 22/26 Add a basic command line implementation of rmShawn O. Pearce, Aug 12, 2008
  23. 23/26 Rewrite GitMoveDeleteHook to use DirCacheBuilderShawn O. Pearce, Aug 12, 2008
  24. 24/26 Teach GitMoveDeleteHook how to move a folder recursivelyShawn O. Pearce, Aug 12, 2008
  25. 25/26 Rewrite UntrackOperation to use DirCacheBuilderShawn O. Pearce, Aug 12, 2008
  26. 26/26 Rewrite AssumeUnchangedOperation to use DirCacheShawn O. Pearce, Aug 12, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.