Nguyễn Thái Ngọc Duy  <pclo...@gmail.com> writes:

> Intent-to-add entries are basically "I may want to commit these files
> later, but for now they are untracked". As such, when the user does "git
> reset --hard <tree>", which removes i-t-a entries from the index, i-t-a
> entries in worktree should be kept as untracked.

Hmm, I can see that the control flow of "reset --hard" for an i-t-a
path does pass through this function, but it is not very obvious
to see how this will not negatively affect other uses of the
unpack-trees machinery (e.g. "checkout" and "merge", especially when
such a path needs to turn into a directory by getting removed).

>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
> ---
>  Lost two files today, luckily I had a backup.
>
>  t/t2203-add-intent.sh | 15 +++++++++++++++
>  unpack-trees.c        |  2 +-
>  2 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/t/t2203-add-intent.sh b/t/t2203-add-intent.sh
> index 2a4a749..63086bf 100755
> --- a/t/t2203-add-intent.sh
> +++ b/t/t2203-add-intent.sh
> @@ -82,5 +82,20 @@ test_expect_success 'cache-tree invalidates i-t-a paths' '
>       test_cmp expect actual
>  '
>  
> +test_expect_success 'reset --hard leaves on-disk ita entries alone' '
> +     git init keep-ita &&
> +     (
> +     cd keep-ita &&
> +     echo abc >abc &&
> +     echo def >def &&
> +     git add abc &&
> +     git commit -m abc &&
> +     git add -N def &&
> +     git reset --hard HEAD &&
> +     echo def >expected &&
> +     test_cmp expected def
> +     )
> +'
> +
>  test_done
>  
> diff --git a/unpack-trees.c b/unpack-trees.c
> index 9f55cc2..1a2271b 100644
> --- a/unpack-trees.c
> +++ b/unpack-trees.c
> @@ -104,7 +104,7 @@ static int do_add_entry(struct unpack_trees_options *o, 
> struct cache_entry *ce,
>  {
>       clear |= CE_HASHED;
>  
> -     if (set & CE_REMOVE)
> +     if ((set & CE_REMOVE) && !ce_intent_to_add(ce))
>               set |= CE_WT_REMOVE;
>  
>       ce->ce_flags = (ce->ce_flags & ~clear) | set;
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to