Browse Source

Process unshallow commits first

DepthGenerator marks commits reinteresting for the ones that are
reachable from unshallow commits as it walks over the revisions. Those
unshallow commits won't necessarily be processed first. Because of this,
even if a commit is reachable from unshallow commits, if it's processed
before the uninteresting commits, it will not be processed as
reinteresting and processed as uninteresting. This causes unshallow
git-fetch to be failed.

This changes DepthGenerator to process unshallow commits first
independent to their depth. This makes uninteresting flag carry work
properly.

Change-Id: I94378271cf85fbe6302cefc19a167d8cf68e1a69
Signed-off-by: Masaya Suzuki <masayasuzuki@google.com>
stable-5.4
Masaya Suzuki 6 years ago
parent
commit
3c1af2761f
  1. 15
      org.eclipse.jgit/src/org/eclipse/jgit/revwalk/DepthGenerator.java

15
org.eclipse.jgit/src/org/eclipse/jgit/revwalk/DepthGenerator.java

@ -108,13 +108,26 @@ class DepthGenerator extends Generator {
// Begin by sucking out all of the source's commits, and // Begin by sucking out all of the source's commits, and
// adding them to the pending queue // adding them to the pending queue
FIFORevQueue unshallowCommits = new FIFORevQueue();
for (;;) { for (;;) {
RevCommit c = s.next(); RevCommit c = s.next();
if (c == null) if (c == null)
break; break;
if (((DepthWalk.Commit) c).getDepth() == 0) if (c.has(UNSHALLOW)) {
unshallowCommits.add(c);
} else if (((DepthWalk.Commit) c).getDepth() == 0) {
pending.add(c); pending.add(c);
} }
}
// Move unshallow commits to the front so that the REINTERESTING flag
// carry over code is executed first.
for (;;) {
RevCommit c = unshallowCommits.next();
if (c == null) {
break;
}
pending.unpop(c);
}
// Mark DEEPEN_NOT on all deepen-not commits and their ancestors. // Mark DEEPEN_NOT on all deepen-not commits and their ancestors.
// TODO(jonathantanmy): This implementation is somewhat // TODO(jonathantanmy): This implementation is somewhat

Loading…
Cancel
Save