Merge branch 'ss/describe-dirty-in-the-right-directory'
authorJunio C Hamano <gitster@pobox.com>
Thu, 7 Feb 2019 06:05:29 +0000 (22:05 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 7 Feb 2019 06:05:29 +0000 (22:05 -0800)
"git --work-tree=$there --git-dir=$here describe --dirty" did not
work correctly as it did not pay attention to the location of the
worktree specified by the user by mistake, which has been
corrected.

* ss/describe-dirty-in-the-right-directory:
t6120: test for describe with a bare repository
describe: setup working tree for --dirty

builtin/describe.c
t/t6120-describe.sh
index 02ec56417a197b7e252625561fa462a215499a4d..1409cedce2fb08dc24b57db9e3a3591c3760d8af 100644 (file)
@@ -630,6 +630,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
                        struct argv_array args = ARGV_ARRAY_INIT;
                        int fd, result;
 
+                       setup_work_tree();
                        read_cache();
                        refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED,
                                      NULL, NULL, NULL);
index d639d946965547c86708701bfde276649c568a15..ee5b03ee18ada34a7b8012d219cbb63c4bb7f256 100755 (executable)
@@ -143,16 +143,46 @@ test_expect_success 'rename tag Q back to A' '
 test_expect_success 'pack tag refs' 'git pack-refs'
 check_describe A-* HEAD
 
+test_expect_success 'describe works from outside repo using --git-dir' '
+       git clone --bare "$TRASH_DIRECTORY" "$TRASH_DIRECTORY/bare" &&
+       git --git-dir "$TRASH_DIRECTORY/bare" describe >out &&
+       grep "^A-[1-9][0-9]\?-g[0-9a-f]\+$" out
+'
+
 check_describe "A-*[0-9a-f]" --dirty
 
+test_expect_success 'describe --dirty with --work-tree' '
+       (
+               cd "$TEST_DIRECTORY" &&
+               git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
+       ) &&
+       grep "^A-[1-9][0-9]\?-g[0-9a-f]\+$" out
+'
+
 test_expect_success 'set-up dirty work tree' '
        echo >>file
 '
 
 check_describe "A-*[0-9a-f]-dirty" --dirty
 
+test_expect_success 'describe --dirty with --work-tree (dirty)' '
+       (
+               cd "$TEST_DIRECTORY" &&
+               git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
+       ) &&
+       grep "^A-[1-9][0-9]\?-g[0-9a-f]\+-dirty$" out
+'
+
 check_describe "A-*[0-9a-f].mod" --dirty=.mod
 
+test_expect_success 'describe --dirty=.mod with --work-tree (dirty)' '
+       (
+               cd "$TEST_DIRECTORY" &&
+               git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty=.mod >"$TRASH_DIRECTORY/out"
+       ) &&
+       grep "^A-[1-9][0-9]\?-g[0-9a-f]\+.mod$" out
+'
+
 test_expect_success 'describe --dirty HEAD' '
        test_must_fail git describe --dirty HEAD
 '
@@ -303,8 +333,17 @@ test_expect_success 'describe chokes on severely broken submodules' '
        mv .git/modules/sub1/ .git/modules/sub_moved &&
        test_must_fail git describe --dirty
 '
+
 test_expect_success 'describe ignoring a broken submodule' '
        git describe --broken >out &&
+       grep broken out
+'
+
+test_expect_success 'describe with --work-tree ignoring a broken submodule' '
+       (
+               cd "$TEST_DIRECTORY" &&
+               git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --broken >"$TRASH_DIRECTORY/out"
+       ) &&
        test_when_finished "mv .git/modules/sub_moved .git/modules/sub1" &&
        grep broken out
 '