git/list[1] front-page[2] threads[3] people[4] search[5] about
 

RE: [PATCH 1/1] reset: fix reset when using the sparse-checkout feature.

From
KWKevin Willford <kewillf@microsoft.com>
Date
Sep 8, 2017, 20:08 UTC
Message-ID
<SN1PR21MB0014A3A5B8DFE3D353135184B7950@SN1PR21MB0014.namprd21.prod.outlook.com>
In-Reply-To
<xmqq4lsdypym.fsf@gitster.mtv.corp.google.com>
From: Junio C Hamano [mailto:gitster@pobox.com]
Sent: Friday, September 8, 2017 1:02 PM
Show 39 quoted lines
> Kevin Willford <kewillf@microsoft.com> writes:
> 
> > diff --git a/builtin/reset.c b/builtin/reset.c
> > index d72c7d1c96..1b8bb45989 100644
> > --- a/builtin/reset.c
> > +++ b/builtin/reset.c
> > @@ -24,6 +24,7 @@
> >  #include "cache-tree.h"
> >  #include "submodule.h"
> >  #include "submodule-config.h"
> > +#include "dir.h"
> >
> >  static const char * const git_reset_usage[] = {
> >  	N_("git reset [--mixed | --soft | --hard | --merge | --keep] [-q]
> [<commit>]"),
> > @@ -124,8 +125,32 @@ static void update_index_from_diff(struct
> diff_queue_struct *q,
> >
> >  	for (i = 0; i < q->nr; i++) {
> >  		struct diff_filespec *one = q->queue[i]->one;
> > +		struct diff_filespec *two = q->queue[i]->two;
> > +		int pos;
> >  		int is_missing = !(one->mode && !is_null_oid(&one->oid));
> > +		int was_missing = !two->mode && is_null_oid(&two->oid);
> >  		struct cache_entry *ce;
> > +		struct cache_entry *ceBefore;
> > +		struct checkout state = CHECKOUT_INIT;
> 
> The five new variables are only used in the new block, so it
> probably is better to limit their scope to the "we do something
> unusual when sparse checkout is in effect" block as well.  The scope
> for the latter two can further be narrowed down to "we do need to
> force a checkout of this entry" block.
> 
> We prefer to name our variables with underscore (e.g. ce_before)
> over camelCase (e.g. ceBefore) unless there is a compelling reason
> (e.g. a platform specific code in compat/ layer to match platform
> convention).
> 
Will update.
Show 33 quoted lines
> > +
> > +		if (core_apply_sparse_checkout && !file_exists(two->path)) {
> > +			pos = cache_name_pos(two->path, strlen(two->path));
> > +			if ((pos >= 0 && ce_skip_worktree(active_cache[pos]))
> &&
> > +			    (is_missing || !was_missing))
> > +			{
> > +				state.force = 1;
> > +				state.refresh_cache = 1;
> > +				state.istate = &the_index;
> > +				ceBefore = make_cache_entry(two->mode,
> > +							    two->oid.hash,
> > +							    two->path, 0, 0);
> > +				if (!ceBefore)
> > +					die(_("make_cache_entry failed for path
> '%s'"),
> > +						two->path);
> > +
> > +				checkout_entry(ceBefore, &state, NULL);
> > +			}
> > +		}
> 
> Can we tell between the case where the reason why the path was not
> there in the working tree was due to the path being excluded by the
> sparse checkout and the path being removed manually by the end user?
> 
> I guess ce_skip_worktree() check is sufficient; we force checkout only
> when the path is marked to be skipped due to "sparse" thing.
> 
> Do we have to worry about the reverse case, in which file_exists(two->path)
> is true (i.e. the user created a file there manually) even though
> the path is marked to be skipped due to "sparse" setting?
> 

I don't believe so because if the user has a file there whether they modified it or not, it is what the user did and we just leave it there and a diff with what the index gets reset to will show how the file is different from what the index got reset to.

> Other than that, the patch looks quite cleanly done and well explained.
> 
> Thanks.
> 
Previous: Junio C HamanoNext: Junio C Hamano
Message 6 of 23 in “reset: fix mixed reset when using sparse-checkout”
  1. 0/1 reset: fix mixed reset when using sparse-checkoutKevin Willford, Sep 8, 2017
  2. 1/1 reset: fix reset when using the sparse-checkout feature.Kevin Willford, Sep 8, 2017
  3. Torsten BögershausenSep 8, 2017
  4. Junio C HamanoSep 8, 2017
  5. Junio C HamanoSep 8, 2017
  6. Kevin WillfordSep 8, 2017
  7. Junio C HamanoSep 8, 2017
  8. Kevin WillfordSep 8, 2017
  9. Junio C HamanoSep 9, 2017
  10. Kevin WillfordSep 9, 2017
  11. Junio C HamanoSep 11, 2017
  12. Johannes SchindelinSep 11, 2017
  13. Junio C HamanoSep 12, 2017
  14. Kevin WillfordSep 12, 2017
  15. Jacob KellerSep 12, 2017
  16. Kevin WillfordSep 12, 2017
  17. Jacob KellerSep 13, 2017
  18. Kevin WillfordSep 13, 2017
  19. Junio C HamanoSep 13, 2017
  20. Kevin WillfordSep 14, 2017
  21. Junio C HamanoSep 15, 2017
  22. Kevin WillfordSep 15, 2017
  23. Jacob KellerSep 15, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.