]> git.ipfire.org Git - thirdparty/git.git/blobdiff - builtin/commit.c
Merge branch 'jk/core-comment-string'
[thirdparty/git.git] / builtin / commit.c
index a91197245f18ed7b73eee64d3d5d930ca164bb06..7ba7201cfb9160dc062e50f64b875e59d0405c6a 100644 (file)
@@ -333,7 +333,7 @@ static void create_base_index(const struct commit *current_head)
                die(_("failed to unpack HEAD tree object"));
        if (parse_tree(tree) < 0)
                exit(128);
-       init_tree_desc(&t, tree->buffer, tree->size);
+       init_tree_desc(&t, &tree->object.oid, tree->buffer, tree->size);
        if (unpack_trees(1, &t, &opts))
                exit(128); /* We've already reported the error, finish dying */
 }
@@ -685,9 +685,10 @@ static void adjust_comment_line_char(const struct strbuf *sb)
        char *candidate;
        const char *p;
 
-       comment_line_char = candidates[0];
-       if (!memchr(sb->buf, comment_line_char, sb->len))
+       if (!memchr(sb->buf, candidates[0], sb->len)) {
+               comment_line_str = xstrfmt("%c", candidates[0]);
                return;
+       }
 
        p = sb->buf;
        candidate = strchr(candidates, *p);
@@ -706,7 +707,7 @@ static void adjust_comment_line_char(const struct strbuf *sb)
        if (!*p)
                die(_("unable to select a comment character that is not used\n"
                      "in the current commit message"));
-       comment_line_char = *p;
+       comment_line_str = xstrfmt("%c", *p);
 }
 
 static void prepare_amend_commit(struct commit *commit, struct strbuf *sb,
@@ -889,7 +890,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
        s->hints = 0;
 
        if (clean_message_contents)
-               strbuf_stripspace(&sb, '\0');
+               strbuf_stripspace(&sb, NULL);
 
        if (signoff)
                append_signoff(&sb, ignored_log_message_bytes(sb.buf, sb.len), 0);
@@ -909,18 +910,18 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
                struct ident_split ci, ai;
                const char *hint_cleanup_all = allow_empty_message ?
                        _("Please enter the commit message for your changes."
-                         " Lines starting\nwith '%c' will be ignored.\n") :
+                         " Lines starting\nwith '%s' will be ignored.\n") :
                        _("Please enter the commit message for your changes."
-                         " Lines starting\nwith '%c' will be ignored, and an empty"
+                         " Lines starting\nwith '%s' will be ignored, and an empty"
                          " message aborts the commit.\n");
                const char *hint_cleanup_space = allow_empty_message ?
                        _("Please enter the commit message for your changes."
                          " Lines starting\n"
-                         "with '%c' will be kept; you may remove them"
+                         "with '%s' will be kept; you may remove them"
                          " yourself if you want to.\n") :
                        _("Please enter the commit message for your changes."
                          " Lines starting\n"
-                         "with '%c' will be kept; you may remove them"
+                         "with '%s' will be kept; you may remove them"
                          " yourself if you want to.\n"
                          "An empty message aborts the commit.\n");
                if (whence != FROM_COMMIT) {
@@ -943,12 +944,12 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
 
                fprintf(s->fp, "\n");
                if (cleanup_mode == COMMIT_MSG_CLEANUP_ALL)
-                       status_printf(s, GIT_COLOR_NORMAL, hint_cleanup_all, comment_line_char);
+                       status_printf(s, GIT_COLOR_NORMAL, hint_cleanup_all, comment_line_str);
                else if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) {
                        if (whence == FROM_COMMIT)
                                wt_status_add_cut_line(s);
                } else /* COMMIT_MSG_CLEANUP_SPACE, that is. */
-                       status_printf(s, GIT_COLOR_NORMAL, hint_cleanup_space, comment_line_char);
+                       status_printf(s, GIT_COLOR_NORMAL, hint_cleanup_space, comment_line_str);
 
                /*
                 * These should never fail because they come from our own
@@ -1157,22 +1158,45 @@ static void handle_ignored_arg(struct wt_status *s)
                die(_("Invalid ignored mode '%s'"), ignored_arg);
 }
 
-static void handle_untracked_files_arg(struct wt_status *s)
+static enum untracked_status_type parse_untracked_setting_name(const char *u)
 {
-       if (!untracked_files_arg)
-               ; /* default already initialized */
-       else if (!strcmp(untracked_files_arg, "no"))
-               s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
-       else if (!strcmp(untracked_files_arg, "normal"))
-               s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
-       else if (!strcmp(untracked_files_arg, "all"))
-               s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
        /*
         * Please update $__git_untracked_file_modes in
         * git-completion.bash when you add new options
         */
+       switch (git_parse_maybe_bool(u)) {
+       case 0:
+               u = "no";
+               break;
+       case 1:
+               u = "normal";
+               break;
+       default:
+               break;
+       }
+
+       if (!strcmp(u, "no"))
+               return SHOW_NO_UNTRACKED_FILES;
+       else if (!strcmp(u, "normal"))
+               return SHOW_NORMAL_UNTRACKED_FILES;
+       else if (!strcmp(u, "all"))
+               return SHOW_ALL_UNTRACKED_FILES;
        else
-               die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
+               return SHOW_UNTRACKED_FILES_ERROR;
+}
+
+static void handle_untracked_files_arg(struct wt_status *s)
+{
+       enum untracked_status_type u;
+
+       if (!untracked_files_arg)
+               return; /* default already initialized */
+
+       u = parse_untracked_setting_name(untracked_files_arg);
+       if (u == SHOW_UNTRACKED_FILES_ERROR)
+               die(_("Invalid untracked files mode '%s'"),
+                   untracked_files_arg);
+       s->show_untracked_files = u;
 }
 
 static const char *read_commit_message(const char *name)
@@ -1455,16 +1479,12 @@ static int git_status_config(const char *k, const char *v,
                return 0;
        }
        if (!strcmp(k, "status.showuntrackedfiles")) {
-               if (!v)
-                       return config_error_nonbool(k);
-               else if (!strcmp(v, "no"))
-                       s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
-               else if (!strcmp(v, "normal"))
-                       s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
-               else if (!strcmp(v, "all"))
-                       s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
-               else
+               enum untracked_status_type u;
+
+               u = parse_untracked_setting_name(v);
+               if (u == SHOW_UNTRACKED_FILES_ERROR)
                        return error(_("Invalid untracked files mode '%s'"), v);
+               s->show_untracked_files = u;
                return 0;
        }
        if (!strcmp(k, "diff.renamelimit")) {