Browse Source

Allow a @ without branch in revision syntax

No branch before @ is interpreted as the currently checked out branch.
For detached heads it would be HEAD, but normally it is the branch
that HEAD refers to.

Change-Id: I051a1724fa390b8212e8986ba832b1347a20371e
stable-2.1
Robin Rosenberg 13 years ago
parent
commit
f82d1cb5c0
  1. 32
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogResolveTest.java
  2. 18
      org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java

32
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogResolveTest.java

@ -71,6 +71,38 @@ public class ReflogResolveTest extends RepositoryTestCase {
assertEquals(c1, db.resolve("master@{1}"));
}
@Test
public void resolveUnnamedCurrentBranchCommits() throws Exception {
Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
RevCommit c1 = git.commit().setMessage("create file").call();
writeTrashFile("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
RevCommit c2 = git.commit().setMessage("edit file").call();
assertEquals(c2, db.resolve("master@{0}"));
assertEquals(c1, db.resolve("master@{1}"));
git.checkout().setCreateBranch(true).setName("newbranch")
.setStartPoint(c1).call();
// same as current branch, e.g. master
assertEquals(c1, db.resolve("@{0}"));
try {
assertEquals(c1, db.resolve("@{1}"));
fail(); // Looking at wrong ref, e.g HEAD
} catch (RevisionSyntaxException e) {
assertNotNull(e);
}
// detached head, read HEAD reflog
git.checkout().setName(c2.getName()).call();
assertEquals(c2, db.resolve("@{0}"));
assertEquals(c1, db.resolve("@{1}"));
assertEquals(c2, db.resolve("@{2}"));
}
@Test
public void resolveReflogParent() throws Exception {
Git git = new Git(db);

18
org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java

@ -533,10 +533,22 @@ public abstract class Repository {
}
if (time != null) {
String refName = new String(revChars, 0, i);
Ref resolved = getRefDatabase().getRef(refName);
if (resolved == null)
Ref ref;
if (refName.equals("")) {
// Currently checked out branch, HEAD if
// detached
ref = getRef(Constants.HEAD);
if (ref == null)
return null;
rev = resolveReflog(rw, resolved, time);
if (ref.isSymbolic())
ref = ref.getLeaf();
if (ref.getObjectId() == null)
return null;
} else
ref = getRef(refName);
if (ref == null)
return null;
rev = resolveReflog(rw, ref, time);
i = m;
} else
i = m - 1;

Loading…
Cancel
Save