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

Reply via email to