Browse Source

Merge branch 'ct/mv-unmerged-path-error' into master

"git mv src dst", when src is an unmerged path, errored out
correctly but with an incorrect error message to claim that src is
not tracked, which has been clarified.

* ct/mv-unmerged-path-error:
  git-mv: improve error message for conflicted file
maint
Junio C Hamano 5 years ago
parent
commit
be2dab9c80
  1. 7
      builtin/mv.c
  2. 17
      t/t7001-mv.sh

7
builtin/mv.c

@ -132,6 +132,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix) @@ -132,6 +132,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
struct stat st;
struct string_list src_for_dst = STRING_LIST_INIT_NODUP;
struct lock_file lock_file = LOCK_INIT;
struct cache_entry *ce;

git_config(git_default_config, NULL);

@ -220,9 +221,11 @@ int cmd_mv(int argc, const char **argv, const char *prefix) @@ -220,9 +221,11 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
}
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");
else if (lstat(dst, &st) == 0 &&
} else if (ce_stage(ce)) {
bad = _("conflicted");
} else if (lstat(dst, &st) == 0 &&
(!ignore_case || strcasecmp(src, dst))) {
bad = _("destination exists");
if (force) {

17
t/t7001-mv.sh

@ -248,6 +248,23 @@ test_expect_success 'git mv should not change sha1 of moved cache entry' ' @@ -248,6 +248,23 @@ test_expect_success 'git mv should not change sha1 of moved cache entry' '

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' '

rm -fr .git &&

Loading…
Cancel
Save