Subject: Re: [PATCH v4 15/17] sparse-checkout: update working directory in-process

From: SZEDER Gábor <[email-masked]>
Date: Fri, 18 Oct 2019 22:40:32 +0200

On Fri, Oct 18, 2019 at 10:24:21PM +0200, SZEDER Gábor wrote:
> On Tue, Oct 15, 2019 at 01:56:02PM +0000, Derrick Stolee via GitGitGadget wrote:
> > From: Derrick Stolee <[email-masked]>
> > 
> > The sparse-checkout builtin used 'git read-tree -mu HEAD' to update the
> > skip-worktree bits in the index and to update the working directory.
> > This extra process is overly complex, and prone to failure. It also
> > requires that we write our changes to the sparse-checkout file before
> > trying to update the index.
> > 
> > Remove this extra process call by creating a direct call to
> > unpack_trees() in the same way 'git read-tree -mu HEAD' does. In
> > addition, provide an in-memory list of patterns so we can avoid
> > reading from the sparse-checkout file. This allows us to test a
> > proposed change to the file before writing to it.
> 
> Starting with this patch there is an issue with locking the index:
> 
>   $ git init
>   Initialized empty Git repository in /home/szeder/src/git/tmp/SC/.git/
>   $ >file

  $ git add file

Forgot to copy that command...

>   $ git commit -m initial
>   [master (root-commit) 5d80b9c] initial
>    1 file changed, 0 insertions(+), 0 deletions(-)
>    create mode 100644 file
>   $ ls .git/index.lock
>   ls: cannot access '.git/index.lock': No such file or directory
>   $ git sparse-checkout set nope
>   warning: core.sparseCheckout is disabled, so changes to the sparse-checkout file will have no effect
>   warning: run 'git sparse-checkout init' to enable the sparse-checkout feature
>   error: Sparse checkout leaves no entry on working directory
>   fatal: Unable to create '/home/szeder/src/git/tmp/SC/.git/index.lock':
>   File exists.
> 
>   Another git process seems to be running in this repository, e.g.
>   an editor opened by 'git commit'. Please make sure all processes
>   are terminated then try again. If it still fails, a git process
>   may have crashed in this repository earlier:
>   remove the file manually to continue.
>   $ ls .git/index.lock
>   ls: cannot access '.git/index.lock': No such file or directory

I would add that building the previous patch and running the same
sequence of commands works, in the sense that 'git sparse-checkout
set' writes the non-existing filename to the 'sparse-checkout' file
and it prints the same two warnings, and doesn't (seem to) attempt to
update the working tree and the index.