git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 5/5] ref-filter: get_ref_atom_value() error handling

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Mar 20, 2018, 18:19 UTC
Message-ID
<CAPig+cSxGgG=1k95j+n4DZHBdtN++7F6_U5fu0gOcjwwPQ5GZw@mail.gmail.com>
In-Reply-To
<010201624428199f-b4b3d8ce-222f-4966-9171-7fcf932ca220-000000@eu-west-1.amazonses.com>

On Tue, Mar 20, 2018 at 12:05 PM, Olga Telezhnaya <olyatelezhnaya@gmail.com> wrote:

> ref-filter: get_ref_atom_value() error handling

This doesn't tell us much about what this patch is doing. Perhaps a better subject would be:

    ref-filter: libify get_ref_atom_value()
Show 29 quoted lines
> Finish removing die() calls from ref-filter formatting logic,
> so that it could be used by other commands.
>
> Change the signature of get_ref_atom_value() and underlying functions
> by adding return value and strbuf parameter for error message.
> Return value equals 0 upon success and -1 upon failure (there
> could be more error codes further if necessary).
> Upon failure, error message is appended to the strbuf.
>
> Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
> ---
> diff --git a/ref-filter.c b/ref-filter.c
> @@ -1445,28 +1445,36 @@ static const char *get_refname(struct used_atom *atom, struct ref_array_item *re
> +static int get_object(struct ref_array_item *ref, const struct object_id *oid,
> +                      int deref, struct object **obj, struct strbuf *err)
>  {
>         void *buf = get_obj(oid, obj, &size, &eaten);
> -       if (!buf)
> -               die(_("missing object %s for %s"),
> -                   oid_to_hex(oid), ref->refname);
> -       if (!*obj)
> -               die(_("parse_object_buffer failed on %s for %s"),
> -                   oid_to_hex(oid), ref->refname);
> -
> +       if (!buf) {
> +               strbuf_addf(err, _("missing object %s for %s"), oid_to_hex(oid),
> +                           ref->refname);
> +               if (!eaten)
> +                       free(buf);

Since we are inside the 'if (!buf)' conditional, we _know_ that 'buf' is NULL, therefore this free(buff) is unnecessary.

Show 14 quoted lines
> +               return -1;
> +       }
> +       if (!*obj) {
> +               strbuf_addf(err, _("parse_object_buffer failed on %s for %s"),
> +                           oid_to_hex(oid), ref->refname);
> +               if (!eaten)
> +                       free(buf);
> +               return -1;
> +       }
>         grab_values(ref->value, deref, *obj, buf, size);
>         if (!eaten)
>                 free(buf);
> +       return 0;
>  }

Overall, with the need for resource cleanup, this function becomes unusually noisy after this change. It could be tamed by doing something like this:

    int ret = 0;
    void *buf = get_obj(oid, obj, &size, &eaten);
    if (!buf)
        ret = strbuf_error(_("missing object %s for %s"),
            oid_to_hex(oid), ref->refname);
    else if (!*obj)
        ret = strbuf_error(_("parse_object_buffer failed on %s for %s"),
            oid_to_hex(oid), ref->refname);
    else
        grab_values(ref->value, deref, *obj, buf, size);
   if (!eaten)
        free(buf);
    return ret;
Previous: Olga TelezhnayaNext: Junio C Hamano
Message 22 of 30 in “ref-filter: start adding strbufs with errors”
  1. 1/5 ref-filter: start adding strbufs with errorsOlga Telezhnaya, Mar 14, 2018
  2. 5/5 ref-filter: get_ref_atom_value() error handlingOlga Telezhnaya, Mar 14, 2018
  3. Martin ÅgrenMar 15, 2018
  4. Eric SunshineMar 15, 2018
  5. Оля ТележнаяMar 16, 2018
  6. Junio C HamanoMar 15, 2018
  7. Оля ТележнаяMar 16, 2018
  8. 3/5 ref-filter: change parsing function error handlingOlga Telezhnaya, Mar 14, 2018
  9. Junio C HamanoMar 15, 2018
  10. Оля ТележнаяMar 16, 2018
  11. 4/5 ref-filter: add return value to parsersOlga Telezhnaya, Mar 14, 2018
  12. 2/5 ref-filter: add return value && strbuf to handlersOlga Telezhnaya, Mar 14, 2018
  13. 1/5 ref-filter: start adding strbufs with errorsOlga Telezhnaya, Mar 19, 2018
  14. 3/5 ref-filter: change parsing function error handlingOlga Telezhnaya, Mar 19, 2018
  15. Junio C HamanoMar 19, 2018
  16. 5/5 ref-filter: get_ref_atom_value() error handlingOlga Telezhnaya, Mar 19, 2018
  17. 2/5 ref-filter: add return value && strbuf to handlersOlga Telezhnaya, Mar 19, 2018
  18. Junio C HamanoMar 19, 2018
  19. 4/5 ref-filter: add return value to parsersOlga Telezhnaya, Mar 19, 2018
  20. 1/5 ref-filter: start adding strbufs with errorsOlga Telezhnaya, Mar 20, 2018
  21. 5/5 ref-filter: get_ref_atom_value() error handlingOlga Telezhnaya, Mar 20, 2018
  22. Eric SunshineMar 20, 2018
  23. Junio C HamanoMar 20, 2018
  24. Eric SunshineMar 20, 2018
  25. Junio C HamanoMar 21, 2018
  26. Eric SunshineMar 21, 2018
  27. 3/5 ref-filter: change parsing function error handlingOlga Telezhnaya, Mar 20, 2018
  28. 2/5 ref-filter: add return value && strbuf to handlersOlga Telezhnaya, Mar 20, 2018
  29. Eric SunshineMar 20, 2018
  30. 4/5 ref-filter: add return value to parsersOlga Telezhnaya, Mar 20, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.