Subject: [PATCH v2] git: replace strbuf_addstr with strbuf_addch for all strings of length 2

From: "AreaZR via GitGitGadget" <[email-masked]>
Date: Wed, 18 Dec 2024 00:31:37 +0000

From: Seija Kijin <[email-masked]>

This helps reduce overhead of calculating the length

Signed-off-by: Seija Kijin <[email-masked]>
---
    git: replace strbuf_addstr with strbuf_addch for all strings of length 2
    
    This helps reduce overhead of calculating the length
    
    Signed-off-by: Seija Kijin [email-masked]

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1436%2FAreaZR%2Fstrbuf-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1436/AreaZR/strbuf-v2
Pull-Request: https://github.com/git/git/pull/1436

Range-diff vs v1:

 1:  8eed09a9df1 ! 1:  22c37ed6677 git: replace strbuf_addstr with strbuf_addch for all strings of length 2
     @@ Commit message
          Signed-off-by: Seija Kijin <[email-masked]>
      
       ## bisect.c ##
     -@@ bisect.c: static int register_ref(const char *refname, const struct object_id *oid,
     +@@ bisect.c: static int register_ref(const char *refname, const char *referent UNUSED, const
       {
       	struct strbuf good_prefix = STRBUF_INIT;
       	strbuf_addstr(&good_prefix, term_good);
     @@ bisect.c: static int register_ref(const char *refname, const struct object_id *o
      +	strbuf_addch(&good_prefix, '-');
       
       	if (!strcmp(refname, term_bad)) {
     - 		current_bad_oid = xmalloc(sizeof(*current_bad_oid));
     + 		free(current_bad_oid);
      
       ## builtin/am.c ##
      @@ builtin/am.c: static void write_author_script(const struct am_state *state)
     @@ protocol-caps.c: static void send_info(struct repository *r, struct packet_write
       				strbuf_addf(&send_buffer, " %lu", object_size);
       			}
      
     - ## reftable/readwrite_test.c ##
     -@@ reftable/readwrite_test.c: static void test_table_read_write_seek(int index, int hash_id)
     - 	}
     - 
     - 	strbuf_addstr(&pastLast, names[N - 1]);
     --	strbuf_addstr(&pastLast, "/");
     -+	strbuf_addch(&pastLast, '/');
     - 
     - 	err = reftable_reader_seek_ref(&rd, &it, pastLast.buf);
     - 	if (err == 0) {
     -
     - ## reftable/refname.c ##
     -@@ reftable/refname.c: int modification_validate(struct modification *mod)
     - 			goto done;
     - 		strbuf_reset(&slashed);
     - 		strbuf_addstr(&slashed, mod->add[i]);
     --		strbuf_addstr(&slashed, "/");
     -+		strbuf_addch(&slashed, '/');
     - 
     - 		err = modification_has_ref_with_prefix(mod, slashed.buf);
     - 		if (err == 0) {
     -
     - ## reftable/stack.c ##
     -@@ reftable/stack.c: static void stack_filename(struct strbuf *dest, struct reftable_stack *st,
     - {
     - 	strbuf_reset(dest);
     - 	strbuf_addstr(dest, st->reftable_dir);
     --	strbuf_addstr(dest, "/");
     -+	strbuf_addch(dest, '/');
     - 	strbuf_addstr(dest, name);
     - }
     - 
     -@@ reftable/stack.c: int reftable_addition_commit(struct reftable_addition *add)
     - 
     - 	for (i = 0; i < add->stack->merged->stack_len; i++) {
     - 		strbuf_addstr(&table_list, add->stack->readers[i]->name);
     --		strbuf_addstr(&table_list, "\n");
     -+		strbuf_addch(&table_list, '\n');
     - 	}
     - 	for (i = 0; i < add->new_tables_len; i++) {
     - 		strbuf_addstr(&table_list, add->new_tables[i]);
     --		strbuf_addstr(&table_list, "\n");
     -+		strbuf_addch(&table_list, '\n');
     - 	}
     - 
     - 	err = write(add->lock_file_fd, table_list.buf, table_list.len);
     -@@ reftable/stack.c: static int stack_compact_range(struct reftable_stack *st, int first, int last,
     - 
     - 	for (i = 0; i < first; i++) {
     - 		strbuf_addstr(&ref_list_contents, st->readers[i]->name);
     --		strbuf_addstr(&ref_list_contents, "\n");
     -+		strbuf_addch(&ref_list_contents, '\n');
     - 	}
     - 	if (!is_empty_table) {
     - 		strbuf_addbuf(&ref_list_contents, &new_table_name);
     --		strbuf_addstr(&ref_list_contents, "\n");
     -+		strbuf_addch(&ref_list_contents, '\n');
     - 	}
     - 	for (i = last + 1; i < st->merged->stack_len; i++) {
     - 		strbuf_addstr(&ref_list_contents, st->readers[i]->name);
     --		strbuf_addstr(&ref_list_contents, "\n");
     -+		strbuf_addch(&ref_list_contents, '\n');
     - 	}
     - 
     - 	err = write(lock_file_fd, ref_list_contents.buf, ref_list_contents.len);
     -
     - ## reftable/stack_test.c ##
     -@@ reftable/stack_test.c: static void test_reftable_stack_add_one(void)
     - 
     - 	strbuf_reset(&scratch);
     - 	strbuf_addstr(&scratch, dir);
     --	strbuf_addstr(&scratch, "/");
     -+	strbuf_addch(&scratch, '/');
     - 	/* do not try at home; not an external API for reftable. */
     - 	strbuf_addstr(&scratch, st->readers[0]->name);
     - 	err = stat(scratch.buf, &stat_result);
     -
     - ## reftable/writer.c ##
     -@@ reftable/writer.c: int reftable_writer_add_log(struct reftable_writer *w,
     - 			err = REFTABLE_API_ERROR;
     - 			goto done;
     - 		}
     --		strbuf_addstr(&cleaned_message, "\n");
     -+		strbuf_addch(&cleaned_message, '\n');
     - 		log->value.update.message = cleaned_message.buf;
     - 	}
     - 
     -
     - ## sequencer.c ##
     -@@ sequencer.c: static int do_pick_commit(struct repository *r,
     - 		} else {
     - 			strbuf_addstr(&msgbuf, "Revert \"");
     - 			strbuf_addstr(&msgbuf, msg.subject);
     --			strbuf_addstr(&msgbuf, "\"");
     -+			strbuf_addch(&msgbuf, '\"');
     - 		}
     - 		strbuf_addstr(&msgbuf, "\n\nThis reverts commit ");
     - 		refer_to_commit(opts, &msgbuf, commit);
     -
       ## setup.c ##
      @@ setup.c: static enum discovery_result setup_git_directory_gently_1(struct strbuf *dir,
       				return GIT_DIR_DISALLOWED_BARE;

 bisect.c                | 2 +-
 builtin/am.c            | 6 ++----
 builtin/blame.c         | 8 +++-----
 builtin/ls-tree.c       | 2 +-
 diff.c                  | 2 +-
 log-tree.c              | 2 +-
 merge-ort.c             | 3 +--
 path.c                  | 2 +-
 protocol-caps.c         | 2 +-
 setup.c                 | 2 +-
 trace2/tr2_tgt_normal.c | 2 +-
 11 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/bisect.c b/bisect.c
index d71c4e4b44b..94bb53c9bf6 100644
--- a/bisect.c
+++ b/bisect.c
@@ -454,7 +454,7 @@ static int register_ref(const char *refname, const char *referent UNUSED, const
 {
 	struct strbuf good_prefix = STRBUF_INIT;
 	strbuf_addstr(&good_prefix, term_good);
-	strbuf_addstr(&good_prefix, "-");
+	strbuf_addch(&good_prefix, '-');
 
 	if (!strcmp(refname, term_bad)) {
 		free(current_bad_oid);
diff --git a/builtin/am.c b/builtin/am.c
index bfa95147cf4..6cb9fd4f45f 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -341,13 +341,11 @@ static void write_author_script(const struct am_state *state)
 
 	strbuf_addstr(&sb, "GIT_AUTHOR_NAME=");
 	sq_quote_buf(&sb, state->author_name);
-	strbuf_addch(&sb, '\n');
 
-	strbuf_addstr(&sb, "GIT_AUTHOR_EMAIL=");
+	strbuf_addstr(&sb, "\nGIT_AUTHOR_EMAIL=");
 	sq_quote_buf(&sb, state->author_email);
-	strbuf_addch(&sb, '\n');
 
-	strbuf_addstr(&sb, "GIT_AUTHOR_DATE=");
+	strbuf_addstr(&sb, "\nGIT_AUTHOR_DATE=");
 	sq_quote_buf(&sb, state->author_date);
 	strbuf_addch(&sb, '\n');
 
diff --git a/builtin/blame.c b/builtin/blame.c
index 6a7bb3b0724..c1ee2585ee8 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -148,11 +148,9 @@ static void get_ac_line(const char *inbuf, const char *what,
 
 	if (split_ident_line(&ident, tmp, len)) {
 	error_out:
-		/* Ugh */
-		tmp = "(unknown)";
-		strbuf_addstr(name, tmp);
-		strbuf_addstr(mail, tmp);
-		strbuf_addstr(tz, tmp);
+		strbuf_addstr(name, "(unknown)");
+		strbuf_addstr(mail, "(unknown)");
+		strbuf_addstr(tz, "(unknown)");
 		*time = 0;
 		return;
 	}
diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c
index 8542b5d53e4..605ddb5a719 100644
--- a/builtin/ls-tree.c
+++ b/builtin/ls-tree.c
@@ -37,7 +37,7 @@ static void expand_objectsize(struct strbuf *line, const struct object_id *oid,
 	} else if (padded) {
 		strbuf_addf(line, "%7s", "-");
 	} else {
-		strbuf_addstr(line, "-");
+		strbuf_addch(line, '-');
 	}
 }
 
diff --git a/diff.c b/diff.c
index 266ddf18e73..61434c6cb45 100644
--- a/diff.c
+++ b/diff.c
@@ -1763,7 +1763,7 @@ static void add_line_count(struct strbuf *out, int count)
 		strbuf_addstr(out, "0,0");
 		break;
 	case 1:
-		strbuf_addstr(out, "1");
+		strbuf_addch(out, '1');
 		break;
 	default:
 		strbuf_addf(out, "1,%d", count);
diff --git a/log-tree.c b/log-tree.c
index 83cc4b1cfb7..d0dc065e4f3 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -452,7 +452,7 @@ void fmt_output_subject(struct strbuf *filename,
 
 		strbuf_addf(&temp, "v%s", info->reroll_count);
 		format_sanitized_subject(filename, temp.buf, temp.len);
-		strbuf_addstr(filename, "-");
+		strbuf_addch(filename, '-');
 		strbuf_release(&temp);
 	}
 	strbuf_addf(filename, "%04d-%s", nr, subject);
diff --git a/merge-ort.c b/merge-ort.c
index 11029c10be3..8bda8170863 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -827,8 +827,7 @@ static void path_msg(struct merge_options *opt,
 
 	va_start(ap, fmt);
 	if (opt->priv->call_depth) {
-		strbuf_addchars(dest, ' ', 2);
-		strbuf_addstr(dest, "From inner merge:");
+		strbuf_addstr(dest, "  From inner merge:");
 		strbuf_addchars(dest, ' ', opt->priv->call_depth * 2);
 	}
 	strbuf_vaddf(dest, fmt, ap);
diff --git a/path.c b/path.c
index 4dcf3c8d40d..04085c164d0 100644
--- a/path.c
+++ b/path.c
@@ -982,7 +982,7 @@ const char *remove_leading_path(const char *in, const char *prefix)
 
 	strbuf_reset(&buf);
 	if (!in[j])
-		strbuf_addstr(&buf, ".");
+		strbuf_addch(&buf, '.');
 	else
 		strbuf_addstr(&buf, in + j);
 	return buf.buf;
diff --git a/protocol-caps.c b/protocol-caps.c
index 855f279c2f7..a841a457bbd 100644
--- a/protocol-caps.c
+++ b/protocol-caps.c
@@ -65,7 +65,7 @@ static void send_info(struct repository *r, struct packet_writer *writer,
 
 		if (info->size) {
 			if (oid_object_info(r, &oid, &object_size) < 0) {
-				strbuf_addstr(&send_buffer, " ");
+				strbuf_addch(&send_buffer, ' ');
 			} else {
 				strbuf_addf(&send_buffer, " %lu", object_size);
 			}
diff --git a/setup.c b/setup.c
index 39ff48d9dc5..27535f9f9a2 100644
--- a/setup.c
+++ b/setup.c
@@ -1550,7 +1550,7 @@ static enum discovery_result setup_git_directory_gently_1(struct strbuf *dir,
 				return GIT_DIR_DISALLOWED_BARE;
 			if (!ensure_valid_ownership(NULL, NULL, dir->buf, report))
 				return GIT_DIR_INVALID_OWNERSHIP;
-			strbuf_addstr(gitdir, ".");
+			strbuf_addch(gitdir, '.');
 			return GIT_DIR_BARE;
 		}
 
diff --git a/trace2/tr2_tgt_normal.c b/trace2/tr2_tgt_normal.c
index baef48aa698..8a05cf2109a 100644
--- a/trace2/tr2_tgt_normal.c
+++ b/trace2/tr2_tgt_normal.c
@@ -226,7 +226,7 @@ static void fn_child_start_fl(const char *file, int line,
 	if (cmd->dir) {
 		strbuf_addstr(&buf_payload, " cd ");
 		sq_quote_buf_pretty(&buf_payload, cmd->dir);
-		strbuf_addstr(&buf_payload, ";");
+		strbuf_addch(&buf_payload, ';');
 	}
 
 	/*

base-commit: 2ccc89b0c16c51561da90d21cfbb4b58cc877bf6
-- 
gitgitgadget