git-commit-vandalism/Documentation
Jacob Keller 1a3119ed06 blame: allow --contents to work with non-HEAD commit
The --contents option can be used with git blame to blame the file as if
it had the contents from the specified file. This is akin to copying the
contents into the working tree and then running git blame. This option
has been supported since 1cfe77333f ("git-blame: no rev means start
from the working tree file.")

The --contents option always blames the file as if it was based on the
current HEAD commit. If you try to pass a revision while using
--contents, you get the following error:

  fatal: cannot use --contents with final commit object name

This is because the blame process generates a fake working tree commit
which always uses the HEAD object as its sole parent.

Enhance fake_working_tree_commit to take the object ID to use for the
parent instead of always using the HEAD object. Then, always generate a
fake commit when we have contents provided, even if we have a final
object. Remove the check to disallow --contents and a final revision.

Note that the behavior of generating a fake working commit is still
skipped when a revision is provided but --contents is not provided.
Generating such a commit in that case would combine the currently
checked out file contents with the provided revision, which breaks
normal blame behavior and produces unexpected results.

This enables use of --contents with an arbitrary revision, rather than
forcing the use of the local HEAD commit. This makes the --contents
option significantly more flexible, as it is no longer required to check
out the working tree to the desired commit before using --contents.

Reword the documentation so that its clear that --contents can be used
with <rev>.

Add tests for the --contents option to the annotate-tests.sh test
script.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2023-03-24 12:05:22 -07:00
..
config Merge branch 'gm/signature-format-doc' 2023-03-06 21:51:56 -08:00
howto new-command.txt: update reference to builtin docs 2023-02-06 14:07:33 -08:00
includes docs: add and use include template for config/* includes 2022-09-07 09:46:05 -07:00
mergetools vimdiff: add tool documentation 2022-04-03 15:09:52 -07:00
RelNotes A bit more before 2.40-rc1 2023-02-28 16:38:47 -08:00
technical Merge branch 'ds/bundle-uri-5' 2023-02-15 17:11:52 -08:00
.gitattributes
.gitignore
asciidoc.conf
asciidoctor-extensions.rb
blame-options.txt blame: allow --contents to work with non-HEAD commit 2023-03-24 12:05:22 -07:00
build-docdep.perl Documentation/build-docdep.perl: generate sorted output 2022-10-21 11:39:38 -07:00
cat-texi.perl
cmd-list.perl cmd-list.perl: fix identifying man sections 2022-09-23 10:01:07 -07:00
CodingGuidelines Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
config.txt Merge branch 'ds/bundle-uri-3' 2022-10-30 21:04:44 -04:00
date-formats.txt
diff-format.txt diff-format.txt: correct misleading wording 2022-06-13 11:57:03 -07:00
diff-generate-patch.txt docs: link generating patch sections 2023-01-13 12:55:14 -08:00
diff-options.txt docs: link generating patch sections 2023-01-13 12:55:14 -08:00
doc-diff
docbook-xsl.css
docbook.xsl
everyday.txto
fetch-options.txt Merge branch 'rc/fetch-refetch' 2022-04-04 10:56:23 -07:00
fix-texi.perl
fsck-msgids.txt fsck: document the new gitattributes message IDs 2023-01-16 12:03:14 -08:00
git-add.txt docs & comments: replace mentions of "git-add--interactive.perl" 2023-02-06 15:03:34 -08:00
git-am.txt am: allow passing --no-verify flag 2023-01-05 14:52:25 +09:00
git-annotate.txt doc txt & -h consistency: make "annotate" consistent 2022-10-13 09:32:57 -07:00
git-apply.txt Documentation: render dash correctly 2023-01-23 09:40:14 -08:00
git-archimport.txt
git-archive.txt archive: add --mtime 2023-02-18 09:29:13 -08:00
git-bisect-lk2009.txt git-bisect-lk2009: update nist report link 2023-01-13 11:58:51 -08:00
git-bisect.txt
git-blame.txt blame: allow --contents to work with non-HEAD commit 2023-03-24 12:05:22 -07:00
git-branch.txt Merge branch 'jc/doc-branch-update-checked-out-branch' 2023-01-27 08:51:41 -08:00
git-bugreport.txt builtin/bugreport.c: create '--diagnose' option 2022-08-12 13:20:02 -07:00
git-bundle.txt Documentation: fix various repeat word typos 2022-09-12 11:04:55 -07:00
git-cat-file.txt git-cat-file.txt: fix list continuations rendering literally 2023-01-18 08:24:39 -08:00
git-check-attr.txt attr: add flag --source to work with tree-ish 2023-01-14 08:49:55 -08:00
git-check-ignore.txt doc: check-ignore: code-quote an exclamation mark 2022-02-03 11:13:49 -08:00
git-check-mailmap.txt
git-check-ref-format.txt
git-checkout-index.txt checkout-index: add --ignore-skip-worktree-bits option 2022-01-13 13:49:45 -08:00
git-checkout.txt Merge branch 'jc/doc-checkout-b' 2023-01-30 14:24:21 -08:00
git-cherry-pick.txt git-cherry-pick.txt: do not use 'ORIG_HEAD' in example 2023-01-13 09:55:45 -08:00
git-cherry.txt
git-citool.txt
git-clean.txt Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
git-clone.txt Merge branch 'ab/dedup-config-and-command-docs' 2022-09-14 12:56:40 -07:00
git-column.txt docs: add CONFIGURATION sections that fuzzy map to built-ins 2022-09-07 09:46:07 -07:00
git-commit-graph.txt Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
git-commit-tree.txt
git-commit.txt docs: add CONFIGURATION sections that map to a built-in 2022-09-07 09:46:06 -07:00
git-config.txt Documentation: define protected configuration 2022-07-14 15:08:29 -07:00
git-count-objects.txt
git-credential-cache--daemon.txt doc txt & -h consistency: fix mismatching labels 2022-10-13 09:32:56 -07:00
git-credential-cache.txt Documentation: clarify that cache forgets credentials if the system restarts 2023-01-29 09:21:07 -08:00
git-credential-store.txt
git-credential.txt credential: new attribute password_expiry_utc 2023-02-22 15:18:58 -08:00
git-cvsexportcommit.txt
git-cvsimport.txt
git-cvsserver.txt git-cvsserver: clarify directory list 2022-07-19 12:45:31 -07:00
git-daemon.txt daemon: clarify directory arguments 2022-07-19 12:45:31 -07:00
git-describe.txt
git-diagnose.txt builtin/diagnose.c: add '--mode' option 2022-08-12 13:20:02 -07:00
git-diff-files.txt doc txt & -h consistency: correct padding around "[]()" 2022-10-13 09:32:55 -07:00
git-diff-index.txt diff-index.txt: update raw output format in examples 2022-06-13 11:59:16 -07:00
git-diff-tree.txt
git-diff.txt Merge branch 'rs/diff-caret-bang-with-parents' 2022-10-25 17:11:43 -07:00
git-difftool.txt difftool docs: de-duplicate configuration sections 2022-09-07 09:46:06 -07:00
git-fast-export.txt doc SYNOPSIS: consistently use ' for commands 2022-10-13 09:32:54 -07:00
git-fast-import.txt docs: add CONFIGURATION sections that map to a built-in 2022-09-07 09:46:06 -07:00
git-fetch-pack.txt builtin/fetch-pack: add --refetch option 2022-03-28 10:25:52 -07:00
git-fetch.txt doc: fix non-existent config name 2023-01-13 17:33:32 -08:00
git-filter-branch.txt
git-fmt-merge-msg.txt
git-for-each-ref.txt
git-for-each-repo.txt
git-format-patch.txt format-patch: learn format.forceInBodyFrom configuration variable 2022-08-29 14:39:13 -07:00
git-fsck-objects.txt
git-fsck.txt fsck: document msg-id 2022-10-25 15:44:18 -07:00
git-fsmonitor--daemon.txt fsmonitor: add documentation for allowRemote and socketDir options 2022-10-05 11:05:23 -07:00
git-gc.txt docs: add and use include template for config/* includes 2022-09-07 09:46:05 -07:00
git-get-tar-commit-id.txt
git-grep.txt grep docs: de-duplicate configuration sections 2022-09-07 09:46:05 -07:00
git-gui.txt
git-hash-object.txt doc txt & -h consistency: correct padding around "[]()" 2022-10-13 09:32:55 -07:00
git-help.txt git docs: add a category for file formats, protocols and interfaces 2022-08-04 14:12:23 -07:00
git-hook.txt hook: support a --to-stdin=<path> option 2023-02-08 12:50:03 -08:00
git-http-backend.txt
git-http-fetch.txt
git-http-push.txt
git-imap-send.txt docs: add and use include template for config/* includes 2022-09-07 09:46:05 -07:00
git-index-pack.txt index-pack: document and test the --promisor option 2022-03-09 10:25:26 -08:00
git-init-db.txt
git-init.txt docs: add CONFIGURATION sections that fuzzy map to built-ins 2022-09-07 09:46:07 -07:00
git-instaweb.txt
git-interpret-trailers.txt Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
git-log.txt Merge branch 'ab/dedup-config-and-command-docs' 2022-09-14 12:56:40 -07:00
git-ls-files.txt ls-files: guide folks to --exclude-standard over other --exclude* options 2023-01-13 11:55:17 -08:00
git-ls-remote.txt doc/ls-remote: clarify pattern format 2023-02-10 21:57:51 -08:00
git-ls-tree.txt ls-tree doc: document interaction with submodules 2022-04-08 11:21:11 -07:00
git-mailinfo.txt docs: add CONFIGURATION sections that map to a built-in 2022-09-07 09:46:06 -07:00
git-mailsplit.txt
git-maintenance.txt maintenance: add option to register in a specific config 2022-11-14 22:39:25 -05:00
git-merge-base.txt doc txt & -h consistency: correct padding around "[]()" 2022-10-13 09:32:55 -07:00
git-merge-file.txt
git-merge-index.txt
git-merge-one-file.txt
git-merge-tree.txt docs: fix description of the --merge-base option 2022-11-25 10:11:46 +09:00
git-merge.txt git-merge.txt: mention 'ORIG_HEAD' in the Description 2023-01-13 09:55:46 -08:00
git-mergetool--lib.txt
git-mergetool.txt docs: add and use include template for config/* includes 2022-09-07 09:46:05 -07:00
git-mktag.txt
git-mktree.txt fix typo in git-mktree.txt 2022-02-02 14:50:09 -08:00
git-multi-pack-index.txt midx.c: prevent expire from removing the cruft pack 2022-09-21 10:21:46 -07:00
git-mv.txt doc txt & -h consistency: fix mismatching labels 2022-10-13 09:32:56 -07:00
git-name-rev.txt name-rev: deprecate --stdin in favor of --annotate-stdin 2022-01-10 09:39:26 -08:00
git-notes.txt notes docs: de-duplicate and combine configuration sections 2022-09-07 09:46:06 -07:00
git-p4.txt git-p4: improve encoding handling to support inconsistent encodings 2022-05-04 10:30:01 -07:00
git-pack-objects.txt builtin/pack-objects.c: --cruft without expiration 2022-05-26 15:48:26 -07:00
git-pack-redundant.txt doc: use 'object database' not ODB or abbreviation 2022-10-30 19:58:46 -04:00
git-pack-refs.txt
git-patch-id.txt builtin: patch-id: add --verbatim as a command mode 2022-10-24 15:44:20 -07:00
git-prune-packed.txt doc txt & -h consistency: correct padding around "[]()" 2022-10-13 09:32:55 -07:00
git-prune.txt
git-pull.txt
git-push.txt Doc: document push.recurseSubmodules=only 2022-11-14 16:55:50 -05:00
git-quiltimport.txt
git-range-diff.txt range-diff: optionally accept pathspecs 2022-08-26 09:49:26 -07:00
git-read-tree.txt Documentation: render dash correctly 2023-01-23 09:40:14 -08:00
git-rebase.txt rebase: provide better error message for apply options vs. merge config 2023-01-25 09:20:53 -08:00
git-receive-pack.txt doc txt & -h consistency: use "git foo" form, not "git-foo" 2022-10-13 09:32:57 -07:00
git-reflog.txt reflog doc: list real subcommands up-front 2022-10-13 09:32:58 -07:00
git-remote-ext.txt
git-remote-fd.txt
git-remote-helpers.txto
git-remote.txt builtin/remote.c: teach -v to list filters for promisor remotes 2022-05-09 10:53:58 -07:00
git-repack.txt builtin/repack.c: implement --expire-to for storing pruned objects 2022-10-24 13:39:42 -07:00
git-replace.txt
git-request-pull.txt
git-rerere.txt doc txt & -h consistency: make "rerere" consistent 2022-10-13 09:32:56 -07:00
git-reset.txt git-reset.txt: mention 'ORIG_HEAD' in the Description 2023-01-13 09:55:45 -08:00
git-restore.txt
git-rev-list.txt doc txt & -h consistency: add or fix optional "--" syntax 2022-10-13 09:32:56 -07:00
git-rev-parse.txt rev-parse: add --exclude-hidden= option 2022-11-17 16:22:52 -05:00
git-revert.txt Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-11-29 10:41:06 +09:00
git-rm.txt
git-send-email.txt docs: git-send-email: difference between ssl and tls smtp-encryption 2022-10-12 11:08:37 -07:00
git-send-pack.txt doc txt & -h consistency: add missing options and labels 2022-10-13 09:32:56 -07:00
git-sh-i18n--envsubst.txt
git-sh-i18n.txt
git-sh-setup.txt
git-shell.txt
git-shortlog.txt shortlog: support arbitrary commit format --groups 2022-10-24 14:48:05 -07:00
git-show-branch.txt Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
git-show-index.txt
git-show-ref.txt doc txt & -h consistency: correct padding around "[]()" 2022-10-13 09:32:55 -07:00
git-show.txt
git-sparse-checkout.txt doc txt & -h consistency: add missing options and labels 2022-10-13 09:32:56 -07:00
git-stage.txt
git-stash.txt Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
git-status.txt status: modernize git-status "slow untracked files" advice 2022-12-01 15:27:41 +09:00
git-stripspace.txt
git-submodule.txt clone, submodule: pass partial clone filters to submodules 2022-02-09 15:38:36 -08:00
git-svn.txt
git-switch.txt docs: add CONFIGURATION sections that fuzzy map to built-ins 2022-09-07 09:46:07 -07:00
git-symbolic-ref.txt symbolic-ref: teach "--[no-]recurse" option 2022-10-09 12:31:24 -07:00
git-tag.txt doc txt & -h consistency: fix mismatching labels 2022-10-13 09:32:56 -07:00
git-tools.txt
git-unpack-file.txt
git-unpack-objects.txt
git-update-index.txt Documentation: fix various repeat word typos 2022-09-12 11:04:55 -07:00
git-update-ref.txt
git-update-server-info.txt doc txt & -h consistency: add missing options and labels 2022-10-13 09:32:56 -07:00
git-upload-archive.txt doc txt & -h consistency: fix mismatching labels 2022-10-13 09:32:56 -07:00
git-upload-pack.txt Documentation: fix various repeat word typos 2022-09-12 11:04:55 -07:00
git-var.txt var: add GIT_SEQUENCE_EDITOR variable 2022-12-18 11:48:26 +09:00
git-verify-commit.txt doc txt & -h consistency: add missing options and labels 2022-10-13 09:32:56 -07:00
git-verify-pack.txt doc txt & -h consistency: correct padding around "[]()" 2022-10-13 09:32:55 -07:00
git-verify-tag.txt doc txt & -h consistency: add missing options and labels 2022-10-13 09:32:56 -07:00
git-version.txt
git-web--browse.txt
git-whatchanged.txt
git-worktree.txt doc txt & -h consistency: word-wrap 2022-10-13 09:32:55 -07:00
git-write-tree.txt
git.txt Merge branch 'ar/markup-em-dash' 2023-01-30 14:24:24 -08:00
gitattributes.txt Merge branch 'jc/diff-algo-attribute' 2023-02-27 10:08:56 -08:00
gitcli.txt git-cli.txt: clarify "options first and then args" 2022-01-17 11:42:25 -08:00
gitcore-tutorial.txt
gitcredentials.txt credential: new attribute password_expiry_utc 2023-02-22 15:18:58 -08:00
gitcvs-migration.txt
gitdiffcore.txt
giteveryday.txt
gitfaq.txt
gitformat-bundle.txt docs: move protocol-related docs to man section 5 2022-08-04 14:12:23 -07:00
gitformat-chunk.txt docs: move pack format docs to man section 5 2022-08-04 14:12:24 -07:00
gitformat-commit-graph.txt doc: use "commit-graph" hyphenation consistently 2022-10-30 19:58:40 -04:00
gitformat-index.txt docs: document zero bits in index "mode" 2023-02-01 08:49:23 -08:00
gitformat-pack.txt docs: move cruft pack docs to gitformat-pack 2022-08-04 14:12:24 -07:00
gitformat-signature.txt Merge branch 'gm/signature-format-doc' 2023-03-06 21:51:56 -08:00
gitglossary.txt
githooks.txt githooks: discuss Git operations in foreign repositories 2023-01-13 09:59:26 -08:00
gitignore.txt
gitk.txt
gitmailmap.txt
gitmodules.txt
gitnamespaces.txt
gitprotocol-capabilities.txt docs: fix a few recently broken links 2022-09-16 08:38:03 -07:00
gitprotocol-common.txt docs: move protocol-related docs to man section 5 2022-08-04 14:12:23 -07:00
gitprotocol-http.txt docs: move http-protocol docs to man section 5 2022-08-04 14:12:24 -07:00
gitprotocol-pack.txt docs: move http-protocol docs to man section 5 2022-08-04 14:12:24 -07:00
gitprotocol-v2.txt *: fix typos which duplicate a word 2023-01-08 10:28:34 +09:00
gitremote-helpers.txt remote-curl: add 'get' capability 2022-08-10 14:07:37 -07:00
gitrepository-layout.txt
gitrevisions.txt
gitsubmodules.txt
gittutorial-2.txt
gittutorial.txt
gitweb.conf.txt
gitweb.txt
gitworkflows.txt
glossary-content.txt glossary: add reachability bitmap description 2022-10-30 19:58:46 -04:00
howto-index.sh
i18n.txt
install-doc-quick.sh
install-webdoc.sh
line-range-format.txt
line-range-options.txt
lint-fsck-msgids.perl Documentation: add lint-fsck-msgids 2022-10-25 15:44:19 -07:00
lint-gitlink.perl
lint-man-end-blurb.perl
lint-man-section-order.perl git docs: add a category for file formats, protocols and interfaces 2022-08-04 14:12:23 -07:00
Makefile Merge branch 'ps/gnumake-4.4-fix' 2022-11-30 10:57:19 +09:00
manpage-base-url.xsl.in
manpage-bold-literal.xsl
manpage-normal.xsl
manpage-quote-apos.xsl
manpage.xsl
merge-options.txt
merge-strategies.txt
MyFirstContribution.txt Documentation: fix typo 2022-11-14 18:14:58 -05:00
MyFirstObjectWalk.txt Documentation: clean up a few misspelled word typos 2022-09-21 10:28:35 -07:00
object-format-disclaimer.txt
pretty-formats.txt doc: pretty-formats note wide char limitations, and add tests 2023-01-19 14:35:15 -08:00
pretty-options.txt
pull-fetch-param.txt
ref-reachability-filters.txt
rerere-options.txt doc: clarify rerere-autoupdate 2022-08-03 13:57:25 -07:00
rev-list-description.txt
rev-list-options.txt rev-list: clarify git-log default date format 2023-02-15 17:34:46 -08:00
ReviewingGuidelines.txt Documentation: add ReviewingGuidelines 2022-09-19 14:36:08 -07:00
revisions.txt revisions.txt: be explicit about commands writing 'ORIG_HEAD' 2023-01-13 09:55:46 -08:00
scalar.txt scalar: include in standard Git build & installation 2022-09-02 10:02:55 -07:00
sequencer.txt
signoff-option.txt
SubmittingPatches SubmittingPatches: use usual capitalization in the log message body 2022-10-07 14:59:25 -07:00
texi.xsl
ToolsForGit.txt Documentation/ToolsForGit.txt: Tools for developing Git 2022-04-21 09:50:25 -07:00
trace2-target-values.txt
transfer-data-leaks.txt
urls-remotes.txt Documentation: clarify multiple pushurls vs urls 2023-02-07 11:02:27 -08:00
urls.txt
user-manual.conf
user-manual.txt docs: fix a few recently broken links 2022-09-16 08:38:03 -07:00