Browse Source

Merge branch 'jl/submodule-rm'

Finishing touches to "git rm $submodule" that removes the working
tree of a submodule.

* jl/submodule-rm:
  Teach rm to remove submodules when given with a trailing '/'
maint
Junio C Hamano 12 years ago
parent
commit
276d709305
  1. 15
      builtin/rm.c
  2. 17
      t/t3600-rm.sh

15
builtin/rm.c

@ -234,6 +234,21 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
if (read_cache() < 0) if (read_cache() < 0)
die(_("index file corrupt")); die(_("index file corrupt"));


/*
* Drop trailing directory separators from directories so we'll find
* submodules in the index.
*/
for (i = 0; i < argc; i++) {
size_t pathlen = strlen(argv[i]);
if (pathlen && is_dir_sep(argv[i][pathlen - 1]) &&
is_directory(argv[i])) {
do {
pathlen--;
} while (pathlen && is_dir_sep(argv[i][pathlen - 1]));
argv[i] = xmemdupz(argv[i], pathlen);
}
}

pathspec = get_pathspec(prefix, argv); pathspec = get_pathspec(prefix, argv);
refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL); refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL);



17
t/t3600-rm.sh

@ -302,6 +302,23 @@ test_expect_success 'rm removes work tree of unmodified submodules' '
test_cmp expect actual test_cmp expect actual
' '


test_expect_success 'rm removes a submodule with a trailing /' '
git reset --hard &&
git submodule update &&
git rm submod/ &&
test ! -d submod &&
git status -s -uno --ignore-submodules=none > actual &&
test_cmp expect actual
'

test_expect_success 'rm fails when given a file with a trailing /' '
test_must_fail git rm empty/
'

test_expect_success 'rm succeeds when given a directory with a trailing /' '
git rm -r frotz/
'

test_expect_success 'rm of a populated submodule with different HEAD fails unless forced' ' test_expect_success 'rm of a populated submodule with different HEAD fails unless forced' '
git reset --hard && git reset --hard &&
git submodule update && git submodule update &&

Loading…
Cancel
Save