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 committed by Junio C Hamano
parent c97038d1cf
commit df533f34a3
2 changed files with 59 additions and 0 deletions

53
t/t4037-diff-r-t-dirs.sh Executable file
View 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

View File

@ -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);