]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mv: check overwrite for in-to-out move
authorShaoxuan Yuan <shaoxuan.yuan02@gmail.com>
Tue, 9 Aug 2022 12:09:10 +0000 (20:09 +0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 10 Aug 2022 20:57:50 +0000 (13:57 -0700)
Add checking logic for overwriting when moving from in-cone to
out-of-cone. It is the index version of the original overwrite logic.

Helped-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Shaoxuan Yuan <shaoxuan.yuan02@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/mv.c
t/t7002-mv-sparse-checkout.sh

index d80adf8de5305fee825afd06c027937f28e7ced7..4b67bd096a95d592ea07362f638de0fe1eef41ad 100644 (file)
@@ -376,6 +376,18 @@ dir_check:
                        goto act_on_entry;
                }
 
+               if (ignore_sparse &&
+                   (dst_mode & (SKIP_WORKTREE_DIR | SPARSE)) &&
+                   index_entry_exists(&the_index, dst, strlen(dst))) {
+                       bad = _("destination exists in the index");
+                       if (force) {
+                               if (verbose)
+                                       warning(_("overwriting '%s'"), dst);
+                               bad = NULL;
+                       } else {
+                               goto act_on_entry;
+                       }
+               }
                /*
                 * We check if the paths are in the sparse-checkout
                 * definition as a very final check, since that
index 5e5eb70e7a9c4f1456d9181823973ee68226bb5c..26582ae4e5fb5ebb6aebb6239ecd3ab711b119ed 100755 (executable)
@@ -323,7 +323,7 @@ test_expect_success 'move clean path from in-cone to out-of-cone' '
        grep "S folder1/d" actual
 '
 
-test_expect_failure 'move clean path from in-cone to out-of-cone overwrite' '
+test_expect_success 'move clean path from in-cone to out-of-cone overwrite' '
        test_when_finished "cleanup_sparse_checkout" &&
        setup_sparse_checkout &&
        echo "sub/file1 overwrite" >sub/file1 &&
@@ -359,7 +359,7 @@ test_expect_failure 'move clean path from in-cone to out-of-cone overwrite' '
 # This test is testing the same behavior as the
 # "move clean path from in-cone to out-of-cone overwrite" above.
 # The only difference is the <destination> changes from "folder1" to "folder1/file1"
-test_expect_failure 'move clean path from in-cone to out-of-cone file overwrite' '
+test_expect_success 'move clean path from in-cone to out-of-cone file overwrite' '
        test_when_finished "cleanup_sparse_checkout" &&
        setup_sparse_checkout &&
        echo "sub/file1 overwrite" >sub/file1 &&
@@ -392,7 +392,7 @@ test_expect_failure 'move clean path from in-cone to out-of-cone file overwrite'
        test_cmp expect actual
 '
 
-test_expect_failure 'move directory with one of the files overwrite' '
+test_expect_success 'move directory with one of the files overwrite' '
        test_when_finished "cleanup_sparse_checkout" &&
        mkdir -p folder1/dir &&
        touch folder1/dir/file1 &&