Browse Source

Ensure resetting on commit id

When reset command was called with tag name as parameter the resulting
HEAD was set to the tag's SHA-1 which is a bug. This patch ensures that
repository.resolve() call always returns commit id.

Change-Id: I219b898c620a75c497c8652dbf4735fd094c4d7c
Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-2.0
Dariusz Luksza 13 years ago committed by Matthias Sohn
parent
commit
1bec1f2fae
  1. 20
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java
  2. 2
      org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java

20
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java

@ -42,6 +42,7 @@
*/
package org.eclipse.jgit.api;
import static org.eclipse.jgit.api.ResetCommand.ResetType.HARD;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@ -305,6 +306,25 @@ public class ResetCommandTest extends RepositoryTestCase {
assertFalse(inIndex(untrackedFile.getName()));
}
@Test
public void testHardResetOnTag() throws Exception {
setupRepository();
String tagName = "initialtag";
git.tag().setName(tagName).setObjectId(secondCommit)
.setMessage("message").call();
DirCacheEntry preReset = DirCache.read(db.getIndexFile(), db.getFS())
.getEntry(indexFile.getName());
assertNotNull(preReset);
git.add().addFilepattern(untrackedFile.getName()).call();
git.reset().setRef(tagName).setMode(HARD).call();
ObjectId head = db.resolve(Constants.HEAD);
assertTrue(head.equals(secondCommit));
}
private void assertReflog(ObjectId prevHead, ObjectId head)
throws IOException {
// Check the reflog for HEAD

2
org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java

@ -150,7 +150,7 @@ public class ResetCommand extends GitCommand<Ref> {
// resolve the ref to a commit
final ObjectId commitId;
try {
commitId = repo.resolve(ref);
commitId = repo.resolve(ref + "^{commit}");
if (commitId == null) {
// @TODO throw an InvalidRefNameException. We can't do that
// now because this would break the API

Loading…
Cancel
Save