summaryrefslogtreecommitdiff
path: root/Documentation/doc-diff
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2018-08-30 04:12:03 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2018-08-30 10:09:05 -0700
commit27064fb7fb82d607f3e2ccc5e9c93e0161bae134 (patch)
treebb626495f90165af1231a04c907ab12c72297617 /Documentation/doc-diff
parentSubmittingPatches: mention doc-diff (diff)
downloadtgif-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-xDocumentation/doc-diff8
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