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);
}
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;
+ if (ref.isSymbolic())
+ ref = ref.getLeaf();
+ if (ref.getObjectId() == null)
+ return null;
+ } else
+ ref = getRef(refName);
+ if (ref == null)
return null;
- rev = resolveReflog(rw, resolved, time);
+ rev = resolveReflog(rw, ref, time);
i = m;
} else
i = m - 1;