Nguyễn Thái Ngọc Duy 3d9ff4d736 shallow.c: implement a generic shallow boundary finder based on rev-list
Instead of a custom commit walker like get_shallow_commits(), this new
function uses rev-list to mark NOT_SHALLOW to all reachable commits,
except borders. The definition of reachable is to be defined by the
protocol later. This makes it more flexible to define shallow boundary.

The way we find border is paint all reachable commits NOT_SHALLOW.  Any
of them that "touches" commits without NOT_SHALLOW flag are considered
shallow (e.g. zero parents via grafting mechanism). Shallow commits and
their true parents are all marked SHALLOW. Then NOT_SHALLOW is removed
from shallow commits at the end.

There is an interesting observation. With a generic walker, we can
produce all kinds of shallow cutting. In the following graph, every
commit but "x" is reachable. "b" is a parent of "a".

           x -- a -- o
          /    /
    x -- c -- b -- o

After this function is run, "a" and "c" are both considered shallow
commits. After grafting occurs at the client side, what we see is

                a -- o
                    /
         c -- b -- o

Notice that because of grafting, "a" has zero parents, so "b" is no
longer a parent of "a".

This is unfortunate and may be solved in two ways. The first is change
the way shallow grafting works and keep "a -- b" connection if "b"
exists and always ends at shallow commits (iow, no loose ends). This is
hard to detect, or at least not cheap to do.

The second way is mark one "x" as shallow commit instead of "a" and
produce this graph at client side:

           x -- a -- o
               /    /
         c -- b -- o

More commits, but simpler grafting rules.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-06-13 14:38:16 -07:00
2016-02-17 10:13:29 -08:00
2016-02-22 13:16:12 -08:00
2016-01-03 19:07:29 +09:00
2014-07-13 18:59:05 -07:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-10-02 13:07:38 -07:00
2015-10-05 12:30:19 -07:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-08-03 11:01:21 -07:00
2016-01-18 19:48:43 -08:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-09-28 14:57:10 -07:00
2016-02-10 14:20:06 -08:00
2015-09-25 10:18:18 -07:00
2016-02-10 14:20:06 -08:00
2015-12-10 12:36:13 -08:00
2015-06-29 11:39:10 -07:00
2015-10-05 13:20:08 -07:00
2016-02-22 13:12:56 -08:00
2015-06-24 12:21:47 -07:00
2015-11-20 08:02:05 -05:00
2016-02-17 10:13:31 -08:00
2015-11-20 08:02:05 -05:00
2015-10-20 15:24:01 -07:00
2015-09-25 10:18:18 -07:00
2016-02-17 10:13:29 -08:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2016-01-20 11:43:23 -08:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-09-25 08:54:54 -07:00
2015-12-10 12:36:13 -08:00
2015-12-29 10:33:09 -08:00
2016-02-17 10:05:44 -08:00
2016-02-17 10:13:33 -08:00
2015-10-05 12:30:05 -07:00
2016-01-28 16:10:14 -08:00
2016-01-28 16:10:14 -08:00
2015-11-20 08:02:05 -05:00
2016-01-27 14:27:19 -08:00
2015-11-20 08:02:05 -05:00
2015-11-20 08:02:05 -05:00
2015-08-11 14:29:36 -07:00
2016-01-19 11:22:29 -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 version 2 (some parts of it are under different licenses,
compatible with the GPLv2). It was originally written by Linus
Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/giteveryday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
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 (read
Documentation/SubmittingPatches for instructions on patch submission).
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://news.gmane.org/gmane.comp.version-control.git/,
http://marc.info/?l=git and other archival sites.

The maintainer frequently sends the "What's cooking" reports that
list the current status of various development topics to the mailing
list.  The discussion following them give a good reference for
project status, development direction and remaining tasks.
Description
Git with broken hash generation to generate collisions between object IDs. Don't use this!
https://undefinedbehavior.de/posts/commit-vandalism/
Readme 217 MiB
Languages
C 50%
Shell 38.2%
Perl 5.5%
Tcl 3.5%
Python 0.9%
Other 1.7%