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
commit
276d709305
15
builtin/rm.c
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);
|
||||||
|
|
||||||
|
|
|
@ -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…
Reference in New Issue