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

Re: [PATCH 0/9] worktree: fix bugs and broaden --force applicability

From
Jeff King <peff@peff.net>
Date
Aug 30, 2018, 07:54 UTC
Message-ID
<20180830075431.GF11944@sigill.intra.peff.net>
In-Reply-To
<20180828212026.21989-1-sunshine@sunshineco.com>
On Tue, Aug 28, 2018 at 05:20:17PM -0400, Eric Sunshine wrote:
Show 18 quoted lines
> This series started as a fix for a bug reported by Peff[1] in which the
> "database" of worktrees could be corrupted (or at least become
> internally inconsistent) by having multiple worktree entries associated
> with the same path.
> 
> Peff's particular use-case for git-worktree is Documentation/doc-diff
> which wants to re-use a worktree if it exists or create it anew if it
> doesn't. Unfortunately, this is a bit more difficult than it should be
> if the worktree directory is deleted manually (without pruning the
> worktree entry) between script invocations. To simplify this use-case
> for tools, it was suggested[2] that "git worktree add --force" could
> deal with the problem of a registered-but-missing worktree (much as a
> tool might rely upon "mkdir -p" to create or re-use an existing
> directory). This series implements that proposal, as well.
> 
> Fixing the original bug revealed another existing bug, and after several
> additional "while we're here" changes, the series ended up a bit longer
> than expected.

Thanks for working on this. I think this nicely solves the problem I was having. I had a few minor comments which I sent in reply to individual patches, but overall it looks very good. I'd be happy to see it picked up with or without any changes based on my comments.

I'd want to do this on top. :)
-- >8 --
Subject: [PATCH] doc-diff: force worktree add

We avoid re-creating our temporary worktree if it's already there. But we may run into a situation where the worktree has been deleted, but an entry still exists in $GIT_DIR/worktrees.

Older versions of git-worktree would annoyingly create a series of duplicate entries. Recent versions now detect and prevent this, allowing you to override with "-f". Since we know that the worktree in question was just our temporary workspace, it's safe for us to always pass "-f".

Signed-off-by: Jeff King <peff@peff.net>
---
 Documentation/doc-diff | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/doc-diff b/Documentation/doc-diff
index f483fe427c..19d841ddeb 100755
--- a/Documentation/doc-diff
+++ b/Documentation/doc-diff
@@ -54,7 +54,7 @@ fi
 # results that don't differ between the two trees.
 if ! test -d "$tmp/worktree"
 then
-	git worktree add --detach "$tmp/worktree" "$from" &&
+	git worktree add -f --detach "$tmp/worktree" "$from" &&
 	dots=$(echo "$tmp/worktree" | sed 's#[^/]*#..#g') &&
 	ln -s "$dots/config.mak" "$tmp/worktree/config.mak"
 fi
-- 
2.19.0.rc1.539.g3876d0831e
Previous: Eric SunshineNext: Eric Sunshine
Message 21 of 28 in “worktree: fix bugs and broaden --force applicability”
  1. 0/9 worktree: fix bugs and broaden --force applicabilityEric Sunshine, Aug 28, 2018
  2. 1/9 worktree: don't die() in library function find_worktree()Eric Sunshine, Aug 28, 2018
  3. 2/9 worktree: move delete_git_dir() earlier in file for upcoming new callersEric Sunshine, Aug 28, 2018
  4. 4/9 worktree: prepare for more checks of whether path can become worktreeEric Sunshine, Aug 28, 2018
  5. 3/9 worktree: generalize delete_git_dir() to reduce code duplicationEric Sunshine, Aug 28, 2018
  6. Jeff KingAug 30, 2018
  7. Eric SunshineAug 30, 2018
  8. 6/9 worktree: teach 'add' to respect --force for registered but missing pathEric Sunshine, Aug 28, 2018
  9. Jeff KingAug 30, 2018
  10. Eric SunshineAug 30, 2018
  11. 8/9 worktree: teach 'remove' to override lock when --force given twiceEric Sunshine, Aug 28, 2018
  12. Jeff KingAug 30, 2018
  13. Eric SunshineAug 30, 2018
  14. 9/9 worktree: delete .git/worktrees if empty after 'remove'Eric Sunshine, Aug 28, 2018
  15. 7/9 worktree: teach 'move' to override lock when --force given twiceEric Sunshine, Aug 28, 2018
  16. Jeff KingAug 30, 2018
  17. Eric SunshineAug 30, 2018
  18. 5/9 worktree: disallow adding same path multiple timesEric Sunshine, Aug 28, 2018
  19. Jeff KingAug 30, 2018
  20. Eric SunshineAug 30, 2018
  21. Jeff KingAug 30, 2018
  22. Eric SunshineAug 30, 2018
  23. Eric SunshineAug 30, 2018
  24. Jeff KingAug 30, 2018
  25. Junio C HamanoAug 30, 2018
  26. Ramsay JonesAug 30, 2018
  27. Jeff KingAug 31, 2018
  28. Ramsay JonesAug 31, 2018

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.