aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org
diff options
context:
space:
mode:
authorMasaya Suzuki <masayasuzuki@google.com>2019-04-11 19:39:22 -0700
committerMasaya Suzuki <masayasuzuki@google.com>2019-04-11 19:45:52 -0700
commit3c1af2761f91ec7c17b648c0537e6c7f1847032e (patch)
treeb119da6aa05b8be20b1d71da7439ff5b6fbe76a4 /org.eclipse.jgit/src/org
parent38eaa490f2500f3c682541f295232673b2c9663b (diff)
downloadjgit-3c1af2761f91ec7c17b648c0537e6c7f1847032e.tar.gz
jgit-3c1af2761f91ec7c17b648c0537e6c7f1847032e.zip
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>
Diffstat (limited to 'org.eclipse.jgit/src/org')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/revwalk/DepthGenerator.java15
1 files changed, 14 insertions, 1 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/DepthGenerator.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/DepthGenerator.java
index 5154920393..5199a2927d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/DepthGenerator.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/DepthGenerator.java
@@ -108,12 +108,25 @@ class DepthGenerator extends Generator {
// Begin by sucking out all of the source's commits, and
// adding them to the pending queue
+ FIFORevQueue unshallowCommits = new FIFORevQueue();
for (;;) {
RevCommit c = s.next();
if (c == null)
break;
- if (((DepthWalk.Commit) c).getDepth() == 0)
+ if (c.has(UNSHALLOW)) {
+ unshallowCommits.add(c);
+ } else if (((DepthWalk.Commit) c).getDepth() == 0) {
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.