Hi Junio,

Le 22/06/2018 à 00:03, Junio C Hamano a écrit :
> Alban Gruin <alban.gr...@gmail.com> writes:
> > This adds a new function, run_command_silent_on_success(), to
> > redirect the stdout and stderr of a command to a strbuf, and then to run
> > that command. This strbuf is printed only if the command fails. It is
> > functionnaly similar to output() from git-rebase.sh.
> > 
> > run_git_commit() is then refactored to use of
> > run_command_silent_on_success().
> 
> It might be just a difference in viewpoint, but I think it is more
> customary in this project (hence it will be easier to understand and
> accept by readers of the patch) if a change like this is explained
> NOT as "introducing a new function and then rewrite an existing code
> to use it", and instead as "extract a helper function from an
> existing code so that future callers can reuse it."
> 

I like your wording.  It’s not a difference of point of view, I’m just bad at 
writing commit messages ;)

> > +static int run_command_silent_on_success(struct child_process *cmd)
> > +{
> > +   struct strbuf buf = STRBUF_INIT;
> > +   int rc;
> > +
> > +   cmd->stdout_to_stderr = 1;
> > +   rc = pipe_command(cmd,
> > +                     NULL, 0,
> > +                     /* stdout is already redirected */
> 
> I can see that this comment was inherited from the original place
> this code was lifted from (and that is why I say this is not "adding
> a new helper and rewriting an existing piece of code to use it" but
> is "extracting this function out of an existing code for future
> reuse"), but does it still make sense in the new context to keep the
> same comment?
> 
> The original in run_git_commit() made the .stdout_to_stderr=1
> assignment many lines before it called pipe_command(), and it made
> sense to remind readers why we are passing NULL to the out buffer
> and only passing the err buffer here.  But in the context of this
> new helper function, the redirection that may make such a reminder
> necessary sits immediately before the pipe_command() call for
> everybody to see.
> 

Yeah, you’re right.

> > @@ -861,20 +872,8 @@ static int run_git_commit(const char *defmsg, struct
> > replay_opts *opts,> 
> >     if (opts->allow_empty_message)
> >     
> >             argv_array_push(&cmd.args, "--allow-empty-message");
> > 
> > -   if (cmd.err == -1) {
> > -           /* hide stderr on success */
> > -           struct strbuf buf = STRBUF_INIT;
> > -           int rc = pipe_command(&cmd,
> > -                                 NULL, 0,
> > -                                 /* stdout is already redirected */
> > -                                 NULL, 0,
> > -                                 &buf, 0);
> > -           if (rc)
> > -                   fputs(buf.buf, stderr);
> > -           strbuf_release(&buf);
> > -           return rc;
> > -   }
> > -
> > +   if (is_rebase_i(opts) && !(flags & EDIT_MSG))
> > +           return run_command_silent_on_success(&cmd);
> > 
> >     return run_command(&cmd);
> >  
> >  }
> 
> It probably is easier to understand the code if you added
> an "else" after, to highlight the fact that this is choosing one out
> of two possible ways to run "cmd", i.e.
> 
>       if (is_rebase_i(opts) && !(flags & EDIT_MSG))
>               return run_command_silent_on_success(&cmd);
>       else
>               return run_command(&cmd);

Okay.

Cheers,
Alban




Reply via email to