Browse Source

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>
maint
Jeff King 6 years ago committed by Junio C Hamano
parent
commit
27064fb7fb
  1. 8
      Documentation/doc-diff

8
Documentation/doc-diff

@ -82,7 +82,7 @@ generate_render_makefile () { @@ -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 () { @@ -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 () { @@ -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

Loading…
Cancel
Save