From 27473d8e66bda58c51eca6f474885bd893e79f07 Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Tue, 25 Mar 2014 18:34:54 -0700 Subject: [PATCH] Fix NameRevCommand when repo has no annotated tags Previously, calling addAnnotatedTags() did not modify any state when there were no annotated tags in the repository. This caused the code to assume no addFoo() methods had been called, and fell back to the default of adding refs/*. Instead, use null to indicate neither addRefs() nor addAnnotatedTags() was called. Add a test for this behavior. Change-Id: I9926e5ac17e1a983cd399798993031c72bd79c2c --- .../org/eclipse/jgit/api/NameRevCommandTest.java | 14 ++++++++++++++ .../src/org/eclipse/jgit/api/NameRevCommand.java | 15 ++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/NameRevCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/NameRevCommandTest.java index b92a636f5..491595498 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/NameRevCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/NameRevCommandTest.java @@ -44,6 +44,7 @@ package org.eclipse.jgit.api; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.util.Map; @@ -108,6 +109,19 @@ public class NameRevCommandTest extends RepositoryTestCase { assertOneResult("tag2", git.nameRev().addAnnotatedTags(), c); } + @Test + public void annotatedTagsNoResult() throws Exception { + RevCommit c = tr.commit().create(); + tr.update("refs/heads/master", c); + tr.update("refs/tags/tag1", c); + tr.update("refs/tags/tag2", c); + Map result = git.nameRev() + .add(c) + .addAnnotatedTags() + .call(); + assertTrue(result.toString(), result.isEmpty()); + } + @Test public void simpleAncestor() throws Exception { // 0--1--2 diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/NameRevCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/NameRevCommand.java index 95a1f352b..cce42fc51 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/NameRevCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/NameRevCommand.java @@ -112,8 +112,8 @@ public class NameRevCommand extends GitCommand> { private final RevWalk walk; private final List prefixes; - private final List refs; private final List revs; + private List refs; private int mergeCost; /** @@ -125,7 +125,6 @@ public class NameRevCommand extends GitCommand> { super(repo); mergeCost = MERGE_COST; prefixes = new ArrayList(2); - refs = new ArrayList(); revs = new ArrayList(2); walk = new RevWalk(repo) { @Override @@ -140,8 +139,10 @@ public class NameRevCommand extends GitCommand> { try { Map nonCommits = new HashMap(); FIFORevQueue pending = new FIFORevQueue(); - for (Ref ref : refs) - addRef(ref, nonCommits, pending); + if (refs != null) { + for (Ref ref : refs) + addRef(ref, nonCommits, pending); + } addPrefixes(nonCommits, pending); int cutoff = minCommitTime() - COMMIT_TIME_SLOP; @@ -273,6 +274,8 @@ public class NameRevCommand extends GitCommand> { */ public NameRevCommand addAnnotatedTags() { checkCallable(); + if (refs == null) + refs = new ArrayList(); try { for (Ref ref : repo.getRefDatabase().getRefs(Constants.R_TAGS).values()) { ObjectId id = ref.getObjectId(); @@ -298,6 +301,8 @@ public class NameRevCommand extends GitCommand> { */ public NameRevCommand addRef(Ref ref) { checkCallable(); + if (refs == null) + refs = new ArrayList(); refs.add(ref); return this; } @@ -312,7 +317,7 @@ public class NameRevCommand extends GitCommand> { if (!prefixes.isEmpty()) { for (String prefix : prefixes) addPrefix(prefix, nonCommits, pending); - } else if (refs.isEmpty()) + } else if (refs == null) addPrefix(Constants.R_REFS, nonCommits, pending); }