From: Denton Liu <liu.denton@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: [PATCH v3 06/10] diff-lib: define diff_get_merge_base()
Date: Fri, 18 Sep 2020 03:34:00 -0700 [thread overview]
Message-ID: <20200918103400.GA1874074@generichostname> (raw)
In-Reply-To: <xmqqd02ks4qk.fsf@gitster.c.googlers.com>
Hi Junio,
On Thu, Sep 17, 2020 at 10:16:51AM -0700, Junio C Hamano wrote:
> Denton Liu <liu.denton@gmail.com> writes:
>
> > +void diff_get_merge_base(const struct rev_info *revs, struct object_id *mb)
> > +{
> > + int i;
> > + struct commit *mb_child[2] = {0};
> > + struct commit_list *merge_bases;
> > +
> > + for (i = 0; i < revs->pending.nr; i++) {
> > + struct object *obj = revs->pending.objects[i].item;
> > + if (obj->flags)
> > + die(_("--merge-base does not work with ranges"));
> > + if (obj->type != OBJ_COMMIT)
> > + die(_("--merge-base only works with commits"));
> > + }
>
> This is the first use of die() in this file, that is designed to
> keep a set of reusable library functions so that the caller(s) can
> do their own die(). They may want to become
Although this is the first instance of die(), run_diff_index() has an
exit(128), which is basically a die() in disguise.
> return error(_(...));
>
> The same comment applies to all die()s the patch adds.
I applied this change but then each callsite of diff_get_merge_base()
became something like
if (diff_get_merge_base(revs, &oid))
exit(128);
so I do agree with the spirit of the change but in reality, it just
creates more busywork for the callers.
> > + /*
> > + * This check must go after the for loop above because A...B
> > + * ranges produce three pending commits, resulting in a
> > + * misleading error message.
> > + */
>
> Should "git diff --merge-base A...B" be forbidden, or does it just
> ask the same thing twice and is not a die-worthy offence?
I think that it should be die-worthy because it's a logic error for a
user to do this. I can't think of any situation where it wouldn't be
more desirable error early to correct a user's thinking. Plus, we're
trying to move away from the `...` notation anyway ;)
> > + for (i = 0; i < revs->pending.nr; i++)
> > + mb_child[i] = lookup_commit_reference(the_repository, &revs->pending.objects[i].item->oid);
> > + if (revs->pending.nr < ARRAY_SIZE(mb_child)) {
> > + struct object_id oid;
> > +
> > + if (revs->pending.nr != 1)
> > + BUG("unexpected revs->pending.nr: %d", revs->pending.nr);
>
> This is an obviously impossible condition as we will not take more
> than 2.
We also want to ensure that revs->pending.nr isn't 0 here. That being
said, I can explicitly check earlier in the function that the number of
pending is 1 or 2 so that it's more clearly written.
Thanks,
Denton
next prev parent reply other threads:[~2020-09-18 10:34 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-05 19:08 [PATCH 0/4] builtin/diff: learn --merge-base Denton Liu
2020-09-05 19:08 ` [PATCH 1/4] t4068: remove unnecessary >tmp Denton Liu
2020-09-05 19:08 ` [PATCH 2/4] git-diff.txt: backtick quote command text Denton Liu
2020-09-05 19:08 ` [PATCH 3/4] builtin/diff: parse --no-index using parse_options() Denton Liu
2020-09-05 19:08 ` [PATCH 4/4] builtin/diff: learn --merge-base Denton Liu
2020-09-06 21:58 ` Junio C Hamano
2020-09-10 7:32 ` [PATCH v2 0/4] " Denton Liu
2020-09-10 7:32 ` [PATCH v2 1/4] t4068: remove unnecessary >tmp Denton Liu
2020-09-10 7:32 ` [PATCH v2 2/4] git-diff.txt: backtick quote command text Denton Liu
2020-09-10 7:32 ` [PATCH v2 3/4] builtin/diff: parse --no-index using parse_options() Denton Liu
2020-09-10 18:35 ` Junio C Hamano
2020-09-13 8:31 ` Denton Liu
2020-09-13 21:45 ` Junio C Hamano
2020-09-10 7:32 ` [PATCH v2 4/4] builtin/diff: learn --merge-base Denton Liu
2020-09-17 7:44 ` [PATCH v3 00/10] " Denton Liu
2020-09-17 7:44 ` [PATCH v3 01/10] t4068: remove unnecessary >tmp Denton Liu
2020-09-17 7:44 ` [PATCH v3 02/10] git-diff-index.txt: make --cached description a proper sentence Denton Liu
2020-09-17 7:44 ` [PATCH v3 03/10] git-diff.txt: backtick quote command text Denton Liu
2020-09-17 7:44 ` [PATCH v3 04/10] contrib/completion: extract common diff/difftool options Denton Liu
2020-09-17 7:44 ` [PATCH v3 05/10] diff-lib: accept option flags in run_diff_index() Denton Liu
2020-09-17 17:00 ` Junio C Hamano
2020-09-17 7:44 ` [PATCH v3 06/10] diff-lib: define diff_get_merge_base() Denton Liu
2020-09-17 17:16 ` Junio C Hamano
2020-09-18 10:34 ` Denton Liu [this message]
2020-09-19 0:33 ` Junio C Hamano
2020-09-17 7:44 ` [PATCH v3 07/10] t4068: add --merge-base tests Denton Liu
2020-09-17 7:44 ` [PATCH v3 08/10] builtin/diff-index: learn --merge-base Denton Liu
2020-09-17 17:28 ` Junio C Hamano
2020-09-17 18:13 ` Jeff King
2020-09-18 5:11 ` Junio C Hamano
2020-09-18 18:12 ` Jeff King
2020-09-17 7:44 ` [PATCH v3 09/10] builtin/diff-tree: " Denton Liu
2020-09-17 18:23 ` Junio C Hamano
2020-09-18 10:48 ` Denton Liu
2020-09-18 16:52 ` Junio C Hamano
2020-09-20 11:01 ` Denton Liu
2020-09-21 16:05 ` Junio C Hamano
2020-09-21 17:27 ` Denton Liu
2020-09-21 21:09 ` Junio C Hamano
2020-09-21 21:19 ` Junio C Hamano
2020-09-21 21:54 ` Denton Liu
2020-09-21 22:18 ` Junio C Hamano
2020-09-23 9:47 ` Denton Liu
2020-09-25 21:02 ` Junio C Hamano
2020-09-26 1:52 ` Denton Liu
2020-09-17 7:44 ` [PATCH v3 10/10] contrib/completion: complete `git diff --merge-base` Denton Liu
2020-09-20 11:22 ` [PATCH v4 00/10] builtin/diff: learn --merge-base Denton Liu
2020-09-20 11:22 ` [PATCH v4 01/10] t4068: remove unnecessary >tmp Denton Liu
2020-09-20 11:22 ` [PATCH v4 02/10] git-diff-index.txt: make --cached description a proper sentence Denton Liu
2020-09-20 11:22 ` [PATCH v4 03/10] git-diff.txt: backtick quote command text Denton Liu
2020-09-20 11:22 ` [PATCH v4 04/10] contrib/completion: extract common diff/difftool options Denton Liu
2020-09-20 11:22 ` [PATCH v4 05/10] diff-lib: accept option flags in run_diff_index() Denton Liu
2020-09-20 11:22 ` [PATCH v4 06/10] diff-lib: define diff_get_merge_base() Denton Liu
2020-09-20 11:22 ` [PATCH v4 07/10] t4068: add --merge-base tests Denton Liu
2020-09-20 11:22 ` [PATCH v4 08/10] builtin/diff-index: learn --merge-base Denton Liu
2020-09-29 19:53 ` Martin Ågren
2020-09-20 11:22 ` [PATCH v4 09/10] builtin/diff-tree: " Denton Liu
2020-09-20 11:22 ` [PATCH v4 10/10] contrib/completion: complete `git diff --merge-base` Denton Liu
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=20200918103400.GA1874074@generichostname \
--to=liu.denton@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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.