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

[EGIT PATCH 05/26] Allow AbstractTreeIterators to find out about StopWalkExceptions

From
Shawn O. Pearce <spearce@spearce.org>
Date
Aug 12, 2008, 01:07 UTC
Message-ID
<1218503293-14057-6-git-send-email-spearce@spearce.org>
In-Reply-To
<1218503293-14057-5-git-send-email-spearce@spearce.org>

If a tree iterator has overridden skip() to specially handle entries which the TreeWalk has decided are not relevant then it might also need to pay attention to a StopWalkException. The SWE is thrown out of a filter and behaves much like skip, except it skips everything else in the tree. This is used by PathFilterGroup to break out of a walk once we know that no additional records could ever match.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 .../jgit/treewalk/AbstractTreeIterator.java        |   11 +++++++++++
 .../spearce/jgit/treewalk/EmptyTreeIterator.java   |    6 ++++++
 .../src/org/spearce/jgit/treewalk/TreeWalk.java    |    2 ++
 3 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/AbstractTreeIterator.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/AbstractTreeIterator.java
index 6d7159c..98fec09 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/AbstractTreeIterator.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/AbstractTreeIterator.java
@@ -391,4 +391,15 @@ public abstract class AbstractTreeIterator {
 	public void skip() throws CorruptObjectException {
 		next();
 	}
+
+	/**
+	 * Indicates to the iterator that no more entries will be read.
+	 * <p>
+	 * This is only invoked by TreeWalk when the iteration is aborted early due
+	 * to a {@link org.spearce.jgit.errors.StopWalkException} being thrown from
+	 * within a TreeFilter.
+	 */
+	public void stopWalk() {
+		// Do nothing by default.  Most iterators do not care.
+	}
 }
diff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/EmptyTreeIterator.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/EmptyTreeIterator.java
index 09d2bde..c5dc4ad 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/EmptyTreeIterator.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/EmptyTreeIterator.java
@@ -87,4 +87,10 @@ public class EmptyTreeIterator extends AbstractTreeIterator {
 	public void next() throws CorruptObjectException {
 		// Do nothing.
 	}
+
+	@Override
+	public void stopWalk() {
+		if (parent != null)
+			parent.stopWalk();
+	}
 }
diff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java
index d4050ec..1d842bc 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java
@@ -408,6 +408,8 @@ public class TreeWalk {
 				return true;
 			}
 		} catch (StopWalkException stop) {
+			for (final AbstractTreeIterator t : trees)
+				t.stopWalk();
 			return false;
 		}
 	}
-- 
1.6.0.rc2.22.g71b99
Previous: Shawn O. PearceNext: Shawn O. Pearce
Message 6 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.