]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'ad/commit-have-m-option' into maint
authorJunio C Hamano <gitster@pobox.com>
Mon, 2 May 2016 21:24:09 +0000 (14:24 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 2 May 2016 21:24:09 +0000 (14:24 -0700)
"git commit" misbehaved in a few minor ways when an empty message
is given via -m '', all of which has been corrected.

* ad/commit-have-m-option:
  commit: do not ignore an empty message given by -m ''
  commit: --amend -m '' silently fails to wipe message

1  2 
builtin/commit.c

diff --combined builtin/commit.c
index c733ec98b7057b6310db6b364d5780170455dbaa,9a203bde74db9a4be2d55d4507f00f7c329cd2a7..e13303787a13aecf282ecd6b207f7f0c2a855cde
@@@ -32,7 -32,6 +32,7 @@@
  #include "sequencer.h"
  #include "notes-utils.h"
  #include "mailmap.h"
 +#include "sigchain.h"
  
  static const char * const builtin_commit_usage[] = {
        N_("git commit [<options>] [--] <pathspec>..."),
@@@ -167,11 -166,11 +167,11 @@@ static int opt_parse_m(const struct opt
  
  static void determine_whence(struct wt_status *s)
  {
 -      if (file_exists(git_path("MERGE_HEAD")))
 +      if (file_exists(git_path_merge_head()))
                whence = FROM_MERGE;
 -      else if (file_exists(git_path("CHERRY_PICK_HEAD"))) {
 +      else if (file_exists(git_path_cherry_pick_head())) {
                whence = FROM_CHERRY_PICK;
 -              if (file_exists(git_path("sequencer")))
 +              if (file_exists(git_path(SEQ_DIR)))
                        sequencer_in_use = 1;
        }
        else
@@@ -300,7 -299,7 +300,7 @@@ static void create_base_index(const str
        opts.dst_index = &the_index;
  
        opts.fn = oneway_merge;
 -      tree = parse_tree_indirect(current_head->object.sha1);
 +      tree = parse_tree_indirect(current_head->object.oid.hash);
        if (!tree)
                die(_("failed to unpack HEAD tree object"));
        parse_tree(tree);
@@@ -325,7 -324,6 +325,7 @@@ static const char *prepare_index(int ar
        struct string_list partial;
        struct pathspec pathspec;
        int refresh_flags = REFRESH_QUIET;
 +      const char *ret;
  
        if (is_status)
                refresh_flags |= REFRESH_UNMERGED;
                        die(_("unable to create temporary index"));
  
                old_index_env = getenv(INDEX_ENVIRONMENT);
 -              setenv(INDEX_ENVIRONMENT, index_lock.filename.buf, 1);
 +              setenv(INDEX_ENVIRONMENT, get_lock_file_path(&index_lock), 1);
  
                if (interactive_add(argc, argv, prefix, patch_interactive) != 0)
                        die(_("interactive add failed"));
                        unsetenv(INDEX_ENVIRONMENT);
  
                discard_cache();
 -              read_cache_from(index_lock.filename.buf);
 +              read_cache_from(get_lock_file_path(&index_lock));
                if (update_main_cache_tree(WRITE_TREE_SILENT) == 0) {
                        if (reopen_lock_file(&index_lock) < 0)
                                die(_("unable to write index file"));
                        warning(_("Failed to update main cache tree"));
  
                commit_style = COMMIT_NORMAL;
 -              return index_lock.filename.buf;
 +              return get_lock_file_path(&index_lock);
        }
  
        /*
                if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
                        die(_("unable to write new_index file"));
                commit_style = COMMIT_NORMAL;
 -              return index_lock.filename.buf;
 +              return get_lock_file_path(&index_lock);
        }
  
        /*
                hold_locked_index(&index_lock, 1);
                refresh_cache_or_die(refresh_flags);
                if (active_cache_changed
 -                  || !cache_tree_fully_valid(active_cache_tree)) {
 +                  || !cache_tree_fully_valid(active_cache_tree))
                        update_main_cache_tree(WRITE_TREE_SILENT);
 -                      active_cache_changed = 1;
 -              }
                if (active_cache_changed) {
                        if (write_locked_index(&the_index, &index_lock,
                                               COMMIT_LOCK))
                die(_("unable to write temporary index file"));
  
        discard_cache();
 -      read_cache_from(false_lock.filename.buf);
 -
 -      return false_lock.filename.buf;
 +      ret = get_lock_file_path(&false_lock);
 +      read_cache_from(ret);
 +      return ret;
  }
  
  static int run_status(FILE *fp, const char *index_file, const char *prefix, int nowarn,
@@@ -694,7 -694,7 +694,7 @@@ static int prepare_to_commit(const cha
                }
        }
  
-       if (message.len) {
+       if (have_option_m) {
                strbuf_addbuf(&sb, &message);
                hook_arg1 = "message";
        } else if (logfile && !strcmp(logfile, "-")) {
                format_commit_message(commit, "fixup! %s\n\n",
                                      &sb, &ctx);
                hook_arg1 = "message";
 -      } else if (!stat(git_path("MERGE_MSG"), &statbuf)) {
 -              if (strbuf_read_file(&sb, git_path("MERGE_MSG"), 0) < 0)
 +      } else if (!stat(git_path_merge_msg(), &statbuf)) {
 +              /*
 +               * prepend SQUASH_MSG here if it exists and a
 +               * "merge --squash" was originally performed
 +               */
 +              if (!stat(git_path_squash_msg(), &statbuf)) {
 +                      if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
 +                              die_errno(_("could not read SQUASH_MSG"));
 +                      hook_arg1 = "squash";
 +              } else
 +                      hook_arg1 = "merge";
 +              if (strbuf_read_file(&sb, git_path_merge_msg(), 0) < 0)
                        die_errno(_("could not read MERGE_MSG"));
 -              hook_arg1 = "merge";
 -      } else if (!stat(git_path("SQUASH_MSG"), &statbuf)) {
 -              if (strbuf_read_file(&sb, git_path("SQUASH_MSG"), 0) < 0)
 +      } else if (!stat(git_path_squash_msg(), &statbuf)) {
 +              if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
                        die_errno(_("could not read SQUASH_MSG"));
                hook_arg1 = "squash";
        } else if (template_file) {
                hook_arg2 = "";
        }
  
 -      s->fp = fopen(git_path(commit_editmsg), "w");
 +      s->fp = fopen_for_writing(git_path(commit_editmsg));
        if (s->fp == NULL)
                die_errno(_("could not open '%s'"), git_path(commit_editmsg));
  
        s->hints = 0;
  
        if (clean_message_contents)
 -              stripspace(&sb, 0);
 +              strbuf_stripspace(&sb, 0);
  
        if (signoff)
                append_signoff(&sb, ignore_non_trailer(&sb), 0);
                                _("%s"
                                "Date:      %s"),
                                ident_shown++ ? "" : "\n",
 -                              show_ident_date(&ai, DATE_NORMAL));
 +                              show_ident_date(&ai, DATE_MODE(NORMAL)));
  
                if (!committer_ident_sufficiently_given())
                        status_printf_ln(s, GIT_COLOR_NORMAL,
@@@ -1024,7 -1015,7 +1024,7 @@@ static int template_untouched(struct st
        if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
                return 0;
  
 -      stripspace(&tmpl, cleanup_mode == CLEANUP_ALL);
 +      strbuf_stripspace(&tmpl, cleanup_mode == CLEANUP_ALL);
        if (!skip_prefix(sb->buf, tmpl.buf, &start))
                start = sb->buf;
        strbuf_release(&tmpl);
@@@ -1055,7 -1046,7 +1055,7 @@@ static const char *find_author_by_nickn
        commit = get_revision(&revs);
        if (commit) {
                struct pretty_print_context ctx = {0};
 -              ctx.date_mode = DATE_NORMAL;
 +              ctx.date_mode.type = DATE_NORMAL;
                strbuf_release(&buf);
                format_commit_message(commit, "%aN <%aE>", &buf, &ctx);
                clear_mailmap(&mailmap);
@@@ -1171,9 -1162,9 +1171,9 @@@ static int parse_and_validate_options(i
                f++;
        if (f > 1)
                die(_("Only one of -c/-C/-F/--fixup can be used."));
-       if (message.len && f > 0)
+       if (have_option_m && f > 0)
                die((_("Option -m cannot be combined with -c/-C/-F/--fixup.")));
-       if (f || message.len)
+       if (f || have_option_m)
                template_file = NULL;
        if (edit_message)
                use_message = edit_message;
@@@ -1375,14 -1366,13 +1375,14 @@@ int cmd_status(int argc, const char **a
        refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL);
  
        fd = hold_locked_index(&index_lock, 0);
 -      if (0 <= fd)
 -              update_index_if_able(&the_index, &index_lock);
  
        s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
        s.ignore_submodule_arg = ignore_submodule_arg;
        wt_status_collect(&s);
  
 +      if (0 <= fd)
 +              update_index_if_able(&the_index, &index_lock);
 +
        if (s.relative_paths)
                s.prefix = prefix;
  
@@@ -1547,10 -1537,8 +1547,10 @@@ static int run_rewrite_hook(const unsig
                return code;
        n = snprintf(buf, sizeof(buf), "%s %s\n",
                     sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
 +      sigchain_push(SIGPIPE, SIG_IGN);
        write_in_full(proc.in, buf, n);
        close(proc.in);
 +      sigchain_pop(SIGPIPE);
        return finish_command(&proc);
  }
  
@@@ -1695,11 -1683,11 +1695,11 @@@ int cmd_commit(int argc, const char **a
                if (!reflog_msg)
                        reflog_msg = "commit (merge)";
                pptr = &commit_list_insert(current_head, pptr)->next;
 -              fp = fopen(git_path("MERGE_HEAD"), "r");
 +              fp = fopen(git_path_merge_head(), "r");
                if (fp == NULL)
                        die_errno(_("could not open '%s' for reading"),
 -                                git_path("MERGE_HEAD"));
 -              while (strbuf_getline(&m, fp, '\n') != EOF) {
 +                                git_path_merge_head());
 +              while (strbuf_getline_lf(&m, fp) != EOF) {
                        struct commit *parent;
  
                        parent = get_merge_parent(m.buf);
                }
                fclose(fp);
                strbuf_release(&m);
 -              if (!stat(git_path("MERGE_MODE"), &statbuf)) {
 -                      if (strbuf_read_file(&sb, git_path("MERGE_MODE"), 0) < 0)
 +              if (!stat(git_path_merge_mode(), &statbuf)) {
 +                      if (strbuf_read_file(&sb, git_path_merge_mode(), 0) < 0)
                                die_errno(_("could not read MERGE_MODE"));
                        if (!strcmp(sb.buf, "no-ff"))
                                allow_fast_forward = 0;
                wt_status_truncate_message_at_cut_line(&sb);
  
        if (cleanup_mode != CLEANUP_NONE)
 -              stripspace(&sb, cleanup_mode == CLEANUP_ALL);
 +              strbuf_stripspace(&sb, cleanup_mode == CLEANUP_ALL);
        if (template_untouched(&sb) && !allow_empty_message) {
                rollback_index_files();
                fprintf(stderr, _("Aborting commit; you did not edit the message.\n"));
        if (!transaction ||
            ref_transaction_update(transaction, "HEAD", sha1,
                                   current_head
 -                                 ? current_head->object.sha1 : null_sha1,
 +                                 ? current_head->object.oid.hash : null_sha1,
                                   0, sb.buf, &err) ||
            ref_transaction_commit(transaction, &err)) {
                rollback_index_files();
        }
        ref_transaction_free(transaction);
  
 -      unlink(git_path("CHERRY_PICK_HEAD"));
 -      unlink(git_path("REVERT_HEAD"));
 -      unlink(git_path("MERGE_HEAD"));
 -      unlink(git_path("MERGE_MSG"));
 -      unlink(git_path("MERGE_MODE"));
 -      unlink(git_path("SQUASH_MSG"));
 +      unlink(git_path_cherry_pick_head());
 +      unlink(git_path_revert_head());
 +      unlink(git_path_merge_head());
 +      unlink(git_path_merge_msg());
 +      unlink(git_path_merge_mode());
 +      unlink(git_path_squash_msg());
  
        if (commit_index_files())
                die (_("Repository has been updated, but unable to write\n"
                cfg = init_copy_notes_for_rewrite("amend");
                if (cfg) {
                        /* we are amending, so current_head is not NULL */
 -                      copy_note_for_rewrite(cfg, current_head->object.sha1, sha1);
 +                      copy_note_for_rewrite(cfg, current_head->object.oid.hash, sha1);
                        finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
                }
 -              run_rewrite_hook(current_head->object.sha1, sha1);
 +              run_rewrite_hook(current_head->object.oid.hash, sha1);
        }
        if (!quiet)
                print_summary(prefix, sha1, !current_head);