reset $pathspec: exit with code 0 if successful
authorMartin von Zweigbergk <martinvonz@gmail.com>
Tue, 15 Jan 2013 05:47:34 +0000 (21:47 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 15 Jan 2013 17:38:07 +0000 (09:38 -0800)
"git reset $pathspec" currently exits with a non-zero exit code if the
worktree is dirty after resetting, which is inconsistent with reset
without pathspec, and it makes it harder to know whether the command
really failed. Change it to exit with code 0 regardless of whether the
worktree is dirty so that non-zero indicates an error.

This makes the 4 "disambiguation" test cases in t7102 clearer since
they all used to "fail", 3 of which "failed" due to changes in the
work tree. Now only the ambiguous one fails.

Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/reset.c
t/t2013-checkout-submodule.sh
t/t7102-reset.sh

index 8cc7c722ef1c4912aac18d5dddb6aaf31a755ce2..65413d0a67041474625ea55a1912c178314b365c 100644 (file)
@@ -119,19 +119,17 @@ static void print_new_head_line(struct commit *commit)
 
 static int update_index_refresh(int fd, struct lock_file *index_lock, int flags)
 {
-       int result;
-
        if (!index_lock) {
                index_lock = xcalloc(1, sizeof(struct lock_file));
                fd = hold_locked_index(index_lock, 1);
        }
 
-       result = refresh_index(&the_index, (flags), NULL, NULL,
-                              _("Unstaged changes after reset:")) ? 1 : 0;
+       refresh_index(&the_index, (flags), NULL, NULL,
+                     _("Unstaged changes after reset:"));
        if (write_cache(fd, active_cache, active_nr) ||
                        commit_locked_index(index_lock))
                return error ("Could not refresh index");
-       return result;
+       return 0;
 }
 
 static void update_index_from_diff(struct diff_queue_struct *q,
index 70edbb33e26c0ee6d5cec81d2417c8a830d6fab1..06b18f8bc1e2991170736254bf3c558ab4673d13 100755 (executable)
@@ -23,7 +23,7 @@ test_expect_success '"reset <submodule>" updates the index' '
        git update-index --refresh &&
        git diff-files --quiet &&
        git diff-index --quiet --cached HEAD &&
-       test_must_fail git reset HEAD^ submodule &&
+       git reset HEAD^ submodule &&
        test_must_fail git diff-files --quiet &&
        git reset submodule &&
        git diff-files --quiet
index b096dc88c2f4caf28887cf8fea5d700f0132f5a3..81b2570a3e21df5b35750df6539103e14425a31a 100755 (executable)
@@ -388,7 +388,8 @@ test_expect_success 'test --mixed <paths>' '
        echo 4 > file4 &&
        echo 5 > file1 &&
        git add file1 file3 file4 &&
-       test_must_fail git reset HEAD -- file1 file2 file3 &&
+       git reset HEAD -- file1 file2 file3 &&
+       test_must_fail git diff --quiet &&
        git diff > output &&
        test_cmp output expect &&
        git diff --cached > output &&
@@ -402,7 +403,8 @@ test_expect_success 'test resetting the index at give paths' '
        >sub/file2 &&
        git update-index --add sub/file1 sub/file2 &&
        T=$(git write-tree) &&
-       test_must_fail git reset HEAD sub/file2 &&
+       git reset HEAD sub/file2 &&
+       test_must_fail git diff --quiet &&
        U=$(git write-tree) &&
        echo "$T" &&
        echo "$U" &&
@@ -440,7 +442,8 @@ test_expect_success 'resetting specific path that is unmerged' '
                echo "100644 $F3 3      file2"
        } | git update-index --index-info &&
        git ls-files -u &&
-       test_must_fail git reset HEAD file2 &&
+       git reset HEAD file2 &&
+       test_must_fail git diff --quiet &&
        git diff-index --exit-code --cached HEAD
 '
 
@@ -449,7 +452,8 @@ test_expect_success 'disambiguation (1)' '
        git reset --hard &&
        >secondfile &&
        git add secondfile &&
-       test_must_fail git reset secondfile &&
+       git reset secondfile &&
+       test_must_fail git diff --quiet -- secondfile &&
        test -z "$(git diff --cached --name-only)" &&
        test -f secondfile &&
        test ! -s secondfile
@@ -474,7 +478,8 @@ test_expect_success 'disambiguation (3)' '
        >secondfile &&
        git add secondfile &&
        rm -f secondfile &&
-       test_must_fail git reset HEAD secondfile &&
+       git reset HEAD secondfile &&
+       test_must_fail git diff --quiet &&
        test -z "$(git diff --cached --name-only)" &&
        test ! -f secondfile
 
@@ -486,7 +491,8 @@ test_expect_success 'disambiguation (4)' '
        >secondfile &&
        git add secondfile &&
        rm -f secondfile &&
-       test_must_fail git reset -- secondfile &&
+       git reset -- secondfile &&
+       test_must_fail git diff --quiet &&
        test -z "$(git diff --cached --name-only)" &&
        test ! -f secondfile
 '