]> Kevux Git Server - rit/commitdiff
merge-tree: do not use strbuf_split*()
authorJunio C Hamano <gitster@pobox.com>
Thu, 31 Jul 2025 22:54:27 +0000 (15:54 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 3 Aug 2025 05:44:58 +0000 (22:44 -0700)
When reading merge instructions from the standard input, the program
reads from the standard input, splits the line into tokens at
whitespace, and trims each of them before using.  We no longer need
to use strbuf just for trimming, as string_list_split*() family can
trim while splitting a string.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/merge-tree.c

index cf8b06c..7023585 100644 (file)
@@ -618,32 +618,34 @@ int cmd_merge_tree(int argc,
                            "--merge-base", "--stdin");
                line_termination = '\0';
                while (strbuf_getline_lf(&buf, stdin) != EOF) {
-                       struct strbuf **split;
+                       struct string_list split = STRING_LIST_INIT_NODUP;
                        const char *input_merge_base = NULL;
 
-                       split = strbuf_split(&buf, ' ');
-                       if (!split[0] || !split[1])
+                       string_list_split_in_place_f(&split, buf.buf, " ", -1,
+                                                    STRING_LIST_SPLIT_TRIM);
+
+                       if (split.nr < 2)
                                die(_("malformed input line: '%s'."), buf.buf);
-                       strbuf_rtrim(split[0]);
-                       strbuf_rtrim(split[1]);
 
                        /* parse the merge-base */
-                       if (!strcmp(split[1]->buf, "--")) {
-                               input_merge_base = split[0]->buf;
+                       if (!strcmp(split.items[1].string, "--")) {
+                               input_merge_base = split.items[0].string;
                        }
 
-                       if (input_merge_base && split[2] && split[3] && !split[4]) {
-                               strbuf_rtrim(split[2]);
-                               strbuf_rtrim(split[3]);
-                               real_merge(&o, input_merge_base, split[2]->buf, split[3]->buf, prefix);
-                       } else if (!input_merge_base && !split[2]) {
-                               real_merge(&o, NULL, split[0]->buf, split[1]->buf, prefix);
+                       if (input_merge_base && split.nr == 4) {
+                               real_merge(&o, input_merge_base,
+                                          split.items[2].string, split.items[3].string,
+                                          prefix);
+                       } else if (!input_merge_base && split.nr == 2) {
+                               real_merge(&o, NULL,
+                                          split.items[0].string, split.items[1].string,
+                                          prefix);
                        } else {
                                die(_("malformed input line: '%s'."), buf.buf);
                        }
                        maybe_flush_or_die(stdout, "stdout");
 
-                       strbuf_list_free(split);
+                       string_list_clear(&split, 0);
                }
                strbuf_release(&buf);