sequencer: make read_oneliner() accept flags

In a future commit, we will need read_oneliner() to accept flags other
than just `skip_if_empty`. Instead of having an argument for each flag,
teach read_oneliner() to accept the bitfield `flags` instead. For now,
only recognize the `READ_ONELINER_SKIP_IF_EMPTY` flag. More flags will
be added in a future commit.

The result of this is that parallel topics which introduce invocations
of read_oneliner() will still be compatible with this new function
signature since, instead of passing 1 or 0 for `skip_if_empty`, they'll
be passing 1 or 0 to `flags`, which gives equivalent behavior.

Mechanically fix up invocations of read_oneliner() with the following
spatch

	@@
	expression a, b;
	@@
	  read_oneliner(a, b,
	- 1
	+ READ_ONELINER_SKIP_IF_EMPTY
	  )

and manually break up long lines in the result.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Denton Liu 2020-04-07 10:27:52 -04:00 committed by Junio C Hamano
parent 5b2f6d9cd5
commit 3442c3d11d
1 changed files with 14 additions and 7 deletions

View File

@ -419,6 +419,8 @@ static int write_message(const void *buf, size_t len, const char *filename,
return 0; return 0;
} }


#define READ_ONELINER_SKIP_IF_EMPTY (1 << 0)

/* /*
* Reads a file that was presumably written by a shell script, i.e. with an * Reads a file that was presumably written by a shell script, i.e. with an
* end-of-line marker that needs to be stripped. * end-of-line marker that needs to be stripped.
@ -429,7 +431,7 @@ static int write_message(const void *buf, size_t len, const char *filename,
* Returns 1 if the file was read, 0 if it could not be read or does not exist. * Returns 1 if the file was read, 0 if it could not be read or does not exist.
*/ */
static int read_oneliner(struct strbuf *buf, static int read_oneliner(struct strbuf *buf,
const char *path, int skip_if_empty) const char *path, unsigned flags)
{ {
int orig_len = buf->len; int orig_len = buf->len;


@ -445,7 +447,7 @@ static int read_oneliner(struct strbuf *buf,
buf->buf[buf->len] = '\0'; buf->buf[buf->len] = '\0';
} }


if (skip_if_empty && buf->len == orig_len) if ((flags & READ_ONELINER_SKIP_IF_EMPTY) && buf->len == orig_len)
return 0; return 0;


return 1; return 1;
@ -2485,7 +2487,8 @@ static int read_populate_opts(struct replay_opts *opts)
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
int ret = 0; int ret = 0;


if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) { if (read_oneliner(&buf, rebase_path_gpg_sign_opt(),
READ_ONELINER_SKIP_IF_EMPTY)) {
if (!starts_with(buf.buf, "-S")) if (!starts_with(buf.buf, "-S"))
strbuf_reset(&buf); strbuf_reset(&buf);
else { else {
@ -2495,7 +2498,8 @@ static int read_populate_opts(struct replay_opts *opts)
strbuf_reset(&buf); strbuf_reset(&buf);
} }


if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) { if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(),
READ_ONELINER_SKIP_IF_EMPTY)) {
if (!strcmp(buf.buf, "--rerere-autoupdate")) if (!strcmp(buf.buf, "--rerere-autoupdate"))
opts->allow_rerere_auto = RERERE_AUTOUPDATE; opts->allow_rerere_auto = RERERE_AUTOUPDATE;
else if (!strcmp(buf.buf, "--no-rerere-autoupdate")) else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
@ -2527,7 +2531,8 @@ static int read_populate_opts(struct replay_opts *opts)
strbuf_reset(&buf); strbuf_reset(&buf);


if (read_oneliner(&opts->current_fixups, if (read_oneliner(&opts->current_fixups,
rebase_path_current_fixups(), 1)) { rebase_path_current_fixups(),
READ_ONELINER_SKIP_IF_EMPTY)) {
const char *p = opts->current_fixups.buf; const char *p = opts->current_fixups.buf;
opts->current_fixup_count = 1; opts->current_fixup_count = 1;
while ((p = strchr(p, '\n'))) { while ((p = strchr(p, '\n'))) {
@ -3668,7 +3673,8 @@ static int apply_autostash(struct replay_opts *opts)
struct child_process child = CHILD_PROCESS_INIT; struct child_process child = CHILD_PROCESS_INIT;
int ret = 0; int ret = 0;


if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) { if (!read_oneliner(&stash_sha1, rebase_path_autostash(),
READ_ONELINER_SKIP_IF_EMPTY)) {
strbuf_release(&stash_sha1); strbuf_release(&stash_sha1);
return 0; return 0;
} }
@ -4292,7 +4298,8 @@ int sequencer_continue(struct repository *r, struct replay_opts *opts)
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
struct object_id oid; struct object_id oid;


if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) && if (read_oneliner(&buf, rebase_path_stopped_sha(),
READ_ONELINER_SKIP_IF_EMPTY) &&
!get_oid_committish(buf.buf, &oid)) !get_oid_committish(buf.buf, &oid))
record_in_rewritten(&oid, peek_command(&todo_list, 0)); record_in_rewritten(&oid, peek_command(&todo_list, 0));
strbuf_release(&buf); strbuf_release(&buf);