Subject: Re: [PATCH/WIP v3 07/31] am: extract patch, message and authorship with git-mailinfo

From: Junio C Hamano <[email-masked]>
Date: Wed, 24 Jun 2015 08:59:39 -0700

Paul Tan <[email-masked]> writes:

> 3. I'm over-thinking this and you just want the "struct strbufs" in the
>    struct am_state to be switched to "char*"s?

Yes, everybody interacts with am_state, and these fields are
supposed to be constant during the processing of each patch input
message; they should be simple strings, not strbufs, to make sure if
anybody _does_ muck with them in-place, that would be very visible.
The helpers to initialize them are free to use strbuf API to prepare
these simple string fields, of course.

> (On a somewhat related thought, currently we do write_file() all over
> the place, which is really ugly. I'm leaning heavily on introducing an
> am_save() function, for "I don't care how it is done but just update the
> contents of the am state directory so that it matches the contents of
> the struct am_state".

Sure; the scripted Porcelain may have done "echo here, echo there"
instead of "concatenate into a $var and then 'echo $var' at end" as
that is more natural way to program in that environment.  You are
doing this in C and "prepare the thing in-core and write it all at
the point to snapshot" may well be the more natural way to program.

As long as a process that stops in the middle does not leave on-disk
state inconsistent, batching would be fine.  For example, you may
apply and commit two (or more) patches without updating the on-disk
state as you do not see need to give control back to the user
(i.e. they applied cleanly) and then write out the on-disk state
with .next incremented by two (or more) before giving the control
back could be a valid optimization (take this example with a grain
of salt, though; I haven't thought too deeply about what should
happen if you Ctrl-C the process in the middle).