1
0
mirror of https://github.com/git/git.git synced 2025-04-08 23:24:14 +00:00
Junio C Hamano 1c4fea3a40 git-rev-list --bisect: optimization
This improves the performance of revision bisection.

The idea is to avoid rather expensive count_distance() function,
which counts the number of commits that are reachable from any
given commit (including itself) in the set.  When a commit has
only one relevant parent commit, the number of commits the
commit can reach is exactly the number of commits that the
parent can reach plus one; instead of running count_distance()
on commits that are on straight single strand of pearls, we can
just add one to the parents' count.

On the other hand, for a merge commit, because the commits
reachable from one parent can be reachable from another parent,
you cannot just add the parents' counts up plus one for the
commit itself; that would overcount ancestors that are reachable
from more than one parents.

The algorithm used in the patch runs count_distance() on merge
commits, and uses the util field of commit objects to remember
them.  After that, the number of commits reachable from each of
the remaining commits is counted by finding a commit whose count
is not yet known but the count for its (sole) parent is known,
and adding one to the parent's count, until we assign numbers to
everybody.

Another small optimization is whenever we find a half-way commit
(that is, a commit that can reach exactly half of the commits),
we stop giving counts to remaining commits, as we will not find
any better commit than we just found.

The performance to bisect between v1.0.0 and v1.5.0 in git.git
repository was improved by saying good and bad in turns from
3.68 seconds down to 1.26 seconds.  Bisecting the kernel between
v2.6.18 and v2.6.20 was sped up from 21.84 seconds down to 4.22
seconds.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2007-03-22 01:44:17 -07:00
2007-02-03 21:49:54 -08:00
2007-03-22 01:00:12 -07:00
2007-03-14 01:40:19 -07:00
2007-03-03 19:47:46 -08:00
2007-02-27 22:15:42 -08:00
2007-03-17 00:34:19 -07:00
2007-03-20 22:17:47 -07:00
2007-02-25 11:08:47 -08:00
2007-02-24 01:42:06 -08:00
2007-03-17 00:34:19 -07:00
2006-05-01 22:29:16 -07:00
2007-03-20 22:09:57 -07:00
2007-03-02 00:37:12 -08:00
2006-11-21 20:55:39 -08:00
2007-02-18 15:57:36 -08:00
2007-02-14 11:19:28 -08:00
2005-12-27 10:49:25 -08:00
2005-08-09 22:28:19 -07:00
2005-10-14 17:17:27 -07:00
2006-05-15 12:32:13 -07:00
2007-03-14 16:21:19 -07:00
2007-03-14 16:21:19 -07:00
2007-03-14 16:21:19 -07:00
2007-03-07 11:15:26 -08:00
2006-12-29 11:01:31 -08:00
2006-03-05 02:47:29 -08:00
2007-02-28 14:18:57 -08:00
2006-02-06 21:43:27 -08:00
2007-02-03 21:49:54 -08:00
2007-02-08 15:23:52 -08:00
2005-09-07 17:45:20 -07:00
2007-01-18 14:22:24 -08:00
2007-01-30 21:03:11 -08:00
2007-03-19 02:56:29 -07:00
2007-03-17 00:34:19 -07:00
2006-09-27 23:59:09 -07:00
2007-03-07 10:47:10 -08:00
2007-03-07 10:47:10 -08:00
2006-06-26 14:58:41 -07:00
2007-03-17 00:34:19 -07:00
2007-03-19 02:48:37 -07:00
2007-02-27 01:34:21 -08:00
2007-03-07 10:47:10 -08:00
2007-01-17 12:03:50 -08:00
2007-02-08 17:48:22 -08:00
2007-03-10 22:07:26 -08:00
2007-02-03 11:57:18 -08:00
2007-03-18 14:43:29 -07:00
2007-03-11 23:02:52 -07:00
2007-03-12 23:40:18 -07:00
2007-03-10 22:07:26 -08:00
2007-03-12 11:30:38 -07:00
2006-10-20 16:50:36 -07:00
2007-02-27 01:34:21 -08:00
2005-11-02 16:50:58 -08:00
2006-03-25 16:35:43 -08:00
2007-03-03 19:47:46 -08:00

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public License.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.
See Documentation/tutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands,
and "man git-commandname" for documentation of each command.
CVS users may also want to read Documentation/cvs-migration.txt.

Many Git online resources are accessible from http://git.or.cz/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org. To subscribe
to the list, send an email with just "subscribe git" in the body to
majordomo@vger.kernel.org. The mailing list archives are available at
http://marc.theaimsgroup.com/?l=git and other archival sites.
Description
Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via GitGitGadget (https://gitgitgadget.github.io/). Please follow Documentation/SubmittingPatches procedure for any of your improvements.
Readme 823 MiB
Languages
C 50.1%
Shell 38.4%
Perl 5.1%
Tcl 3.2%
Python 0.8%
Other 2.1%