Hi René,
On Sat, 6 May 2017, René Scharfe wrote:
> Am 04.05.2017 um 12:59 schrieb Johannes Schindelin:
>
> > diff --git a/wt-status.c b/wt-status.c
> > index 1f3f6bcb980..117ac8cfb01 100644
> > --- a/wt-status.c
> > +++ b/wt-status.c
> > @@ -1082,34 +1082,29 @@ static char *read_line_from_git_path(const char
> > *filename)
> > static int split_commit_in_progress(struct wt_status *s)
> > {
> > int split_in_progress = 0;
> > - char *head = read_line_from_git_path("HEAD");
> > - char *orig_head = read_line_from_git_path("ORIG_HEAD");
> > - char *rebase_amend = read_line_from_git_path("rebase-merge/amend");
> > - char *rebase_orig_head =
> > read_line_from_git_path("rebase-merge/orig-head");
> > -
> > - if (!head || !orig_head || !rebase_amend || !rebase_orig_head ||
> > - !s->branch || strcmp(s->branch, "HEAD")) {
> > - free(head);
> > - free(orig_head);
> > - free(rebase_amend);
> > - free(rebase_orig_head);
> > - return split_in_progress;
> > - }
> > -
> > - if (!strcmp(rebase_amend, rebase_orig_head)) {
> > - if (strcmp(head, rebase_amend))
> > - split_in_progress = 1;
> > - } else if (strcmp(orig_head, rebase_orig_head)) {
> > - split_in_progress = 1;
> > - }
> > + char *head, *orig_head, *rebase_amend, *rebase_orig_head;
> > +
> > + if ((!s->amend && !s->nowarn && !s->workdir_dirty) ||
> > + !s->branch || strcmp(s->branch, "HEAD"))
> > + return 0;
> > - if (!s->amend && !s->nowarn && !s->workdir_dirty)
> > - split_in_progress = 0;
> > + head = read_line_from_git_path("HEAD");
> > + orig_head = read_line_from_git_path("ORIG_HEAD");
> > + rebase_amend = read_line_from_git_path("rebase-merge/amend");
> > + rebase_orig_head = read_line_from_git_path("rebase-merge/orig-head");
>
> Further improvement idea (for a later series): Use rebase_path_amend()
> and rebase_path_orig_head() somehow, to build each path only once.
>
> Accessing the files HEAD and ORIG_HEAD directly seems odd.
>
> The second part of the function should probably be moved to sequencer.c.
Sure. On all four accounts.
> > +
> > + if (!head || !orig_head || !rebase_amend || !rebase_orig_head)
> > + ; /* fall through, no split in progress */
>
> You could set split_in_progress to zero here. Would save a comment
> without losing readability.
But that would confuse e.g. myself, 6 months down the road: why assign
that variable when it already has been assigned? (And we have to assign it
because there is still a code path entering none of these if/else if's
arms).
> > + else if (!strcmp(rebase_amend, rebase_orig_head))
> > + split_in_progress = !!strcmp(head, rebase_amend);
> > + else if (strcmp(orig_head, rebase_orig_head))
> > + split_in_progress = 1;
> >
> > free(head);
> > free(orig_head);
> > free(rebase_amend);
> > free(rebase_orig_head);
> > +
>
> Isn't the patch big enough already without rearranging the else blocks
> and adding that blank line? :)
The else blocks are not really rearranged; apart from the early return,
the rest of the logic has been painstakingly kept in the same order.
Ciao,
Dscho