summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>2006-08-18 10:42:39 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-08-21 21:15:43 (GMT)
commitc5203bdf66531c848a2b6cd74f3c02cb18286c55 (patch)
tree2e020e22ac6714569a4b2493e724224b07a15d42
parentd78b0f3d6aa04510dd0c22c3853d3954c5f5b531 (diff)
downloadgit-c5203bdf66531c848a2b6cd74f3c02cb18286c55.zip
git-c5203bdf66531c848a2b6cd74f3c02cb18286c55.tar.gz
git-c5203bdf66531c848a2b6cd74f3c02cb18286c55.tar.bz2
git-mv: special case destination "."
Since the normalized basename of "." is "", the check for directory failed erroneously. Noticed by Fredrik Kuivinen. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--builtin-mv.c5
-rwxr-xr-xt/t7001-mv.sh4
2 files changed, 8 insertions, 1 deletions
diff --git a/builtin-mv.c b/builtin-mv.c
index c0c8764..b2ecc26 100644
--- a/builtin-mv.c
+++ b/builtin-mv.c
@@ -114,7 +114,10 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
modes = xcalloc(count, sizeof(enum update_mode));
dest_path = copy_pathspec(prefix, argv + argc - 1, 1, 0);
- if (!lstat(dest_path[0], &st) &&
+ if (dest_path[0][0] == '\0')
+ /* special case: "." was normalized to "" */
+ destination = copy_pathspec(dest_path[0], argv + i, count, 1);
+ else if (!lstat(dest_path[0], &st) &&
S_ISDIR(st.st_mode)) {
dest_path[0] = add_slash(dest_path[0]);
destination = copy_pathspec(dest_path[0], argv + i, count, 1);
diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh
index e5e0bb9..b7fcdb3 100755
--- a/t/t7001-mv.sh
+++ b/t/t7001-mv.sh
@@ -82,4 +82,8 @@ test_expect_failure \
'do not move directory over existing directory' \
'mkdir path0 && mkdir path0/path2 && git-mv path2 path0'
+test_expect_success \
+ 'move into "."' \
+ 'git-mv path1/path2/ .'
+
test_done