Merge branch 'ne/maint-1.6.0-diff-tree-t-r-show-directory'

* ne/maint-1.6.0-diff-tree-t-r-show-directory:
  diff-tree -r -t: include added/removed directories in the output
This commit is contained in:
Junio C Hamano 2009-07-01 19:40:47 -07:00
commit 4197195bee
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

@ -239,6 +239,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);