Browse Source

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
stable-3.4
Dave Borowitz 11 years ago
parent
commit
27473d8e66
  1. 14
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/NameRevCommandTest.java
  2. 11
      org.eclipse.jgit/src/org/eclipse/jgit/api/NameRevCommand.java

14
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/NameRevCommandTest.java

@ -44,6 +44,7 @@
package org.eclipse.jgit.api; package org.eclipse.jgit.api;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Map; import java.util.Map;
@ -108,6 +109,19 @@ public class NameRevCommandTest extends RepositoryTestCase {
assertOneResult("tag2", git.nameRev().addAnnotatedTags(), c); 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<ObjectId, String> result = git.nameRev()
.add(c)
.addAnnotatedTags()
.call();
assertTrue(result.toString(), result.isEmpty());
}
@Test @Test
public void simpleAncestor() throws Exception { public void simpleAncestor() throws Exception {
// 0--1--2 // 0--1--2

11
org.eclipse.jgit/src/org/eclipse/jgit/api/NameRevCommand.java

@ -112,8 +112,8 @@ public class NameRevCommand extends GitCommand<Map<ObjectId, String>> {
private final RevWalk walk; private final RevWalk walk;
private final List<String> prefixes; private final List<String> prefixes;
private final List<Ref> refs;
private final List<ObjectId> revs; private final List<ObjectId> revs;
private List<Ref> refs;
private int mergeCost; private int mergeCost;
/** /**
@ -125,7 +125,6 @@ public class NameRevCommand extends GitCommand<Map<ObjectId, String>> {
super(repo); super(repo);
mergeCost = MERGE_COST; mergeCost = MERGE_COST;
prefixes = new ArrayList<String>(2); prefixes = new ArrayList<String>(2);
refs = new ArrayList<Ref>();
revs = new ArrayList<ObjectId>(2); revs = new ArrayList<ObjectId>(2);
walk = new RevWalk(repo) { walk = new RevWalk(repo) {
@Override @Override
@ -140,8 +139,10 @@ public class NameRevCommand extends GitCommand<Map<ObjectId, String>> {
try { try {
Map<ObjectId, String> nonCommits = new HashMap<ObjectId, String>(); Map<ObjectId, String> nonCommits = new HashMap<ObjectId, String>();
FIFORevQueue pending = new FIFORevQueue(); FIFORevQueue pending = new FIFORevQueue();
if (refs != null) {
for (Ref ref : refs) for (Ref ref : refs)
addRef(ref, nonCommits, pending); addRef(ref, nonCommits, pending);
}
addPrefixes(nonCommits, pending); addPrefixes(nonCommits, pending);
int cutoff = minCommitTime() - COMMIT_TIME_SLOP; int cutoff = minCommitTime() - COMMIT_TIME_SLOP;
@ -273,6 +274,8 @@ public class NameRevCommand extends GitCommand<Map<ObjectId, String>> {
*/ */
public NameRevCommand addAnnotatedTags() { public NameRevCommand addAnnotatedTags() {
checkCallable(); checkCallable();
if (refs == null)
refs = new ArrayList<Ref>();
try { try {
for (Ref ref : repo.getRefDatabase().getRefs(Constants.R_TAGS).values()) { for (Ref ref : repo.getRefDatabase().getRefs(Constants.R_TAGS).values()) {
ObjectId id = ref.getObjectId(); ObjectId id = ref.getObjectId();
@ -298,6 +301,8 @@ public class NameRevCommand extends GitCommand<Map<ObjectId, String>> {
*/ */
public NameRevCommand addRef(Ref ref) { public NameRevCommand addRef(Ref ref) {
checkCallable(); checkCallable();
if (refs == null)
refs = new ArrayList<Ref>();
refs.add(ref); refs.add(ref);
return this; return this;
} }
@ -312,7 +317,7 @@ public class NameRevCommand extends GitCommand<Map<ObjectId, String>> {
if (!prefixes.isEmpty()) { if (!prefixes.isEmpty()) {
for (String prefix : prefixes) for (String prefix : prefixes)
addPrefix(prefix, nonCommits, pending); addPrefix(prefix, nonCommits, pending);
} else if (refs.isEmpty()) } else if (refs == null)
addPrefix(Constants.R_REFS, nonCommits, pending); addPrefix(Constants.R_REFS, nonCommits, pending);
} }

Loading…
Cancel
Save