[PATCH] git submodule: Remove now obsolete tests before cloning a repo
From: Jens Lehmann <hidden>
Date: 2016-06-15 22:50:10
Subsystem:
the rest · Maintainer:
Linus Torvalds
Since 55892d23 "git clone" itself checks that the destination path is not a file but an empty directory if it exists, so there is no need anymore for module_clone() to check that too. Two tests have been added to test the behavior of "git submodule add" when path is a file or a directory (A subshell had to be added to the former last test to stay in the right directory). Signed-off-by: Jens Lehmann <redacted> --- Am 03.12.2010 08:10, schrieb Jonathan Nieder:
Jens Lehmann wrote:quoted
Am 01.12.2010 19:50, schrieb Jonathan Nieder:quoted
quoted
Jens, any idea why git submodule is not using "clone --branch" directly?Nope, these lines date back to the time before I got involved in the submodule business ... Seems like this "git checkout" was added in March 2008 by Mark Levedahl (CCed), maybe he can shed some light on that.Ah, so the problem is that "clone --branch" did not exist. Sorry for the noise. Another question can be also be easily answered by history examination: the series of checks in module_clone are because 70c7ac22d:git-clone.sh did not have checks of its own for the target directory. So there is some simplification within grasp.
Maybe something like this? git-submodule.sh | 14 -------------- t/t7400-submodule-basic.sh | 28 +++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 33bc41f..8085876 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh@@ -93,20 +93,6 @@ module_clone() url=$2 reference="$3" - # If there already is a directory at the submodule path, - # expect it to be empty (since that is the default checkout - # action) and try to remove it. - # Note: if $path is a symlink to a directory the test will - # succeed but the rmdir will fail. We might want to fix this. - if test -d "$path" - then - rmdir "$path" 2>/dev/null || - die "Directory '$path' exists, but is neither empty nor a git repository" - fi - - test -e "$path" && - die "A file already exist at path '$path'" - if test -n "$reference" then git-clone "$reference" -n "$url" "$path"
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 782b0a3..2c49db9 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh@@ -421,11 +421,29 @@ test_expect_success 'add submodules without specifying an explicit path' ' git commit -m "repo commit 1" ) && git clone --bare repo/ bare.git && - cd addtest && - git submodule add "$submodurl/repo" && - git config -f .gitmodules submodule.repo.path repo && - git submodule add "$submodurl/bare.git" && - git config -f .gitmodules submodule.bare.path bare + ( + cd addtest && + git submodule add "$submodurl/repo" && + git config -f .gitmodules submodule.repo.path repo && + git submodule add "$submodurl/bare.git" && + git config -f .gitmodules submodule.bare.path bare + ) +' + +test_expect_success 'add should fail when path is used by a file' ' + ( + cd addtest && + touch file && + test_must_fail git submodule add "$submodurl/repo" file + ) +' + +test_expect_success 'add should fail when path is used by an existing directory' ' + ( + cd addtest && + mkdir empty-dir && + test_must_fail git submodule add "$submodurl/repo" empty-dir + ) ' test_done
--
1.7.3.2.657.g92628.dirty