diff options
author | Matthieu Moy <Matthieu.Moy@imag.fr> | 2009-02-04 10:32:08 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-04 11:07:42 -0800 |
commit | 5aed3c6ab834367292bd7a9b0894177a07afd910 (patch) | |
tree | 4be58af9c9128aa8f1ff36e07f55857559c1456b | |
parent | c8ba6b1b199bf00f227e8fdad4adb5a2147c8160 (diff) | |
download | git-5aed3c6ab834367292bd7a9b0894177a07afd910.tar.gz |
builtin-mv.c: check for unversionned files before looking at the destination.
The previous code was failing in the case where one moves an
unversionned file to an existing destination, with mv -f: the
"existing destination" was checked first, and the error was cancelled
by the force flag.
We now check the unrecoverable error first, which fixes the bug.
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin-mv.c | 8 | ||||
-rwxr-xr-x | t/t7001-mv.sh | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/builtin-mv.c b/builtin-mv.c index bce9959293..01270fefdf 100644 --- a/builtin-mv.c +++ b/builtin-mv.c @@ -162,7 +162,9 @@ int cmd_mv(int argc, const char **argv, const char *prefix) } argc += last - first; } - } else if (lstat(dst, &st) == 0) { + } else if (cache_name_pos(src, length) < 0) + bad = "not under version control"; + else if (lstat(dst, &st) == 0) { bad = "destination exists"; if (force) { /* @@ -177,9 +179,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix) } else bad = "Cannot overwrite"; } - } else if (cache_name_pos(src, length) < 0) - bad = "not under version control"; - else if (string_list_has_string(&src_for_dst, dst)) + } else if (string_list_has_string(&src_for_dst, dst)) bad = "multiple sources for the same target"; else string_list_insert(dst, &src_for_dst); diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh index ef7e56ed63..d2ec550af6 100755 --- a/t/t7001-mv.sh +++ b/t/t7001-mv.sh @@ -58,7 +58,7 @@ test_expect_success \ test ! -f path0/untracked1 && test ! -f path0/untracked2' -test_expect_failure \ +test_expect_success \ 'checking -f on untracked file with existing target' \ 'touch path0/untracked1 && git mv -f untracked1 path0 |