Re: "add worktree" fails with "fatal: Invalid path" error
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- May 13, 2019, 09:20 UTC
- Message-ID
- <CACsJy8C++Ds4kfs_Wc8UiVQgni-ypbyJ+0bFg1m5brt+s0Tfig@mail.gmail.com>
- In-Reply-To
- <CAHAc2je-Yz4oej-sqvp+G+2Wv+eBABeJWUMm4scRwF2z_diUXw@mail.gmail.com>
On Sun, May 12, 2019 at 5:14 PM Shaheed Haque <shaheedhaque@gmail.com> wrote:
Show 7 quoted lines
> > Hi, > > I'm running git v.2.20.1 on Ubuntu from a program which follows the pattern: > > ============ > 1. create a temporary directory /tmp/tmpabc
When is this directory deleted? After step 3a?
Show 33 quoted lines
> 2. in a loop: > 2a. create a second level of temporary directory /tmp/tmpabc/tmpworktree123 > 2b. use "git worktree add" on the second level directory > 2c. do something > 3. cleanup > 3b. "git branch -D" on each basename(second level directory) > 3a. "git worktree prune" > ============ > > The loop size is of the order of 8-20. In step 2b, I often get errors > like this (from a Bash reproducer): > > ============ > $ git worktree add /tmp/tmpgtxug4y9/git_worktree.gBGqnfnU > Preparing worktree (new branch 'git_worktree.gBGqnfnU') > fatal: Invalid path '/tmp/tmp1q9ysvyl': No such file or directory > ============ > > I can see that the problematic path exists in the "gitdir" file of > what must be an earlier worktree from an older run (the branch is > gone, but the tree is still there). The path appear to relate to the > older run's first level directory: > > ============ > $ grep -r /tmp/tmp1q9ysvyl ../.git/worktrees/ > ../.git/worktrees/git_worktree.frcwtjt_/gitdir:/tmp/tmp1q9ysvyl/git_worktree.frcwtjt_/.git > $ git worktree list > ... > /tmp/tmp1q9ysvyl/git_worktree.frcwtjt_ edde3f25 (detached HEAD) > ... > $ git branch | grep frcwtjt_ > <no matches> > ============
Yeah I think I know where that "Invalid path" comes from and it should not be there (at least it should not be a fatal error). I'll need to reproduce this first. But I'm certain you've given me enough information to do so.
> NOTE: I've not yet had to try deleting the worktree, since "add > worktree" does appear to work some of the time, so I am able to limp > along.
It's probably best to stay clean and delete things after you're done. At least you should be able to avoid this problem this way until it's fixed.
Show 5 quoted lines
> > I have these questions: > > 1. There is no branch or first level directory, but "git prune" has > not deleted the worktree, is this expected?
I assume you meant "git worktree prune", not "git prune". See gc.worktreePruneExpire. Dead worktree info stays for a while until it's deleted, so that you can recover stuff if you need to.
> 2. Is there something wrong with the sequence of steps I am following?
Nope. I mean, you could try "git worktree remove" to be on the safe side. But it should work even without that. To me this looks very much like a bug.
> Thanks, Shaheed > > P.S. I have an strace of a failing worktree add if needed.
-- Duy