git-mv: improve error message for conflicted file
'git mv' has always complained about renaming a conflicted file, as it cannot handle multiple index entries for one file. However, the error message it uses has been the same as the one for an untracked file: fatal: not under version control, src=... which is patently wrong. Distinguish the two cases and add a test to make sure we produce the correct message. Signed-off-by: Chris Torek <chris.torek@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
af6b65d45e
commit
9b906af657
@ -132,6 +132,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
|
|||||||
struct stat st;
|
struct stat st;
|
||||||
struct string_list src_for_dst = STRING_LIST_INIT_NODUP;
|
struct string_list src_for_dst = STRING_LIST_INIT_NODUP;
|
||||||
struct lock_file lock_file = LOCK_INIT;
|
struct lock_file lock_file = LOCK_INIT;
|
||||||
|
struct cache_entry *ce;
|
||||||
|
|
||||||
git_config(git_default_config, NULL);
|
git_config(git_default_config, NULL);
|
||||||
|
|
||||||
@ -220,9 +221,11 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
|
|||||||
}
|
}
|
||||||
argc += last - first;
|
argc += last - first;
|
||||||
}
|
}
|
||||||
} else if (cache_name_pos(src, length) < 0)
|
} else if (!(ce = cache_file_exists(src, length, ignore_case))) {
|
||||||
bad = _("not under version control");
|
bad = _("not under version control");
|
||||||
else if (lstat(dst, &st) == 0 &&
|
} else if (ce_stage(ce)) {
|
||||||
|
bad = _("conflicted");
|
||||||
|
} else if (lstat(dst, &st) == 0 &&
|
||||||
(!ignore_case || strcasecmp(src, dst))) {
|
(!ignore_case || strcasecmp(src, dst))) {
|
||||||
bad = _("destination exists");
|
bad = _("destination exists");
|
||||||
if (force) {
|
if (force) {
|
||||||
|
@ -248,6 +248,23 @@ test_expect_success 'git mv should not change sha1 of moved cache entry' '
|
|||||||
|
|
||||||
rm -f dirty dirty2
|
rm -f dirty dirty2
|
||||||
|
|
||||||
|
# NB: This test is about the error message
|
||||||
|
# as well as the failure.
|
||||||
|
test_expect_success 'git mv error on conflicted file' '
|
||||||
|
rm -fr .git &&
|
||||||
|
git init &&
|
||||||
|
>conflict &&
|
||||||
|
test_when_finished "rm -f conflict" &&
|
||||||
|
cfhash=$(git hash-object -w conflict) &&
|
||||||
|
q_to_tab <<-EOF | git update-index --index-info &&
|
||||||
|
0 $cfhash 0Qconflict
|
||||||
|
100644 $cfhash 1Qconflict
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_must_fail git mv conflict newname 2>actual &&
|
||||||
|
test_i18ngrep "conflicted" actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'git mv should overwrite symlink to a file' '
|
test_expect_success 'git mv should overwrite symlink to a file' '
|
||||||
|
|
||||||
rm -fr .git &&
|
rm -fr .git &&
|
||||||
|
Loading…
Reference in New Issue
Block a user