git-commit-vandalism/Documentation
jon@blackcubes.dyndns.org a3437b8c26 [PATCH] Modify git-rev-list to linearise the commit history in merge order.
This patch linearises the GIT commit history graph into merge order
which is defined by invariants specified in Documentation/git-rev-list.txt.

The linearisation produced by this patch is superior in an objective sense
to that produced by the existing git-rev-list implementation in that
the linearisation produced is guaranteed to have the minimum number of
discontinuities, where a discontinuity is defined as an adjacent pair of
commits in the output list which are not related in a direct child-parent
relationship.

With this patch a graph like this:

	a4 ---
	| \   \
	|  b4 |
	|/ |  |
	a3 |  |
	|  |  |
	a2 |  |
	|  |  c3
	|  |  |
	|  |  c2
	|  b3 |
	|  | /|
	|  b2 |
	|  |  c1
	|  | /
	|  b1
	a1 |
	|  |
	a0 |
	| /
	root

Sorts like this:

	= a4
	| c3
	| c2
	| c1
	^ b4
	| b3
	| b2
	| b1
	^ a3
	| a2
	| a1
	| a0
	= root

Instead of this:

	= a4
	| c3
	^ b4
	| a3
	^ c2
	^ b3
	^ a2
	^ b2
	^ c1
	^ a1
	^ b1
	^ a0
	= root

A test script, t/t6000-rev-list.sh, includes a test which demonstrates
that the linearisation produced by --merge-order has less discontinuities
than the linearisation produced by git-rev-list without the --merge-order
flag specified. To see this, do the following:

	cd t
	./t6000-rev-list.sh
	cd trash
	cat actual-default-order
	cat actual-merge-order

The existing behaviour of git-rev-list is preserved, by default. To obtain
the modified behaviour, specify --merge-order or --merge-order --show-breaks
on the command line.

This version of the patch has been tested on the git repository and also on the linux-2.6
repository and has reasonable performance on both - ~50-100% slower than the original algorithm.

This version of the patch has incorporated a functional equivalent of the Linus' output limiting
algorithm into the merge-order algorithm itself. This operates per the notes associated
with Linus' commit 337cb3fb8d.

This version has incorporated Linus' feedback regarding proposed changes to rev-list.c.
(see: [PATCH] Factor out filtering in rev-list.c)

This version has improved the way sort_first_epoch marks commits as uninteresting.

For more details about this change, refer to Documentation/git-rev-list.txt
and http://blackcubes.dyndns.org/epoch/.

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-06-06 09:07:26 -07:00
..
diff-format.txt [PATCH] Documentation: describe git extended diff headers. 2005-06-05 15:23:57 -07:00
diffcore.txt [PATCH] Documentation: describe diff tweaking. 2005-06-05 15:23:57 -07:00
git-apply-patch-script.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-cat-file.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-check-files.txt [PATCH 3/4] split core-git.txt and update 2005-05-10 15:01:23 -07:00
git-checkout-cache.txt [PATCH] Implement git-checkout-cache -u to update stat information in the cache. 2005-05-19 09:50:57 -07:00
git-commit-tree.txt [PATCH 3/4] split core-git.txt and update 2005-05-10 15:01:23 -07:00
git-convert-cache.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-diff-cache.txt [PATCH] diff: Fix docs and add -O to diff-helper. 2005-06-03 11:23:03 -07:00
git-diff-files.txt [PATCH] diff: Fix docs and add -O to diff-helper. 2005-06-03 11:23:03 -07:00
git-diff-helper.txt [PATCH] diff: Fix docs and add -O to diff-helper. 2005-06-03 11:23:03 -07:00
git-diff-tree.txt [PATCH] diff: Fix docs and add -O to diff-helper. 2005-06-03 11:23:03 -07:00
git-export.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-fsck-cache.txt Fix up git-fsck-cache documentation 2005-05-22 14:32:26 -07:00
git-http-pull.txt [PATCH] pull: gracefully recover from delta retrieval failure. 2005-06-05 14:18:00 -07:00
git-init-db.txt [PATCH 3/4] split core-git.txt and update 2005-05-10 15:01:23 -07:00
git-local-pull.txt [PATCH] pull: gracefully recover from delta retrieval failure. 2005-06-05 14:18:00 -07:00
git-ls-files.txt [PATCH 3/3] Add git-ls-files -k. 2005-05-13 07:34:59 +02:00
git-ls-tree.txt [PATCH] Rewrite ls-tree to behave more like "/bin/ls -a" 2005-05-29 11:40:40 -07:00
git-merge-base.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-merge-cache.txt Document git-merge-cache -o 2005-05-11 04:49:36 +02:00
git-merge-one-file-script.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-mkdelta.txt [PATCH] Docs - delta object 2005-05-22 11:07:22 -07:00
git-mktag.txt [PATCH 3/4] split core-git.txt and update 2005-05-10 15:01:23 -07:00
git-prune-script.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-pull-script.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-read-tree.txt [PATCH 3/4] split core-git.txt and update 2005-05-10 15:01:23 -07:00
git-resolve-script.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-rev-list.txt [PATCH] Modify git-rev-list to linearise the commit history in merge order. 2005-06-06 09:07:26 -07:00
git-rev-tree.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-ssh-pull.txt [PATCH] rename git-rpush and git-rpull to git-ssh-push and git-ssh-pull 2005-06-05 16:12:27 -07:00
git-ssh-push.txt [PATCH] rename git-rpush and git-rpull to git-ssh-push and git-ssh-pull 2005-06-05 16:12:27 -07:00
git-tag-script.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-tar-tree.txt [PATCH] git-tar-tree: small doc update 2005-06-02 18:30:08 -07:00
git-unpack-file.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-update-cache.txt [PATCH] Make git-update-cache --force-remove regular 2005-06-05 16:57:23 -07:00
git-write-blob.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git-write-tree.txt [PATCH 1/4] split core-git.txt and update 2005-05-10 14:55:22 -07:00
git.txt [PATCH] rename git-rpush and git-rpull to git-ssh-push and git-ssh-pull 2005-06-05 16:12:27 -07:00
Makefile [PATCH] Docs - Makefile update 2005-05-22 11:07:22 -07:00
tutorial.txt Clarify git-diff-cache semantics in the tutorial. 2005-06-02 17:15:32 -07:00