Skip to content

Commit 2ed5c8e

Browse files
koraktorgitster
authored andcommitted
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: Sebastian Staudt <[email protected]> Helped-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 268fbcd commit 2ed5c8e

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

builtin/describe.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
617617
struct argv_array args = ARGV_ARRAY_INIT;
618618
int fd, result;
619619

620+
setup_work_tree();
620621
read_cache_preload(NULL);
621622
refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED,
622623
NULL, NULL, NULL);

t/t6120-describe.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,38 @@ check_describe A-* HEAD
146146

147147
check_describe "A-*[0-9a-f]" --dirty
148148

149+
test_expect_success 'describe --dirty with --work-tree' '
150+
(
151+
cd "$TEST_DIRECTORY" &&
152+
git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
153+
) &&
154+
grep "^A-[1-9][0-9]\?-g[0-9a-f]\+$" out
155+
'
156+
149157
test_expect_success 'set-up dirty work tree' '
150158
echo >>file
151159
'
152160

153161
check_describe "A-*[0-9a-f]-dirty" --dirty
154162

163+
test_expect_success 'describe --dirty with --work-tree (dirty)' '
164+
(
165+
cd "$TEST_DIRECTORY" &&
166+
git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
167+
) &&
168+
grep "^A-[1-9][0-9]\?-g[0-9a-f]\+-dirty$" out
169+
'
170+
155171
check_describe "A-*[0-9a-f].mod" --dirty=.mod
156172

173+
test_expect_success 'describe --dirty=.mod with --work-tree (dirty)' '
174+
(
175+
cd "$TEST_DIRECTORY" &&
176+
git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty=.mod >"$TRASH_DIRECTORY/out"
177+
) &&
178+
grep "^A-[1-9][0-9]\?-g[0-9a-f]\+.mod$" out
179+
'
180+
157181
test_expect_success 'describe --dirty HEAD' '
158182
test_must_fail git describe --dirty HEAD
159183
'
@@ -304,8 +328,17 @@ test_expect_success 'describe chokes on severely broken submodules' '
304328
mv .git/modules/sub1/ .git/modules/sub_moved &&
305329
test_must_fail git describe --dirty
306330
'
331+
307332
test_expect_success 'describe ignoring a broken submodule' '
308333
git describe --broken >out &&
334+
grep broken out
335+
'
336+
337+
test_expect_success 'describe with --work-tree ignoring a broken submodule' '
338+
(
339+
cd "$TEST_DIRECTORY" &&
340+
git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --broken >"$TRASH_DIRECTORY/out"
341+
) &&
309342
test_when_finished "mv .git/modules/sub_moved .git/modules/sub1" &&
310343
grep broken out
311344
'

0 commit comments

Comments
 (0)