Skip to content
Snippets Groups Projects
Commit 2ed5c8e1 authored by Sebastian Staudt's avatar Sebastian Staudt Committed by Junio C Hamano
Browse files

describe: setup working tree for --dirty


We don't use NEED_WORK_TREE when running the git-describe builtin,
since you should be able to describe a commit even in a bare repository.
However, the --dirty flag does need a working tree. Since we don't call
setup_work_tree(), it uses whatever directory we happen to be in. That's
unlikely to match our index, meaning we'd say "dirty" even when the real
working tree is clean.

We can fix that by calling setup_work_tree() once we know that the user
has asked for --dirty.

The --broken option also needs a working tree. But because its
implementation calls git-diff-index we don‘t have to setup the working
tree in the git-describe process.

Signed-off-by: default avatarSebastian Staudt <koraktor@gmail.com>
Helped-by: default avatarJeff King <peff@peff.net>
Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
parent 268fbcd1
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -617,6 +617,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_preload(NULL);
refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED,
NULL, NULL, NULL);
Loading
Loading
Loading
Loading
@@ -146,14 +146,38 @@ check_describe A-* HEAD
 
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
'
Loading
Loading
@@ -304,8 +328,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
'
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment