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

[PATCH] doc-diff: always use oids inside worktree

From
Jeff King <peff@peff.net>
Date
Aug 30, 2018, 08:12 UTC
Message-ID
<20180830081202.GA10224@sigill.intra.peff.net>

The doc-diff script immediately resolves its two endpoints to actual object ids, so that we can reuse cached results even if they appear under a different name. But we still use the original name the user fed us when running "git checkout" in our temporary worktree. This can lead to confusing results:

  - the namespace inside the worktree is different than the
    one outside. In particular, "./doc-diff origin HEAD"
    will resolve HEAD inside the worktree, whose detached
    HEAD will be pointing at origin! As a result, such a
    diff would always be empty.
  - worse, we will store this result under the oid we got by
    resolving HEAD in the main worktree, thus polluting our
    cache
  - we didn't pass --detach, which meant that using a branch
    name would cause us to actually check out that branch,
    making it unavailable to other worktrees.

We can solve this by feeding the already-resolved object id to git-checkout. That naturally forces a detached HEAD, but just to make clear our expectation, let's explicitly pass --detach.

Signed-off-by: Jeff King <peff@peff.net>
---
Another fixup for jk/diff-rendered-docs, noticed when trying it out on
Eric's worktree series (which, btw, rendered as expected once I fixed
this bug ;) ).
 Documentation/doc-diff | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Documentation/doc-diff b/Documentation/doc-diff
index 6e285e648c..c430fe7c99 100755
--- a/Documentation/doc-diff
+++ b/Documentation/doc-diff
@@ -82,7 +82,7 @@ generate_render_makefile () {
 	done
 }
 
-# render_tree <dirname> <committish>
+# render_tree <committish_oid>
 render_tree () {
 	# Skip install-man entirely if we already have an installed directory.
 	# We can't rely on make here, since "install-man" unconditionally
@@ -92,7 +92,7 @@ render_tree () {
 	# through.
 	if ! test -d "$tmp/installed/$1"
 	then
-		git -C "$tmp/worktree" checkout "$2" &&
+		git -C "$tmp/worktree" checkout --detach "$1" &&
 		make -j$parallel -C "$tmp/worktree" \
 			GIT_VERSION=omitted \
 			SOURCE_DATE_EPOCH=0 \
@@ -112,6 +112,6 @@ render_tree () {
 	fi
 }
 
-render_tree $from_oid "$from" &&
-render_tree $to_oid "$to" &&
+render_tree $from_oid &&
+render_tree $to_oid &&
 git -C $tmp/rendered diff --no-index "$@" $from_oid $to_oid
-- 
2.19.0.rc1.9.gf8a776330b
Next: Eric Sunshine
Message 1 of 25 in “doc-diff: always use oids inside worktree”
  1. doc-diff: always use oids inside worktreeJeff King, Aug 30, 2018
  2. Eric SunshineAug 30, 2018
  3. doc/Makefile: remove tmp-doc-diff on "make clean"Jeff King, Aug 30, 2018
  4. Eric SunshineAug 30, 2018
  5. Eric SunshineAug 30, 2018
  6. Jeff KingAug 30, 2018
  7. 0/3 doc-diff: add "clean" mode & fix portability problemEric Sunshine, Aug 31, 2018
  8. 1/3 doc-diff: fix non-portable 'man' invocationEric Sunshine, Aug 31, 2018
  9. Jeff KingAug 31, 2018
  10. 3/3 doc/Makefile: drop doc-diff worktree and temporary files on "make clean"Eric Sunshine, Aug 31, 2018
  11. Jeff KingAug 31, 2018
  12. Eric SunshineAug 31, 2018
  13. Jonathan NiederSep 17, 2018
  14. Junio C HamanoSep 17, 2018
  15. Jonathan NiederSep 17, 2018
  16. Junio C HamanoSep 17, 2018
  17. Jonathan NiederSep 17, 2018
  18. Jeff KingSep 18, 2018
  19. Eric SunshineSep 17, 2018
  20. Eric SunshineSep 17, 2018
  21. 2/3 doc-diff: add --clean mode to remove temporary working gunkEric Sunshine, Aug 31, 2018
  22. Jeff KingAug 31, 2018
  23. Eric SunshineAug 31, 2018
  24. Junio C HamanoAug 31, 2018
  25. Jeff KingAug 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.