From: Tracey Emery Subject: Re: tog: show parent IDs for merge commits To: Stefan Sperling Cc: gameoftrees@openbsd.org Date: Fri, 24 Sep 2021 13:43:08 -0600 On Fri, Sep 24, 2021 at 02:00:18AM +0200, Stefan Sperling wrote: > This patch annotates merge commits shown in 'tog diff' with information > about the multiple parent commits. The 'got log' command already displays > parents of merge commits in the same way. > > ok? Ok. > > diff 0e5df9843b907e2f3bb8bae341f4ac0d5762346a /home/stsp/src/got > blob - cbf77a99b234b7a155644a3abe25adda577f1a8d > file + tog/tog.c > --- tog/tog.c > +++ tog/tog.c > @@ -3227,6 +3227,29 @@ write_commit_info(off_t **line_offsets, size_t *nlines > if (err) > goto done; > } > + if (got_object_commit_get_nparents(commit) > 1) { > + const struct got_object_id_queue *parent_ids; > + struct got_object_qid *qid; > + int pn = 1; > + parent_ids = got_object_commit_get_parent_ids(commit); > + STAILQ_FOREACH(qid, parent_ids, entry) { > + err = got_object_id_str(&id_str, qid->id); > + if (err) > + goto done; > + n = fprintf(outfile, "parent %d: %s\n", pn++, id_str); > + if (n < 0) { > + err = got_error_from_errno("fprintf"); > + goto done; > + } > + outoff += n; > + err = add_line_offset(line_offsets, nlines, outoff); > + if (err) > + goto done; > + free(id_str); > + id_str = NULL; > + } > + } > + > err = got_object_commit_get_logmsg(&logmsg, commit); > if (err) > goto done; > @@ -3528,8 +3551,8 @@ open_diff_view(struct tog_view *view, struct got_objec > } > > err = add_color(&s->colors, > - "^(commit [0-9a-f]|(blob|file) [-+] |[MDmA] [^ ])", > - TOG_COLOR_DIFF_META, > + "^(commit [0-9a-f]|parent [0-9]|(blob|file) [-+] |" > + "[MDmA] [^ ])", TOG_COLOR_DIFF_META, > get_color_value("TOG_COLOR_DIFF_META")); > if (err) { > free_colors(&s->colors); -- Tracey Emery