diff-tree -r -t: include added/removed directories in the output

We used to include only the modified and typechanged directories
in the ouptut, but for consistency's sake, we should also include
added and removed ones as well.

This makes the output more consistent, but it may break existing scripts
that expect to see the current output which has long been the established
behaviour.

Signed-off-by: Nick Edelen <sirnot@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nick Edelen 2009-06-13 17:06:09 -07:00 коммит произвёл Junio C Hamano
Родитель c97038d1cf
Коммит df533f34a3
2 изменённых файлов: 59 добавлений и 0 удалений

53
t/t4037-diff-r-t-dirs.sh Executable file
Просмотреть файл

@ -0,0 +1,53 @@
#!/bin/sh
test_description='diff -r -t shows directory additions and deletions'
. ./test-lib.sh
test_expect_success setup '
mkdir dc dr dt &&
>dc/1 &&
>dr/2 &&
>dt/3 &&
>fc &&
>fr &&
>ft &&
git add . &&
test_tick &&
git commit -m initial &&
rm -fr dt dr ft fr &&
mkdir da ft &&
for p in dc/1 da/4 dt ft/5 fc
do
echo hello >$p || exit
done &&
git add -u &&
git add . &&
test_tick &&
git commit -m second
'
cat >expect <<\EOF
A da
A da/4
M dc
M dc/1
D dr
D dr/2
A dt
D dt
D dt/3
M fc
D fr
D ft
A ft
A ft/5
EOF
test_expect_success verify '
git diff-tree -r -t --name-status HEAD^ HEAD >actual &&
test_cmp expect actual
'
test_done

Просмотреть файл

@ -233,6 +233,12 @@ static void show_entry(struct diff_options *opt, const char *prefix, struct tree
if (!tree || type != OBJ_TREE)
die("corrupt tree sha %s", sha1_to_hex(sha1));
if (DIFF_OPT_TST(opt, TREE_IN_RECURSIVE)) {
newbase[baselen + pathlen] = 0;
opt->add_remove(opt, *prefix, mode, sha1, newbase);
newbase[baselen + pathlen] = '/';
}
init_tree_desc(&inner, tree, size);
show_tree(opt, prefix, &inner, newbase, baselen + 1 + pathlen);