]> source.dussan.org Git - jgit.git/commitdiff
Fix ResetCommand to return the resulting ref 93/59093/2
authorChristian Halstrick <christian.halstrick@sap.com>
Wed, 28 Oct 2015 09:36:27 +0000 (10:36 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 20 Jan 2016 10:27:31 +0000 (11:27 +0100)
ResetCommand was not returning the updated ref as a result of the call()
method. Since the ResetCommand is always updating the same ref (HEAD)
this should always be the HEAD ref.

Bug: 440750
Change-Id: I7974975c3ab05e68c208384e69cf0692ded6e8db
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 a67f2b912acd224796688100a8cd771813e6d18f..66f25e8e51542e4e655877f49b04a2bdac23951c 100644 (file)
@@ -65,6 +65,7 @@ import org.eclipse.jgit.junit.RepositoryTestCase;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.FileMode;
 import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.treewalk.TreeWalk;
@@ -139,8 +140,8 @@ public class ResetCommandTest extends RepositoryTestCase {
                        AmbiguousObjectException, IOException, GitAPIException {
                setupRepository();
                ObjectId prevHead = db.resolve(Constants.HEAD);
-               git.reset().setMode(ResetType.HARD).setRef(initialCommit.getName())
-                               .call();
+               assertSameAsHead(git.reset().setMode(ResetType.HARD)
+                               .setRef(initialCommit.getName()).call());
                // check if HEAD points to initial commit now
                ObjectId head = db.resolve(Constants.HEAD);
                assertEquals(initialCommit, head);
@@ -176,8 +177,8 @@ public class ResetCommandTest extends RepositoryTestCase {
                        AmbiguousObjectException, IOException, GitAPIException {
                setupRepository();
                ObjectId prevHead = db.resolve(Constants.HEAD);
-               git.reset().setMode(ResetType.SOFT).setRef(initialCommit.getName())
-                               .call();
+               assertSameAsHead(git.reset().setMode(ResetType.SOFT)
+                               .setRef(initialCommit.getName()).call());
                // check if HEAD points to initial commit now
                ObjectId head = db.resolve(Constants.HEAD);
                assertEquals(initialCommit, head);
@@ -197,8 +198,8 @@ public class ResetCommandTest extends RepositoryTestCase {
                        AmbiguousObjectException, IOException, GitAPIException {
                setupRepository();
                ObjectId prevHead = db.resolve(Constants.HEAD);
-               git.reset().setMode(ResetType.MIXED).setRef(initialCommit.getName())
-                               .call();
+               assertSameAsHead(git.reset().setMode(ResetType.MIXED)
+                               .setRef(initialCommit.getName()).call());
                // check if HEAD points to initial commit now
                ObjectId head = db.resolve(Constants.HEAD);
                assertEquals(initialCommit, head);
@@ -241,7 +242,8 @@ public class ResetCommandTest extends RepositoryTestCase {
                assertTrue(bEntry.getLength() > 0);
                assertTrue(bEntry.getLastModified() > 0);
 
-               git.reset().setMode(ResetType.MIXED).setRef(commit2.getName()).call();
+               assertSameAsHead(git.reset().setMode(ResetType.MIXED)
+                               .setRef(commit2.getName()).call());
 
                cache = db.readDirCache();
 
@@ -280,7 +282,7 @@ public class ResetCommandTest extends RepositoryTestCase {
                                + "[a.txt, mode:100644, stage:3]",
                                indexState(0));
 
-               git.reset().setMode(ResetType.MIXED).call();
+               assertSameAsHead(git.reset().setMode(ResetType.MIXED).call());
 
                assertEquals("[a.txt, mode:100644]" + "[b.txt, mode:100644]",
                                indexState(0));
@@ -298,8 +300,8 @@ public class ResetCommandTest extends RepositoryTestCase {
 
                // 'a.txt' has already been modified in setupRepository
                // 'notAddedToIndex.txt' has been added to repository
-               git.reset().addPath(indexFile.getName())
-                               .addPath(untrackedFile.getName()).call();
+               assertSameAsHead(git.reset().addPath(indexFile.getName())
+                               .addPath(untrackedFile.getName()).call());
 
                DirCacheEntry postReset = DirCache.read(db.getIndexFile(), db.getFS())
                                .getEntry(indexFile.getName());
@@ -329,7 +331,7 @@ public class ResetCommandTest extends RepositoryTestCase {
                git.add().addFilepattern(untrackedFile.getName()).call();
 
                // 'dir/b.txt' has already been modified in setupRepository
-               git.reset().addPath("dir").call();
+               assertSameAsHead(git.reset().addPath("dir").call());
 
                DirCacheEntry postReset = DirCache.read(db.getIndexFile(), db.getFS())
                                .getEntry("dir/b.txt");
@@ -358,9 +360,9 @@ public class ResetCommandTest extends RepositoryTestCase {
                // 'a.txt' has already been modified in setupRepository
                // 'notAddedToIndex.txt' has been added to repository
                // reset to the inital commit
-               git.reset().setRef(initialCommit.getName())
-                               .addPath(indexFile.getName())
-                               .addPath(untrackedFile.getName()).call();
+               assertSameAsHead(git.reset().setRef(initialCommit.getName())
+                               .addPath(indexFile.getName()).addPath(untrackedFile.getName())
+                               .call());
 
                // check that HEAD hasn't moved
                ObjectId head = db.resolve(Constants.HEAD);
@@ -397,7 +399,7 @@ public class ResetCommandTest extends RepositoryTestCase {
                                + "[b.txt, mode:100644]",
                                indexState(0));
 
-               git.reset().addPath(file).call();
+               assertSameAsHead(git.reset().addPath(file).call());
 
                assertEquals("[a.txt, mode:100644]" + "[b.txt, mode:100644]",
                                indexState(0));
@@ -409,7 +411,7 @@ public class ResetCommandTest extends RepositoryTestCase {
                writeTrashFile("a.txt", "content");
                git.add().addFilepattern("a.txt").call();
                // Should assume an empty tree, like in C Git 1.8.2
-               git.reset().addPath("a.txt").call();
+               assertSameAsHead(git.reset().addPath("a.txt").call());
 
                DirCache cache = db.readDirCache();
                DirCacheEntry aEntry = cache.getEntry("a.txt");
@@ -421,7 +423,8 @@ public class ResetCommandTest extends RepositoryTestCase {
                git = new Git(db);
                writeTrashFile("a.txt", "content");
                git.add().addFilepattern("a.txt").call();
-               git.reset().setRef("doesnotexist").addPath("a.txt").call();
+               assertSameAsHead(
+                               git.reset().setRef("doesnotexist").addPath("a.txt").call());
        }
 
        @Test
@@ -431,7 +434,7 @@ public class ResetCommandTest extends RepositoryTestCase {
                git.add().addFilepattern("a.txt").call();
                writeTrashFile("a.txt", "modified");
                // should use default mode MIXED
-               git.reset().call();
+               assertSameAsHead(git.reset().call());
 
                DirCache cache = db.readDirCache();
                DirCacheEntry aEntry = cache.getEntry("a.txt");
@@ -452,7 +455,7 @@ public class ResetCommandTest extends RepositoryTestCase {
 
                git.add().addFilepattern(untrackedFile.getName()).call();
 
-               git.reset().setRef(tagName).setMode(HARD).call();
+               assertSameAsHead(git.reset().setRef(tagName).setMode(HARD).call());
 
                ObjectId head = db.resolve(Constants.HEAD);
                assertEquals(secondCommit, head);
@@ -486,7 +489,8 @@ public class ResetCommandTest extends RepositoryTestCase {
                                result.getMergeStatus());
                assertNotNull(db.readSquashCommitMsg());
 
-               g.reset().setMode(ResetType.HARD).setRef(first.getName()).call();
+               assertSameAsHead(g.reset().setMode(ResetType.HARD)
+                               .setRef(first.getName()).call());
 
                assertNull(db.readSquashCommitMsg());
        }
@@ -497,7 +501,7 @@ public class ResetCommandTest extends RepositoryTestCase {
                File fileA = writeTrashFile("a.txt", "content");
                git.add().addFilepattern("a.txt").call();
                // Should assume an empty tree, like in C Git 1.8.2
-               git.reset().setMode(ResetType.HARD).call();
+               assertSameAsHead(git.reset().setMode(ResetType.HARD).call());
 
                DirCache cache = db.readDirCache();
                DirCacheEntry aEntry = cache.getEntry("a.txt");
@@ -558,4 +562,14 @@ public class ResetCommandTest extends RepositoryTestCase {
                return dc.getEntry(path) != null;
        }
 
+       /**
+        * Asserts that a certain ref is similar to repos HEAD.
+        * @param ref
+        * @throws IOException
+        */
+       private void assertSameAsHead(Ref ref) throws IOException {
+               Ref headRef = db.getRef(Constants.HEAD);
+               assertEquals(headRef.getName(), ref.getName());
+               assertEquals(headRef.getObjectId(), ref.getObjectId());
+       }
 }
index 8f4bc4f26c35332e1c6e8ab5eb206a8404adf066..4c91e6c17fa51b0883cb1212d4ef1131e590c294 100644 (file)
@@ -190,10 +190,8 @@ public class ResetCommand extends GitCommand<Ref> {
                                ObjectId origHead = ru.getOldObjectId();
                                if (origHead != null)
                                        repo.writeOrigHead(origHead);
-                               result = ru.getRef();
-                       } else {
-                               result = repo.getRef(Constants.HEAD);
                        }
+                       result = repo.exactRef(Constants.HEAD);
 
                        if (mode == null)
                                mode = ResetType.MIXED;