Download raw body.
got_patch_progress_cb: handle offsets and errors too
On Thu, Mar 17, 2022 at 03:43:48PM +0100, Omar Polo wrote:
> Stefan Sperling <stsp@stsp.name> wrote:
> > > static const struct got_error *
> > > -patch_progress(void *arg, const char *old, const char *new, unsigned char mode)
> > > +patch_progress(void *arg, const char *old, const char *new,
> > > + unsigned char mode, struct got_hunk *hunks, size_t n,
> > > + const struct got_error *error)
> > > {
> > > const char *path = new == NULL ? old : new;
> > > + size_t i;
> > >
> > > while (*path == '/')
> > > path++;
> > > printf("%c %s\n", mode, path);
> > > +
> > > + if (error != NULL)
> > > + fprintf(stderr, "%s: %s\n", getprogname(), error->msg);
> > > +
> > > + for (i = 0; i < n; ++i) {
> > > + printf("@@ -%ld,%ld +%ld,%ld @@ ", hunks[i].old_from,
> > > + hunks[i].old_lines, hunks[i].new_from, hunks[i].new_lines);
> > > + if (hunks[i].error != NULL)
> > > + printf("%s\n", hunks[i].error->msg);
> > > + else
> > > + printf("applied with offset %ld\n", hunks[i].offset);
> > > + }
> >
> > If the progress() function of lib/patch.c was looping over hunks and
> > called the patch_progress() with information about each hunk separately,
> > you could save yourself the trouble of allocating a temporary array.
> > This patch_progress() function could simply check which arguments
> > are valid (non-NULL, non-zero), and print them if so.
>
> I tried to allocate and copy the hunks as per original suggestion and to
> avoid passing a lot of arguments to the callback. i prefer to avoid the
> extra allocation too and in the updated diff below I'm doing as you
> suggest (that is passing the hunk info as parameters to the function and
> calling it in a loop)
>
> > > @@ -462,6 +468,9 @@ patch_file(struct got_patch *p, const char *path, FILE
> > > if (err != NULL)
> > > goto done;
> > >
> > > + if (lineno+1 != h->old_from)
> > > + h->offset = lineno+1 - h->old_from;
> >
> > Spaces around operators with two operands, please: lineno + 1
>
> wops, i forget about it. Fixed.
>
> (there are some other instances of `foo+1' in the code, i'll get rid of
> them in a follow-up commit)
>
> > > static const struct got_error *
> > > +progress(struct patch_args *pa, const char *old, const char *new,
> >
> > I think report_progress() would be a better name for this function.
>
> agreed!
>
Thanks, I like it much better!
ok stsp@
(small nit: rename 'mode' to 'status' in patch_progress)
got_patch_progress_cb: handle offsets and errors too