Merge branch 'as/describe-broken-refresh-index-fix'

"git describe --dirty --broken" forgot to refresh the index before
seeing if there is any chang, ("git describe --dirty" correctly did
so), which has been corrected.

* as/describe-broken-refresh-index-fix:
  describe: refresh the index when 'broken' flag is used
maint
Junio C Hamano 2024-07-15 10:11:40 -07:00
commit b227482ea0
2 changed files with 48 additions and 0 deletions

View File

@ -53,6 +53,10 @@ static const char *diff_index_args[] = {
"diff-index", "--quiet", "HEAD", "--", NULL "diff-index", "--quiet", "HEAD", "--", NULL
}; };


static const char *update_index_args[] = {
"update-index", "--unmerged", "-q", "--refresh", NULL
};

struct commit_name { struct commit_name {
struct hashmap_entry entry; struct hashmap_entry entry;
struct object_id peeled; struct object_id peeled;
@ -645,6 +649,14 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
if (argc == 0) { if (argc == 0) {
if (broken) { if (broken) {
struct child_process cp = CHILD_PROCESS_INIT; struct child_process cp = CHILD_PROCESS_INIT;

strvec_pushv(&cp.args, update_index_args);
cp.git_cmd = 1;
cp.no_stdin = 1;
cp.no_stdout = 1;
run_command(&cp);

child_process_init(&cp);
strvec_pushv(&cp.args, diff_index_args); strvec_pushv(&cp.args, diff_index_args);
cp.git_cmd = 1; cp.git_cmd = 1;
cp.no_stdin = 1; cp.no_stdin = 1;

View File

@ -671,4 +671,40 @@ test_expect_success 'setup misleading taggerdates' '


check_describe newer-tag-older-commit~1 --contains unique-file~2 check_describe newer-tag-older-commit~1 --contains unique-file~2


test_expect_success 'describe --dirty with a file with changed stat' '
test_when_finished "rm -fr stat-dirty" &&
git init stat-dirty &&
(
cd stat-dirty &&

echo A >file &&
git add file &&
git commit -m A &&
git tag A -a -m A &&
echo "A" >expect &&

test-tool chmtime -10 file &&
git describe --dirty >actual &&
test_cmp expect actual
)
'

test_expect_success 'describe --broken --dirty with a file with changed stat' '
test_when_finished "rm -fr stat-dirty" &&
git init stat-dirty &&
(
cd stat-dirty &&

echo A >file &&
git add file &&
git commit -m A &&
git tag A -a -m A &&
echo "A" >expect &&

test-tool chmtime -10 file &&
git describe --dirty --broken >actual &&
test_cmp expect actual
)
'

test_done test_done