On Tue, Sep 4, 2018 at 1:44 PM Junio C Hamano <gits...@pobox.com> wrote:
>
> Matthew DeVore <matv...@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:", &param)) {
>                 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;

Reply via email to