git-commit-vandalism/Documentation
Kevin Bracey d0af663e42 revision.c: Make --full-history consider more merges
History simplification previously always treated merges as TREESAME
if they were TREESAME to any parent.

While this was consistent with the default behaviour, this could be
extremely unhelpful when searching detailed history, and could not be
overridden. For example, if a merge had ignored a change, as if by "-s
ours", then:

  git log -m -p --full-history -Schange file

would successfully locate "change"'s addition but would not locate the
merge that resolved against it.

Futher, simplify_merges could drop the actual parent that a commit
was TREESAME to, leaving it as a normal commit marked TREESAME that
isn't actually TREESAME to its remaining parent.

Now redefine a commit's TREESAME flag to be true only if a commit is
TREESAME to _all_ of its parents. This doesn't affect either the default
simplify_history behaviour (because partially TREESAME merges are turned
into normal commits), or full-history with parent rewriting (because all
merges are output). But it does affect other modes. The clearest
difference is that --full-history will show more merges - sufficient to
ensure that -m -p --full-history log searches can really explain every
change to the file, including those changes' ultimate fate in merges.

Also modify simplify_merges to recalculate TREESAME after removing
a parent. This is achieved by storing per-parent TREESAME flags on the
initial scan, so the combined flag can be easily recomputed.

This fixes some t6111 failures, but creates a couple of new ones -
we are now showing some merges that don't need to be shown.

Signed-off-by: Kevin Bracey <kevin@bracey.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-05-16 11:51:09 -07:00
..
howto The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
RelNotes Sync with v1.8.2.3 2013-05-09 13:32:54 -07:00
technical Merge branch 'kb/status-ignored-optim-2' 2013-04-23 11:21:23 -07:00
.gitattributes
.gitignore doc: generate a list of valid merge tools 2013-02-02 21:46:52 -08:00
asciidoc.conf Documentation: avoid poor-man's small caps GIT 2013-02-01 13:53:25 -08:00
blame-options.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
build-docdep.perl
cat-texi.perl Documentation: Strip texinfo anchors to avoid duplicates 2013-04-03 16:14:19 -07:00
cmd-list.perl
CodingGuidelines CodingGuidelines: our documents are in AsciiDoc 2013-03-21 14:17:32 -07:00
config.txt Merge branch 'maint' 2013-04-28 14:47:24 -07:00
date-formats.txt
diff-config.txt Merge branch 'mp/diff-algo-config' 2013-02-17 15:25:52 -08:00
diff-format.txt
diff-generate-patch.txt
diff-options.txt Merge branch 'maint-1.8.1' into maint 2013-03-25 13:46:42 -07:00
docbook-xsl.css
docbook.xsl
everyday.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
fetch-options.txt fetch: elaborate --depth action 2013-01-11 09:11:10 -08:00
fix-texi.perl
git-add.txt git add: --ignore-removal is a better named --no-all 2013-04-22 13:34:31 -07:00
git-am.txt
git-annotate.txt
git-apply.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-archimport.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-archive.txt archive: clarify explanation of --worktree-attributes 2013-04-11 17:38:45 -07:00
git-bisect-lk2009.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-bisect.txt Merge branch 'mg/bisect-doc' 2013-02-14 10:29:01 -08:00
git-blame.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-branch.txt Merge branch 'nd/branch-error-cases' 2013-02-07 14:41:38 -08:00
git-bundle.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-cat-file.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-check-attr.txt
git-check-ignore.txt add git-check-ignore sub-command 2013-01-06 14:26:38 -08:00
git-check-ref-format.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-checkout-index.txt
git-checkout.txt checkout: add --ignore-skip-worktree-bits in sparse checkout mode 2013-04-15 08:54:45 -07:00
git-cherry-pick.txt Merge branch 'cw/cherry-pick-allow-empty-message' 2012-09-03 15:53:37 -07:00
git-cherry.txt
git-citool.txt
git-clean.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-clone.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-column.txt Documentation: spelling fixes 2012-06-19 11:35:19 -07:00
git-commit-tree.txt commit-tree: document -S option consistently 2013-03-25 15:01:22 -07:00
git-commit.txt Documentation/git-commit: Typo under --edit 2013-05-02 12:03:40 -07:00
git-config.txt Merge branch 'jn/warn-on-inaccessible-loosen' into maint 2013-01-11 16:47:07 -08:00
git-count-objects.txt count-objects: add -H option to humanize sizes 2013-04-10 13:27:26 -07:00
git-credential-cache--daemon.txt command-list: mention git-credential-* helpers 2012-08-08 12:11:54 -07:00
git-credential-cache.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-credential-store.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-credential.txt doc: various spelling fixes 2013-04-12 12:00:52 -07:00
git-cvsexportcommit.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-cvsimport.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
git-cvsserver.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
git-daemon.txt Merge branch 'jk/daemon-user-doc' into maint 2013-04-22 11:26:58 -07:00
git-describe.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-diff-files.txt
git-diff-index.txt
git-diff-tree.txt
git-diff.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-difftool.txt difftool --dir-diff: symlink all files matching the working tree 2013-03-14 14:33:06 -07:00
git-fast-export.txt fast-export: add --signed-tags=warn-strip mode 2013-04-15 09:02:25 -07:00
git-fast-import.txt Merge branch 'jk/maint-fast-import-doc-reorder' into maint 2013-01-14 07:59:46 -08:00
git-fetch-pack.txt fetch: add --unshallow for turning shallow repo into complete one 2013-01-11 09:09:30 -08:00
git-fetch.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-filter-branch.txt Merge branch 'maint-1.8.1' into maint 2013-03-25 13:46:42 -07:00
git-fmt-merge-msg.txt
git-for-each-ref.txt git-for-each-ref.txt: 'raw' is a supported date format 2013-01-21 16:26:26 -08:00
git-format-patch.txt format-patch: add format.coverLetter configuration variable 2013-04-07 13:37:47 -07:00
git-fsck-objects.txt
git-fsck.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-gc.txt
git-get-tar-commit-id.txt
git-grep.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-gui.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-hash-object.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-help.txt doc: include --guide option description for "git help" 2013-04-03 07:43:29 -07:00
git-http-backend.txt doc/http-backend: match query-string in apache half-auth example 2013-04-13 22:27:06 -07:00
git-http-fetch.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-http-push.txt
git-imap-send.txt
git-index-pack.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-init-db.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-init.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-instaweb.txt
git-log.txt git-log.txt: rewrite note on why "--" may be required 2013-04-21 23:10:51 -07:00
git-lost-found.txt Documentation: do not mention .git/refs/* directories 2012-08-06 14:04:16 -07:00
git-ls-files.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-ls-remote.txt ls-remote: document the '--get-url' option 2012-09-07 10:58:35 -07:00
git-ls-tree.txt
git-mailinfo.txt
git-mailsplit.txt
git-merge-base.txt merge-base: "--is-ancestor A B" 2012-08-31 11:45:33 -07:00
git-merge-file.txt
git-merge-index.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-merge-one-file.txt
git-merge-tree.txt
git-merge.txt Merge branch 'yd/doc-merge-annotated-tag' into maint 2013-04-01 09:19:37 -07:00
git-mergetool--lib.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-mergetool.txt Merge branch 'da/difftool-updates' 2012-08-27 11:55:17 -07:00
git-mktag.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-mktree.txt
git-mv.txt Documentation: avoid poor-man's small caps GIT 2013-02-01 13:53:25 -08:00
git-name-rev.txt
git-notes.txt Doc notes: Include the format-patch --notes option 2012-10-25 06:15:56 -04:00
git-p4.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
git-pack-objects.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-pack-redundant.txt
git-pack-refs.txt Merge branch 'jc/tag-doc' into maint-1.7.11 2012-08-24 12:05:30 -07:00
git-parse-remote.txt
git-patch-id.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-peek-remote.txt
git-prune-packed.txt
git-prune.txt
git-pull.txt Merge branch 'maint-1.8.1' into maint 2013-03-27 10:51:10 -07:00
git-push.txt Merge branch 'jc/maint-push-refspec-default-doc' into maint 2013-03-26 12:40:14 -07:00
git-quiltimport.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-read-tree.txt
git-rebase.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-receive-pack.txt
git-reflog.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-relink.txt
git-remote-ext.txt doc: various spelling fixes 2013-04-12 12:00:52 -07:00
git-remote-fd.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-remote-helpers.txto Rename {git- => git}remote-helpers.txt 2013-02-01 14:12:34 -08:00
git-remote-testgit.txt Merge branch 'jk/remote-helpers-doc' 2013-02-07 14:41:45 -08:00
git-remote.txt remote: 'show' and 'prune' can take more than one remote 2013-04-24 13:13:21 -07:00
git-repack.txt
git-replace.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-repo-config.txt
git-request-pull.txt
git-rerere.txt
git-reset.txt reset: update documentation to require only tree-ish with paths 2013-01-16 12:50:23 -08:00
git-rev-list.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-rev-parse.txt Merge branch 'ta/glossary' 2013-04-21 18:40:15 -07:00
git-revert.txt
git-rm.txt Merge branch 'jl/submodule-deinit' 2013-03-25 14:00:29 -07:00
git-send-email.txt send-email: make annotate configurable 2013-04-07 00:42:29 -07:00
git-send-pack.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-sh-i18n--envsubst.txt
git-sh-i18n.txt
git-sh-setup.txt mergetools/p4merge: create a base if none available 2013-03-13 10:46:07 -07:00
git-shell.txt shell: new no-interactive-login command to print a custom message 2013-03-09 23:21:35 -08:00
git-shortlog.txt git-shortlog.txt: make SYNOPSIS match log, update OPTIONS 2013-04-21 23:11:02 -07:00
git-show-branch.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-show-index.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-show-ref.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-show.txt
git-stage.txt
git-stash.txt Documentation/git-stash.txt: add a missing verb 2012-12-10 08:18:25 -08:00
git-status.txt Merge branch 'tb/document-status-u-tradeoff' into maint 2013-04-01 09:19:30 -07:00
git-stripspace.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
git-submodule.txt Merge branch 'jl/submodule-deinit' 2013-03-25 14:00:29 -07:00
git-svn.txt git-svn: added an --include-path flag 2013-05-09 01:13:36 +00:00
git-symbolic-ref.txt git symbolic-ref --delete $symref 2012-10-21 12:17:38 -07:00
git-tag.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-tar-tree.txt
git-tools.txt doc: various spelling fixes 2013-04-12 12:00:52 -07:00
git-unpack-file.txt
git-unpack-objects.txt
git-update-index.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-update-ref.txt Documentation: avoid poor-man's small caps GIT 2013-02-01 13:53:25 -08:00
git-update-server-info.txt
git-upload-archive.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-upload-pack.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-var.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-verify-pack.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-verify-tag.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-web--browse.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-whatchanged.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-write-tree.txt
git.txt Git 1.8.2.3 2013-05-09 13:31:17 -07:00
gitattributes.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitcli.txt Merge branch 'gp/avoid-explicit-mention-of-dot-git-refs' into maint 2013-03-26 12:40:04 -07:00
gitcore-tutorial.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
gitcredentials.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitcvs-migration.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitdiffcore.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
gitglossary.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
githooks.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
gitignore.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
gitk.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitmodules.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitnamespaces.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitremote-helpers.txt transport-helper: add 'signed-tags' capability 2013-04-15 09:04:43 -07:00
gitrepository-layout.txt Merge branch 'nd/checkout-keep-sparse' 2013-04-22 11:11:40 -07:00
gitrevisions.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gittutorial-2.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
gittutorial.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitweb.conf.txt gitweb/INSTALL: GITWEB_CONFIG_SYSTEM is for backward compatibility 2013-04-17 15:18:12 -07:00
gitweb.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitworkflows.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
glossary-content.txt Merge branch 'jn/glossary-revision' into maint 2013-05-03 15:12:16 -07:00
howto-index.sh Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
i18n.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
install-doc-quick.sh
install-webdoc.sh
mailmap.txt Merge branch 'jk/mailmap-from-blob' 2013-01-05 23:41:42 -08:00
Makefile Merge branch 'da/mergetool-docs' 2013-02-07 14:42:16 -08:00
manpage-1.72.xsl
manpage-base-url.xsl.in
manpage-base.xsl
manpage-bold-literal.xsl
manpage-normal.xsl
manpage-quote-apos.xsl
manpage-suppress-sp.xsl
merge-config.txt Merge branch 'da/mergetool-docs' 2013-02-07 14:42:16 -08:00
merge-options.txt Merge branch 'sg/gpg-sig' 2013-04-05 14:15:16 -07:00
merge-strategies.txt git-merge(1): document diff-algorithm option to merge-recursive 2013-04-05 10:57:23 -07:00
pretty-formats.txt Merge branch 'nd/pretty-formats' 2013-04-23 11:22:48 -07:00
pretty-options.txt Documentation: Document signature showing options 2012-09-20 10:28:51 -07:00
pull-fetch-param.txt
rev-list-options.txt revision.c: Make --full-history consider more merges 2013-05-16 11:51:09 -07:00
revisions.txt Merge branch 'rr/shortlog-doc' 2013-04-26 15:28:39 -07:00
sequencer.txt
SubmittingPatches Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
urls-remotes.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
urls.txt Merge branch 'jk/remote-helpers-doc' 2013-02-07 14:41:45 -08:00
user-manual.conf docs: monospace listings in docbook output 2012-08-07 14:30:52 -07:00
user-manual.txt Merge branch 'da/downcase-u-in-usage' into maint 2013-04-01 09:19:04 -07:00