]> git.ipfire.org Git - thirdparty/git.git/blobdiff - sequencer.c
Merge branch 'ab/refs-errno-cleanup'
[thirdparty/git.git] / sequencer.c
index cf10f9a332e91fa0dbeeb23e71000d043079dcb4..b4135a78c9133da2661384d291d9cd64523e0db1 100644 (file)
@@ -997,7 +997,9 @@ static int run_git_commit(const char *defmsg,
 
        cmd.git_cmd = 1;
 
-       if (is_rebase_i(opts) && !(!defmsg && (flags & AMEND_MSG)) &&
+       if (is_rebase_i(opts) &&
+           ((opts->committer_date_is_author_date && !opts->ignore_date) ||
+            !(!defmsg && (flags & AMEND_MSG))) &&
            read_env_script(&cmd.env_array)) {
                const char *gpg_opt = gpg_sign_opt_quoted(opts);
 
@@ -3651,9 +3653,9 @@ static int do_reset(struct repository *r,
        struct strbuf ref_name = STRBUF_INIT;
        struct object_id oid;
        struct lock_file lock = LOCK_INIT;
-       struct tree_desc desc;
+       struct tree_desc desc = { 0 };
        struct tree *tree;
-       struct unpack_trees_options unpack_tree_opts;
+       struct unpack_trees_options unpack_tree_opts = { 0 };
        int ret = 0;
 
        if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
@@ -3685,14 +3687,11 @@ static int do_reset(struct repository *r,
                strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
                if (get_oid(ref_name.buf, &oid) &&
                    get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
-                       error(_("could not read '%s'"), ref_name.buf);
-                       rollback_lock_file(&lock);
-                       strbuf_release(&ref_name);
-                       return -1;
+                       ret = error(_("could not read '%s'"), ref_name.buf);
+                       goto cleanup;
                }
        }
 
-       memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
        setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
        unpack_tree_opts.head_idx = 1;
        unpack_tree_opts.src_index = r->index;
@@ -3704,24 +3703,18 @@ static int do_reset(struct repository *r,
        init_checkout_metadata(&unpack_tree_opts.meta, name, &oid, NULL);
 
        if (repo_read_index_unmerged(r)) {
-               rollback_lock_file(&lock);
-               strbuf_release(&ref_name);
-               return error_resolve_conflict(_(action_name(opts)));
+               ret = error_resolve_conflict(_(action_name(opts)));
+               goto cleanup;
        }
 
        if (!fill_tree_descriptor(r, &desc, &oid)) {
-               error(_("failed to find tree of %s"), oid_to_hex(&oid));
-               rollback_lock_file(&lock);
-               free((void *)desc.buffer);
-               strbuf_release(&ref_name);
-               return -1;
+               ret = error(_("failed to find tree of %s"), oid_to_hex(&oid));
+               goto cleanup;
        }
 
        if (unpack_trees(1, &desc, &unpack_tree_opts)) {
-               rollback_lock_file(&lock);
-               free((void *)desc.buffer);
-               strbuf_release(&ref_name);
-               return -1;
+               ret = -1;
+               goto cleanup;
        }
 
        tree = parse_tree_indirect(&oid);
@@ -3729,14 +3722,17 @@ static int do_reset(struct repository *r,
 
        if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
                ret = error(_("could not write index"));
-       free((void *)desc.buffer);
 
        if (!ret)
                ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
                                                len, name), "HEAD", &oid,
                                 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
-
+cleanup:
+       free((void *)desc.buffer);
+       if (ret < 0)
+               rollback_lock_file(&lock);
        strbuf_release(&ref_name);
+       clear_unpack_trees_porcelain(&unpack_tree_opts);
        return ret;
 }
 
@@ -5452,8 +5448,8 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
  * Add commands after pick and (series of) squash/fixup commands
  * in the todo list.
  */
-void todo_list_add_exec_commands(struct todo_list *todo_list,
-                                struct string_list *commands)
+static void todo_list_add_exec_commands(struct todo_list *todo_list,
+                                       struct string_list *commands)
 {
        struct strbuf *buf = &todo_list->buf;
        size_t base_offset = buf->len;