From: Michael J Gruber <git@drmicha.warpmail.net>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Jeff King <peff@peff.net>
Subject: Re: [PATCH 1/3] revision.c: introduce --min-parents and --max-parents
Date: Mon, 21 Mar 2011 10:26:31 +0100 [thread overview]
Message-ID: <4D8719C7.7020905@drmicha.warpmail.net> (raw)
In-Reply-To: <20110318204854.GA23331@elie>
Jonathan Nieder venit, vidit, dixit 18.03.2011 21:48:
> Hi,
>
> Michael J Gruber wrote:
>
>> --max-parents=1: no merges
>> --min-parents=2: merges only
>> --max-parents=0: only roots
>> --min-parents=3: only octopusses
>
> This is growing on me. Thanks for inventing it.
Thanks for teaching me a new collocation (to grow on sb) ;)
>
>> --- a/builtin/log.c
>> +++ b/builtin/log.c
>> @@ -1061,7 +1061,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
>> rev.commit_format = CMIT_FMT_EMAIL;
>> rev.verbose_header = 1;
>> rev.diff = 1;
>> - rev.no_merges = 1;
>> + rev.max_parents = MAX_PARENTS(1);
>
> Is there a reason not to choose a convention for which
>
> rev.max_parents = 1;
>
> works?
Yes.
Oh, you also want to know what it is? I was somehow fixed on using a
limited number of bits (probably because of no_merges etc. and the
mentioning of tri-state), therefore using a bounded range.
Also, I was keen of having "8" be infinity. (My fingers are trained to
enter "`8" to get "\infty".) But I've come to realise I'm the only one.
>
> What does --no-merges --merges do? I would find it most intuitive to
> error out (since some people would want the last choice to win and
> others want --merges-only --nonmerges-only to select the empty set),
> but this patch does the backward-compatible thing, which is to show
Yes, a true case of being "backward(!)-compatible"...
> zero commits. Maybe it deserves a test case?
>
>> --- a/revision.c
>> +++ b/revision.c
>> @@ -1277,9 +1277,13 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
>> } else if (!strcmp(arg, "--remove-empty")) {
>> revs->remove_empty_trees = 1;
>> } else if (!strcmp(arg, "--merges")) {
>> - revs->merges_only = 1;
>> + revs->min_parents = MIN_PARENTS(2);
>
> Why not "revs->min_parents = 2;"?
For consistency.
>
>> } else if (!strcmp(arg, "--no-merges")) {
>> - revs->no_merges = 1;
>> + revs->max_parents = MAX_PARENTS(1);
>> + } else if (!prefixcmp(arg, "--min-parents=")) {
>> + revs->min_parents = MIN_PARENTS(atoi(arg+14));
>> + } else if (!prefixcmp(arg, "--max-parents=")) {
>> + revs->max_parents = MAX_PARENTS(atoi(arg+14));
>
> It would be nicer to error out for malformed numbers. That's
> a separate topic, though --- you have plenty of company.
min_age etc., yes.
>
>> @@ -2029,10 +2033,15 @@ enum commit_action get_commit_action(struct rev_info *revs, struct commit *commi
>> return commit_ignore;
>> if (revs->min_age != -1 && (commit->date > revs->min_age))
>> return commit_ignore;
>> - if (revs->no_merges && commit->parents && commit->parents->next)
>> - return commit_ignore;
>> - if (revs->merges_only && !(commit->parents && commit->parents->next))
>> - return commit_ignore;
>> + if (revs->min_parents || revs->max_parents) {
>> + int n = 0;
>> + struct commit_list *p;
>> + for (p = commit->parents; p; p = p->next)
>> + n++;
>> + if ((MIN_PARENTS(n) < revs->min_parents) ||
>> + (MAX_PARENTS(n) < revs->max_parents)) /* max is inv. */
>> + return commit_ignore;
>
> Sane. If we feared enormous parent lists we could do
>
> for (p = commit->parents; p && n <= 7 - revs->max_parents; p = p->next)
> n++;
>
> but I suspect that's slower.
>
>> --- a/revision.h
>> +++ b/revision.h
>> @@ -20,6 +20,11 @@
>> #define DECORATE_SHORT_REFS 1
>> #define DECORATE_FULL_REFS 2
>>
>> +/* limit to used range */
>> +#define MIN_PARENTS(m) ({ unsigned int __n = (m); (__n < 0) ? 0 : (__n > 7) ? 7 : __n; })
>> +/* invert fox MAX so that default = 0 -> infinity */
>> +#define MAX_PARENTS(m) ({ unsigned int __n = (m); (__n < 0) ? 7 : (__n > 7) ? 0 : 7 - __n;})
>
> Statement expressions don't work in most non-gcc compilers (but
> inline functions do).
>
> Hope that helps,
> Jonathan
Yes, that would have helped, although I'm going for simple "unbounded"
int's in v2 without the need for those range enforcing macros/inlines.
Am I allowed to do
unsigned max_parent = -1;
to get "infinity for practical purposes" on all compilers?
Michael
next prev parent reply other threads:[~2011-03-21 9:26 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-17 11:33 [PATCH/RFD 0/2] revision.c: --merges, --no-merges and --merges-only Michael J Gruber
2011-03-17 11:33 ` [PATCH/RFD 1/2] revision.c: rename --merges to --merges-only Michael J Gruber
2011-03-17 11:33 ` [PATCH/RFD 2/2] revision.c: introduce --merges to undo --no-merges Michael J Gruber
2011-03-17 19:23 ` [PATCH/RFD 0/2] revision.c: --merges, --no-merges and --merges-only Junio C Hamano
2011-03-17 19:59 ` Jeff King
2011-03-18 7:56 ` Michael J Gruber
2011-03-18 8:22 ` Junio C Hamano
2011-03-18 8:41 ` Michael J Gruber
2011-03-18 8:56 ` Jeff King
2011-03-18 14:50 ` [PATCH 0/3] rev-list and friends: --min-parents, --max-parents Michael J Gruber
2011-03-18 14:50 ` [PATCH 1/3] revision.c: introduce --min-parents and --max-parents Michael J Gruber
2011-03-18 19:34 ` Jeff King
2011-03-21 7:31 ` Michael J Gruber
2011-03-18 20:48 ` Jonathan Nieder
2011-03-18 21:21 ` Junio C Hamano
2011-03-21 9:26 ` Michael J Gruber [this message]
2011-03-18 14:50 ` [PATCH 2/3] t6009: use test_commit() from test-lib.sh Michael J Gruber
2011-03-18 14:50 ` [PATCH 3/3] rev-list --min-parents,--max-parents: doc and test and completion Michael J Gruber
2011-03-18 19:48 ` Jeff King
2011-03-21 9:01 ` Michael J Gruber
2011-03-21 10:54 ` Jeff King
2011-03-21 12:06 ` Michael J Gruber
2011-03-21 14:54 ` Junio C Hamano
2011-03-21 14:56 ` Michael J Gruber
2011-03-21 16:47 ` Junio C Hamano
2011-03-18 21:14 ` Jonathan Nieder
2011-03-21 8:52 ` Michael J Gruber
2011-03-21 17:49 ` Jonathan Nieder
2011-03-22 7:38 ` Michael J Gruber
2011-03-18 14:54 ` [PATCH 0/3] rev-list and friends: --min-parents, --max-parents Michael J Gruber
2011-03-18 19:41 ` Jeff King
2011-03-21 7:42 ` Michael J Gruber
2011-03-21 10:14 ` [PATCHv2 " Michael J Gruber
2011-03-21 10:14 ` [PATCHv2 1/3] t6009: use test_commit() from test-lib.sh Michael J Gruber
2011-03-21 10:14 ` [PATCHv2 2/3] revision.c: introduce --min-parents and --max-parents Michael J Gruber
2011-03-21 14:04 ` Michael J Gruber
2011-03-21 17:45 ` Junio C Hamano
2011-03-21 17:58 ` Jonathan Nieder
2011-03-21 10:14 ` [PATCHv2 3/3] rev-list --min-parents,--max-parents: doc and test and completion Michael J Gruber
2011-03-21 18:45 ` Jonathan Nieder
2011-03-22 7:55 ` Michael J Gruber
2011-03-23 0:47 ` Jonathan Nieder
2011-03-21 10:56 ` [PATCHv2 0/3] rev-list and friends: --min-parents, --max-parents Jeff King
2011-03-23 9:38 ` [PATCHv3 0/5]rev-list " Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 1/5] t6009: use test_commit() from test-lib.sh Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 2/5] revision.c: introduce --min-parents and --max-parents Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 3/5] squash! " Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 4/5] rev-list --min-parents,--max-parents: doc, test and completion Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 5/5] fixup! " Michael J Gruber
2011-03-23 14:48 ` [PATCHv3 0/5]rev-list and friends: --min-parents, --max-parents Jeff King
2011-03-23 17:12 ` Junio C Hamano
2011-03-23 18:06 ` Junio C Hamano
2011-03-24 8:21 ` Jonathan Nieder
2011-03-24 8:55 ` Michael J Gruber
2011-03-24 9:42 ` Jonathan Nieder
2011-08-08 1:13 ` [PATCH/RFC 0/2] test_when_finished and returning early Jonathan Nieder
2011-08-08 1:15 ` [PATCH 1/2] test: simplify return value of test_run_ Jonathan Nieder
2011-08-08 1:17 ` [PATCH 2/2] test: cope better with use of return for errors Jonathan Nieder
2011-08-09 8:46 ` Johannes Sixt
2011-08-09 15:36 ` Jeff King
2011-08-11 7:05 ` [PATCH v2] t3900: do not reference numbered arguments from the test script Johannes Sixt
2011-08-11 7:11 ` Jonathan Nieder
2011-08-11 21:49 ` Junio C Hamano
2011-08-08 1:26 ` [PATCH/RFC 0/2] test_when_finished and returning early Jeff King
2011-03-18 9:07 ` [PATCH/RFD 0/2] revision.c: --merges, --no-merges and --merges-only Jeff King
2011-03-18 9:42 ` Michael J Gruber
2011-03-18 9:54 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D8719C7.7020905@drmicha.warpmail.net \
--to=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.