Re: [PATCH v2 9/9] mv: check overwrite for in-to-out move
- From
Victoria Dye <vdye@github.com>
- Date
- Aug 8, 2022, 23:53 UTC
- Message-ID
- <8b5801a3-fa3a-acf4-0c34-a753ab7770ac@github.com>
- In-Reply-To
- <20220805030528.1535376-10-shaoxuan.yuan02@gmail.com>
Shaoxuan Yuan wrote:
Show 19 quoted lines
> 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> > --- > builtin/mv.c | 12 ++++++++++++ > t/t7002-mv-sparse-checkout.sh | 2 +- > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/builtin/mv.c b/builtin/mv.c > index 765a1e8eb5..70996d582f 100644 > --- a/builtin/mv.c > +++ b/builtin/mv.c > @@ -367,6 +367,18 @@ int cmd_mv(int argc, const char **argv, const char *prefix) > goto act_on_entry; > } > > + if (ignore_sparse &&
If '--sparse' is specified...
> + (dst_mode & SKIP_WORKTREE_DIR) &&
...and the destination's parent directory is outside the sparse cone...
> + index_entry_exists(&the_index, dst, strlen(dst))) {...and the destination file exists in the index, then we're going to be overwriting an existing index entry.
Show 9 quoted lines
> + bad = _("destination exists in the index");
> + if (force) {
> + if (verbose)
> + warning(_("overwriting '%s'"), dst);
> + bad = NULL;
> + } else {
> + goto act_on_entry;
> + }
> + }The rest of this aligns with what's done for a normal (exists on-disk) overwrite. There's not much in the original overwrite-handling logic that can be reused here (it's checking for overwrite based on 'stat' rather than the contents of the index), so code structure-wise this makes sense as a standalone check.
Looking good!
Show 16 quoted lines
> /* > * We check if the paths are in the sparse-checkout > * definition as a very final check, since that > diff --git a/t/t7002-mv-sparse-checkout.sh b/t/t7002-mv-sparse-checkout.sh > index f0b32a2f70..50bcca583c 100755 > --- a/t/t7002-mv-sparse-checkout.sh > +++ b/t/t7002-mv-sparse-checkout.sh > @@ -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 &&