Skip to content

Commit

Permalink
Make git-reset delete empty directories
Browse files Browse the repository at this point in the history
When git-reset --hard is used and a subdirectory becomes
empty (as it contains no tracked files in the target tree)
the empty subdirectory should be removed.  This matches
the behavior of git-checkout-index and git-read-tree -m
which would not have created the subdirectory or would
have deleted it when updating the working directory.

Subdirectories which are not empty will be left behind.
This may happen if the subdirectory still contains object
files from the user's build process (for example).

[jc: simplified the logic a bit, while keeping the test script.]
  • Loading branch information
Shawn Pearce authored and Junio C Hamano committed Feb 18, 2006
1 parent 735d80b commit 772d8a3
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
3 changes: 3 additions & 0 deletions git-reset.sh
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ case "$reset_type" in
# it is ok if this fails -- it may already
# have been culled by checkout-index.
unlink $_;
while (s|/[^/]*$||) {
rmdir($_) or last;
}
}
}
' $tmp-exists
Expand Down
63 changes: 63 additions & 0 deletions t/t7101-reset.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/bin/sh
#
# Copyright (c) 2006 Shawn Pearce
#

test_description='git-reset should cull empty subdirs'
. ./test-lib.sh

test_expect_success \
'creating initial files' \
'mkdir path0 &&
cp ../../COPYING path0/COPYING &&
git-add path0/COPYING &&
git-commit -m add -a'

test_expect_success \
'creating second files' \
'mkdir path1 &&
mkdir path1/path2 &&
cp ../../COPYING path1/path2/COPYING &&
cp ../../COPYING path1/COPYING &&
cp ../../COPYING COPYING &&
cp ../../COPYING path0/COPYING-TOO &&
git-add path1/path2/COPYING &&
git-add path1/COPYING &&
git-add COPYING &&
git-add path0/COPYING-TOO &&
git-commit -m change -a'

test_expect_success \
'resetting tree HEAD^' \
'git-reset --hard HEAD^'

test_expect_success \
'checking initial files exist after rewind' \
'test -d path0 &&
test -f path0/COPYING'

test_expect_failure \
'checking lack of path1/path2/COPYING' \
'test -f path1/path2/COPYING'

test_expect_failure \
'checking lack of path1/COPYING' \
'test -f path1/COPYING'

test_expect_failure \
'checking lack of COPYING' \
'test -f COPYING'

test_expect_failure \
'checking checking lack of path1/COPYING-TOO' \
'test -f path0/COPYING-TOO'

test_expect_failure \
'checking lack of path1/path2' \
'test -d path1/path2'

test_expect_failure \
'checking lack of path1' \
'test -d path1'

test_done

0 comments on commit 772d8a3

Please sign in to comment.