From: Marek Zawirski <marek.zawirski@gmail.com>
To: robin.rosenberg@dewire.com, spearce@spearce.org
Cc: git@vger.kernel.org, Marek Zawirski <marek.zawirski@gmail.com>
Subject: [EGIT PATCH 16/20] Support for RevSort.BOUNDARY in ObjectWalk
Date: Sun, 15 Jun 2008 23:45:45 +0200 [thread overview]
Message-ID: <1213566349-25395-17-git-send-email-marek.zawirski@gmail.com> (raw)
In-Reply-To: <1213566349-25395-16-git-send-email-marek.zawirski@gmail.com>
When RevSort.BOUNDARY strategy in enabled, ObjectWalk now includes in
nextObjects() all objects associated with boundary commits (trees,
blobs) and all other objects explictly marked as uninteresting
(boundary).
This behavior is something more than original C git-rev-list offers in
this matter - it is impossible to get such a behavior (to include all
boundary objects, not only commits, at output) directly from:
$ git-rev-list --objects-edge
Here, it is added for compactness - callers usually need also boundary
objects (e.g. for preparing thin-pack). If not, they can still easily
filter out such objects from nextObject() by checking for UNINTERESTING
flag or just use next() if interested only in commits.
Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>
---
.../src/org/spearce/jgit/revwalk/ObjectWalk.java | 26 +++++++++++++++----
.../src/org/spearce/jgit/revwalk/RevSort.java | 5 +++-
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/ObjectWalk.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/ObjectWalk.java
index 68ed861..81cebbd 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/ObjectWalk.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/ObjectWalk.java
@@ -66,8 +66,6 @@ import org.spearce.jgit.treewalk.TreeWalk;
* commits that are returned first.
*/
public class ObjectWalk extends RevWalk {
- private static final int SEEN_OR_UNINTERESTING = SEEN | UNINTERESTING;
-
private final TreeWalk treeWalk;
private BlockObjQueue objects;
@@ -177,6 +175,8 @@ public class ObjectWalk extends RevWalk {
IncorrectObjectTypeException, IOException {
while (o instanceof RevTag) {
o.flags |= UNINTERESTING;
+ if (hasRevSort(RevSort.BOUNDARY))
+ addObject(o);
o = ((RevTag) o).getObject();
parse(o);
}
@@ -187,6 +187,10 @@ public class ObjectWalk extends RevWalk {
markTreeUninteresting((RevTree) o);
else
o.flags |= UNINTERESTING;
+
+ if (o.getType() != Constants.OBJ_COMMIT && hasRevSort(RevSort.BOUNDARY)) {
+ addObject(o);
+ }
}
@Override
@@ -198,8 +202,10 @@ public class ObjectWalk extends RevWalk {
return null;
if ((r.flags & UNINTERESTING) != 0) {
markTreeUninteresting(r.getTree());
- if (hasRevSort(RevSort.BOUNDARY))
+ if (hasRevSort(RevSort.BOUNDARY)) {
+ objects.add(r.getTree());
return r;
+ }
continue;
}
objects.add(r.getTree());
@@ -237,17 +243,23 @@ public class ObjectWalk extends RevWalk {
switch (sType) {
case Constants.OBJ_BLOB: {
final RevObject o = lookupAny(treeWalk.getObjectId(0), sType);
- if ((o.flags & SEEN_OR_UNINTERESTING) != 0)
+ if ((o.flags & SEEN) != 0)
continue;
o.flags |= SEEN;
+ if ((o.flags & UNINTERESTING) != 0
+ && !hasRevSort(RevSort.BOUNDARY))
+ continue;
fromTreeWalk = true;
return o;
}
case Constants.OBJ_TREE: {
final RevObject o = lookupAny(treeWalk.getObjectId(0), sType);
- if ((o.flags & SEEN_OR_UNINTERESTING) != 0)
+ if ((o.flags & SEEN) != 0)
continue;
o.flags |= SEEN;
+ if ((o.flags & UNINTERESTING) != 0
+ && !hasRevSort(RevSort.BOUNDARY))
+ continue;
enterSubtree = true;
fromTreeWalk = true;
return o;
@@ -265,9 +277,11 @@ public class ObjectWalk extends RevWalk {
final RevObject o = objects.next();
if (o == null)
return null;
- if ((o.flags & SEEN_OR_UNINTERESTING) != 0)
+ if ((o.flags & SEEN) != 0)
continue;
o.flags |= SEEN;
+ if ((o.flags & UNINTERESTING) != 0 && !hasRevSort(RevSort.BOUNDARY))
+ continue;
if (o instanceof RevTree) {
currentTree = (RevTree) o;
treeWalk.reset(new ObjectId[] { currentTree });
diff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevSort.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevSort.java
index 8688f7f..b0a03ad 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevSort.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevSort.java
@@ -37,7 +37,7 @@
package org.spearce.jgit.revwalk;
-/** Sorting strategies supported by {@link RevWalk}. */
+/** Sorting strategies supported by {@link RevWalk} and {@link ObjectWalk}. */
public enum RevSort {
/**
* No specific sorting is requested.
@@ -83,6 +83,9 @@ public enum RevSort {
/**
* Include {@link RevFlag#UNINTERESTING} boundary commits after all others.
+ * In {@link ObjectWalk}, objects associated with such commits (trees,
+ * blobs), and all other objects marked explicitly as UNINTERESTING are also
+ * included.
* <p>
* A boundary commit is a UNINTERESTING parent of an interesting commit that
* was previously output.
--
1.5.5.1
next prev parent reply other threads:[~2008-06-15 21:48 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-15 21:45 [EGIT PATCH 00/20] PackWriter, first usable attempt Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 01/20] Fix typo in PackIndexV2 Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 02/20] Integer versions of copyRawTo() and fromRaw() in ObjectId Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 03/20] Add openObjectInAllPacks() to Repository, exposing packed objects storage Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 04/20] WindowedFile fragments copying: copyToStream() Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 05/20] Reverse pack index implementation: PackReverseIndex Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 06/20] Tests for PackReverseIndex Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 07/20] Refactor PackIndexV2 - extract binarySearchLevelTwo() Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 08/20] CRC32 support for PackIndex Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 09/20] CRC32 PackIndex tests Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 10/20] Format PackedObjectLoader class Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 11/20] Format UnpackedObjectLoader class Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 12/20] Format DeltaOfsPackedObjectLoader class Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 13/20] Raw-data operations in ObjectLoaders and PackFile Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 14/20] Add hasRevSort() in RevWalk for faster sorting strategy checking Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 15/20] Refactor getRevSort() calls to hasRevSort() Marek Zawirski
2008-06-15 21:45 ` Marek Zawirski [this message]
2008-06-15 21:45 ` [EGIT PATCH 17/20] Rename confusing objects field in ObjectWalk Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 18/20] New CountingOutputStream class - stream decorator Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 19/20] Simplified implementation of pack creation: PackWriter Marek Zawirski
2008-06-15 21:45 ` [EGIT PATCH 20/20] PackWriter test suite Marek Zawirski
2008-06-17 21:28 ` [EGIT PATCH 21/20] Make isBetterDeltaReuseLoader() static in PackWriter Marek Zawirski
2008-06-17 22:07 ` Robin Rosenberg
2008-06-19 16:26 ` Marek Zawirski
2008-06-16 4:06 ` [EGIT PATCH 05/20] Reverse pack index implementation: PackReverseIndex Shawn O. Pearce
2008-06-16 16:27 ` Marek Zawirski
2008-06-17 2:02 ` Shawn O. Pearce
2008-06-16 5:19 ` [EGIT PATCH 00/20] PackWriter, first usable attempt Shawn O. Pearce
2008-06-16 16:37 ` Marek Zawirski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1213566349-25395-17-git-send-email-marek.zawirski@gmail.com \
--to=marek.zawirski@gmail.com \
--cc=git@vger.kernel.org \
--cc=robin.rosenberg@dewire.com \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).