Re: [PATCH v7 7/7] list-objects-filter: implement filter tree:0
- From
Matthew DeVore <matvore@google.com>
- Date
- Sep 6, 2018, 00:08 UTC
- Message-ID
- <CAMfpvh+m88Qb9mAPXuVMAhuUiUdzzEzFDLZ+ee6-OtxFHf4g_g@mail.gmail.com>
- In-Reply-To
- <xmqqwos16li9.fsf@gitster-ct.c.googlers.com>
On Tue, Sep 4, 2018 at 1:44 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 28 quoted lines
>
> Matthew DeVore <matvore@google.com> writes:
>
> > @@ -50,6 +50,10 @@ static int gently_parse_list_objects_filter(
> > return 0;
> > }
> >
> > + } else if (!strcmp(arg, "tree:0")) {
> > + filter_options->choice = LOFC_TREE_NONE;
> > + return 0;
> > +
>
> This is not wrong per-se, but I would have expected to see something
> like:
>
> ... else if (skip_prefix(arg, "tree:", ¶m)) {
> unsigned long depth;
> if (!git_parse_ulong(param, &depth) || depth != 0) {
> err = "only 'tree:0' is supported";
> return -1;
> }
> filter_options->choice = LOFC_TREE_NONE;
> return 0;
>
> so that "tree:1" is rejected not with "invalid filter-spec" but a
> bit more descriptive "only tree:0 is". Accepting "tree:00" or
> "tree:0k" is merely an added bogus^wbonus.
>Good idea. An interdiff for my fix is below. I didn't add a test, since adding a shell test for every trivial error doesn't seem to scale, but let me know if you disagree. I did of course try provoking the error manually.
diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c index a28382940..14f251de4 100644 --- a/list-objects-filter-options.c +++ b/list-objects-filter-options.c @@ -50,7 +50,17 @@ static int gently_parse_list_objects_filter( return 0; } - } else if (!strcmp(arg, "tree:0")) { + } else if (skip_prefix(arg, "tree:", &v0)) { + unsigned long depth; + if (!git_parse_ulong(v0, &depth) || depth != 0) { + if (errbuf) { + strbuf_init(errbuf, 0); + strbuf_addstr( + errbuf, + _("only 'tree:0' is supported")); + } + return 1; + } filter_options->choice = LOFC_TREE_NONE; return 0;