Skip to content

Commit 276d709

Browse files
committed
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 '/'
2 parents 36ea7ce + 53e4c5d commit 276d709

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

builtin/rm.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,21 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
234234
if (read_cache() < 0)
235235
die(_("index file corrupt"));
236236

237+
/*
238+
* Drop trailing directory separators from directories so we'll find
239+
* submodules in the index.
240+
*/
241+
for (i = 0; i < argc; i++) {
242+
size_t pathlen = strlen(argv[i]);
243+
if (pathlen && is_dir_sep(argv[i][pathlen - 1]) &&
244+
is_directory(argv[i])) {
245+
do {
246+
pathlen--;
247+
} while (pathlen && is_dir_sep(argv[i][pathlen - 1]));
248+
argv[i] = xmemdupz(argv[i], pathlen);
249+
}
250+
}
251+
237252
pathspec = get_pathspec(prefix, argv);
238253
refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL);
239254

t/t3600-rm.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,23 @@ test_expect_success 'rm removes work tree of unmodified submodules' '
302302
test_cmp expect actual
303303
'
304304

305+
test_expect_success 'rm removes a submodule with a trailing /' '
306+
git reset --hard &&
307+
git submodule update &&
308+
git rm submod/ &&
309+
test ! -d submod &&
310+
git status -s -uno --ignore-submodules=none > actual &&
311+
test_cmp expect actual
312+
'
313+
314+
test_expect_success 'rm fails when given a file with a trailing /' '
315+
test_must_fail git rm empty/
316+
'
317+
318+
test_expect_success 'rm succeeds when given a directory with a trailing /' '
319+
git rm -r frotz/
320+
'
321+
305322
test_expect_success 'rm of a populated submodule with different HEAD fails unless forced' '
306323
git reset --hard &&
307324
git submodule update &&

0 commit comments

Comments
 (0)