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 '/'
This commit is contained in:
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)
|
||||
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);
|
||||
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_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' '
|
||||
git reset --hard &&
|
||||
git submodule update &&
|
||||
|
Loading…
Reference in New Issue
Block a user