]> source.dussan.org Git - jgit.git/commitdiff
Ensure resetting on commit id 80/6080/2
authorDariusz Luksza <dariusz@luksza.org>
Wed, 23 May 2012 00:04:04 +0000 (02:04 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 23 May 2012 14:18:33 +0000 (16:18 +0200)
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>
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java

index f10aaf52e1368a835ee8bce79c26814b07cc4e97..27c3549be3c00a88d812e904bd32ddaed6c4052c 100644 (file)
@@ -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
index 60776f903cef8037ce17f12a12da1f602c0005d5..422056bd6d5c0d5c439392298fd14e2d47987262 100644 (file)
@@ -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