diff options
author | Jeff King <peff@peff.net> | 2018-08-30 04:12:03 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-08-30 10:09:05 -0700 |
commit | 27064fb7fb82d607f3e2ccc5e9c93e0161bae134 (patch) | |
tree | bb626495f90165af1231a04c907ab12c72297617 /Documentation/doc-diff | |
parent | SubmittingPatches: mention doc-diff (diff) | |
download | tgif-27064fb7fb82d607f3e2ccc5e9c93e0161bae134.tar.xz |
doc-diff: always use oids inside worktree
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'Documentation/doc-diff')
-rwxr-xr-x | Documentation/doc-diff | 8 |
1 files 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 |