Hi Kuba, On Wed, 31 Aug 2016, Jakub Narębski wrote: > W dniu 29.08.2016 o 10:06, Johannes Schindelin pisze: > > > The rebase command sports a `--gpg-sign` option that is heeded by the > > interactive rebase. > > Should it be "sports" or "supports"? Funny. I got a PR last week that wanted to fix a similar expression. I really meant "to sport", as in "To display; to have as a notable feature.". See https://en.wiktionary.org/wiki/sport#Verb > > +static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt") > > I know it is not your fault, but I wonder why this file uses > snake_case_name, while all other use kebab-case-names. That is, > why it is gpg_sign_opt and not gpg-sign-opt. Yes, you are correct: it is not my fault ;-) > Sidenote: it's a pity api-quote.txt is just a placeholder for proper > documentation (including sq_quotef()). I also wonder why it is not > named sq_quotef_buf() or strbuf_addf_sq(). Heh. I did not even bother to check the documentation, it is my long-time habit to dive right into the code. > > @@ -471,17 +487,20 @@ int sequencer_commit(const char *defmsg, struct replay_opts *opts, > > > > if (IS_REBASE_I()) { > > env = read_author_script(); > > - if (!env) > > + if (!env) { > > + const char *gpg_opt = gpg_sign_opt_quoted(opts); > > + > > return error("You have staged changes in your working " > > "tree. If these changes are meant to be\n" > > "squashed into the previous commit, run:\n\n" > > - " git commit --amend $gpg_sign_opt_quoted\n\n" > > How did this get expanded by error(), and why we want to replace > it if it works? It did not work. It was a place-holder waiting for this patch ;-) > > > + " git commit --amend %s\n\n" > > "If they are meant to go into a new commit, " > > "run:\n\n" > > - " git commit $gpg_sign_opt_quoted\n\n" > > + " git commit %s\n\n" > > "In both case, once you're done, continue " > > "with:\n\n" > > - " git rebase --continue\n"); > > + " git rebase --continue\n", gpg_opt, gpg_opt); > > Instead of passing option twice, why not make use of %1$s (arg reordering), > that is > > + " git commit --amend %1$s\n\n" > [...] > + " git commit %1$s\n\n" Cute. But would this not drive the l10ners insane? > So shell quoting is required only for error output. Indeed. > > @@ -955,8 +974,27 @@ static int populate_opts_cb(const char *key, const char *value, void *data) > > > > static int read_populate_opts(struct replay_opts *opts) > > { > > - if (IS_REBASE_I()) > > + if (IS_REBASE_I()) { > > + struct strbuf buf = STRBUF_INIT; > > + > > + if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) { > > + if (buf.len && buf.buf[buf.len - 1] == '\n') { > > + if (--buf.len && > > + buf.buf[buf.len - 1] == '\r') > > + buf.len--; > > + buf.buf[buf.len] = '\0'; > > + } > > Isn't there some strbuf_chomp() / strbuf_strip_eof() function? > Though as strbuf_getline() uses something similar... Even worse. read_oneliner() *already* does that. I just forgot to delete this code when I introduced and used read_oneliner(). Thanks. > > + if (!starts_with(buf.buf, "-S")) > > + strbuf_reset(&buf); > > Should we signal that there was problem with a file contents? Maybe. But probably not: this file is written by git-rebase itself. I merely safe-guarded against empty files here. > > + else { > > + opts->gpg_sign = buf.buf + 2; > > + strbuf_detach(&buf, NULL); > > Wouldn't we leak 2 characters that got skipped? Maybe xstrdup would > be better (if it is leaked, and not reattached)? We do not leak anything because I changed the code locally already to use sequencer_entrust() (I guess in response to an earlier of your comments). Ciao, Dscho