Re: [PATCH 14/22] sequencer: prepare for rebase -i's commit functionality
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Aug 30, 2016, 06:53 UTC
- Message-ID
- <alpine.DEB.2.20.1608300836030.129229@virtualbox>
- In-Reply-To
- <xmqq8tvf8dmz.fsf@gitster.mtv.corp.google.com>
Hi Junio,
On Mon, 29 Aug 2016, Junio C Hamano wrote:
Show 6 quoted lines
> Johannes Schindelin <johannes.schindelin@gmx.de> writes: > > > +/* We will introduce the 'interactive rebase' mode later */ > > +#define IS_REBASE_I() 0 > > I do not see a point in naming this all caps.
Old habit. Macros are all-caps.
> The use site would be a lot more pleasant to read when the reader does > not have to care if this is implemented as a preprocessor macro or a > helper function.
I converted this to a helper function.
Show 26 quoted lines
> > @@ -377,20 +387,72 @@ static int is_index_unchanged(void)
> > return !hashcmp(active_cache_tree->sha1, head_commit->tree->object.oid.hash);
> > }
> >
> > +static char **read_author_script(void)
> > +{
> > + struct strbuf script = STRBUF_INIT;
> > + int i, count = 0;
> > + char *p, *p2, **env;
> > + size_t env_size;
> > +
> > + if (strbuf_read_file(&script, rebase_path_author_script(), 256) <= 0)
> > + return NULL;
> > +
> > + for (p = script.buf; *p; p++)
> > + if (skip_prefix(p, "'\\\\''", (const char **)&p2))
> > + strbuf_splice(&script, p - script.buf, p2 - p, "'", 1);
> > + else if (*p == '\'')
> > + strbuf_splice(&script, p-- - script.buf, 1, "", 0);
> > + else if (*p == '\n') {
> > + *p = '\0';
> > + count++;
> > + }
>
> Hmph. What is this loop doing? Is it decoding a sq-quoted buffer
> or something? Don't we have a helper function to do that?Well, it is not just decoding an sq-quoted buffer, but several lines with definitions we sq-quoted ourselves, individually.
The quote.[ch] code currently has no code to dequote lines individually.
At this point, I would prefer to keep this code as-is, as I tested it over the course of months and do not want to introduce regressions *now*.
Show 32 quoted lines
> > + env_size = (count + 1) * sizeof(*env);
> > + strbuf_grow(&script, env_size);
> > + memmove(script.buf + env_size, script.buf, script.len);
> > + p = script.buf + env_size;
> > + env = (char **)strbuf_detach(&script, NULL);
> > +
> > + for (i = 0; i < count; i++) {
> > + env[i] = p;
> > + p += strlen(p) + 1;
> > + }
> > + env[count] = NULL;
> > +
> > + return env;
> > +}
> > +
> > /*
> > * If we are cherry-pick, and if the merge did not result in
> > * hand-editing, we will hit this commit and inherit the original
> > * author date and name.
> > * If we are revert, or if our cherry-pick results in a hand merge,
> > - * we had better say that the current user is responsible for that.
> > + * we had better say that the current user is responsible for that
> > + * (except, of course, while running an interactive rebase).
> > */
>
> The added "(except, ...)" reads as if "even if we are reverting, if
> that is done as part of an interactive rebase, the authorship rule
> for a revert does not apply".
>
> If that is not what you meant, i.e. if you did not mean to imply
> that "rebase -i" doing a revert is a normal thing, this needs to be
> rephrased to avoid the misinterpretation.I rephrased it.
Ciao, Dscho