revision.c: introduce --min-parents and --max-parents options
authorMichael J Gruber <git@drmicha.warpmail.net>
Mon, 21 Mar 2011 10:14:06 +0000 (11:14 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 23 Mar 2011 17:16:44 +0000 (10:16 -0700)
commitad5aeeded3295589b2573b143f754762a56f8f82
tree264a93fc2b35d7e97ae4cd89b16d011cd4e149fa
parent8ee50594889056322f2fc00a589a36e83b9119fd
revision.c: introduce --min-parents and --max-parents options

Introduce --min-parents and --max-parents options which limit the
revisions to those commits which have at least (or at most) that many
commits, where negative arguments for --max-parents= denote infinity
(i.e. no upper limit).

In particular:

  --max-parents=1 is the same as --no-merges;
  --min-parents=2 is the same as --merges;
  --max-parents=0 shows only roots; and
  --min-parents=3 shows only octopus merges

Using --min-parents=n and --max-parents=m with n>m gives you what you ask
for (i.e. nothing) for obvious reasons, just like when you give --merges
(show only merge commits) and --no-merges (show only non-merge commits) at
the same time.

Also, introduce --no-min-parents and --no-max-parents to do the obvious
thing for convenience.

We compute the number of parents only when we limit by that, so there
is no performance impact when there are no limiters.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/log.c
builtin/rev-list.c
builtin/rev-parse.c
revision.c
revision.h