builtin/apply: make check_apply_state() return -1 instead of die()ing
[gitweb.git] / builtin / merge.c
index d82f6c19a350e72edd4dc03e30ff65d8c98d8ecb..19b3bc2f2fafe08d5ec03ab493d9d8f189db275b 100644 (file)
@@ -336,15 +336,9 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead
        struct rev_info rev;
        struct strbuf out = STRBUF_INIT;
        struct commit_list *j;
-       const char *filename;
-       int fd;
        struct pretty_print_context ctx = {0};
 
        printf(_("Squash commit -- not updating HEAD\n"));
-       filename = git_path_squash_msg();
-       fd = open(filename, O_WRONLY | O_CREAT, 0666);
-       if (fd < 0)
-               die_errno(_("Could not write to '%s'"), filename);
 
        init_revisions(&rev, NULL);
        rev.ignore_merges = 1;
@@ -371,10 +365,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead
                        oid_to_hex(&commit->object.oid));
                pretty_print_commit(&ctx, commit, &out);
        }
-       if (write_in_full(fd, out.buf, out.len) != out.len)
-               die_errno(_("Writing SQUASH_MSG"));
-       if (close(fd))
-               die_errno(_("Finishing SQUASH_MSG"));
+       write_file_buf(git_path_squash_msg(), out.buf, out.len);
        strbuf_release(&out);
 }
 
@@ -501,7 +492,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
                if (ref_exists(truname.buf)) {
                        strbuf_addf(msg,
                                    "%s\t\tbranch '%s'%s of .\n",
-                                   sha1_to_hex(remote_head->object.oid.hash),
+                                   oid_to_hex(&remote_head->object.oid),
                                    truname.buf + 11,
                                    (early ? " (early part)" : ""));
                        strbuf_release(&truname);
@@ -515,7 +506,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
                desc = merge_remote_util(remote_head);
                if (desc && desc->obj && desc->obj->type == OBJ_TAG) {
                        strbuf_addf(msg, "%s\t\t%s '%s'\n",
-                                   sha1_to_hex(desc->obj->oid.hash),
+                                   oid_to_hex(&desc->obj->oid),
                                    typename(desc->obj->type),
                                    remote);
                        goto cleanup;
@@ -523,7 +514,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
        }
 
        strbuf_addf(msg, "%s\t\tcommit '%s'\n",
-               sha1_to_hex(remote_head->object.oid.hash), remote);
+               oid_to_hex(&remote_head->object.oid), remote);
 cleanup:
        strbuf_release(&buf);
        strbuf_release(&bname);
@@ -756,18 +747,6 @@ static void add_strategies(const char *string, unsigned attr)
 
 }
 
-static void write_merge_msg(struct strbuf *msg)
-{
-       const char *filename = git_path_merge_msg();
-       int fd = open(filename, O_WRONLY | O_CREAT, 0666);
-       if (fd < 0)
-               die_errno(_("Could not open '%s' for writing"),
-                         filename);
-       if (write_in_full(fd, msg->buf, msg->len) != msg->len)
-               die_errno(_("Could not write to '%s'"), filename);
-       close(fd);
-}
-
 static void read_merge_msg(struct strbuf *msg)
 {
        const char *filename = git_path_merge_msg();
@@ -801,7 +780,7 @@ static void prepare_to_commit(struct commit_list *remoteheads)
        strbuf_addch(&msg, '\n');
        if (0 < option_edit)
                strbuf_commented_addf(&msg, _(merge_editor_comment), comment_line_char);
-       write_merge_msg(&msg);
+       write_file_buf(git_path_merge_msg(), msg.buf, msg.len);
        if (run_commit_hook(0 < option_edit, get_index_file(), "prepare-commit-msg",
                            git_path_merge_msg(), "merge", NULL))
                abort_commit(remoteheads, NULL);
@@ -964,8 +943,6 @@ static int setup_with_upstream(const char ***argv)
 
 static void write_merge_state(struct commit_list *remoteheads)
 {
-       const char *filename;
-       int fd;
        struct commit_list *j;
        struct strbuf buf = STRBUF_INIT;
 
@@ -979,26 +956,14 @@ static void write_merge_state(struct commit_list *remoteheads)
                }
                strbuf_addf(&buf, "%s\n", oid_to_hex(oid));
        }
-       filename = git_path_merge_head();
-       fd = open(filename, O_WRONLY | O_CREAT, 0666);
-       if (fd < 0)
-               die_errno(_("Could not open '%s' for writing"), filename);
-       if (write_in_full(fd, buf.buf, buf.len) != buf.len)
-               die_errno(_("Could not write to '%s'"), filename);
-       close(fd);
+       write_file_buf(git_path_merge_head(), buf.buf, buf.len);
        strbuf_addch(&merge_msg, '\n');
-       write_merge_msg(&merge_msg);
+       write_file_buf(git_path_merge_msg(), merge_msg.buf, merge_msg.len);
 
-       filename = git_path_merge_mode();
-       fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);
-       if (fd < 0)
-               die_errno(_("Could not open '%s' for writing"), filename);
        strbuf_reset(&buf);
        if (fast_forward == FF_NO)
                strbuf_addf(&buf, "no-ff");
-       if (write_in_full(fd, buf.buf, buf.len) != buf.len)
-               die_errno(_("Could not write to '%s'"), filename);
-       close(fd);
+       write_file_buf(git_path_merge_mode(), buf.buf, buf.len);
 }
 
 static int default_edit_option(void)
@@ -1366,7 +1331,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
        for (p = remoteheads; p; p = p->next) {
                struct commit *commit = p->item;
                strbuf_addf(&buf, "GITHEAD_%s",
-                           sha1_to_hex(commit->object.oid.hash));
+                           oid_to_hex(&commit->object.oid));
                setenv(buf.buf, merge_remote_util(commit)->name, 1);
                strbuf_reset(&buf);
                if (fast_forward != FF_ONLY &&
@@ -1425,7 +1390,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                goto done;
        } else if (fast_forward != FF_NO && !remoteheads->next &&
                        !common->next &&
-                       !hashcmp(common->item->object.oid.hash, head_commit->object.oid.hash)) {
+                       !oidcmp(&common->item->object.oid, &head_commit->object.oid)) {
                /* Again the most common case of merging one remote. */
                struct strbuf msg = STRBUF_INIT;
                struct commit *commit;
@@ -1499,8 +1464,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                         * HEAD^^" would be missed.
                         */
                        common_one = get_merge_bases(head_commit, j->item);
-                       if (hashcmp(common_one->item->object.oid.hash,
-                               j->item->object.oid.hash)) {
+                       if (oidcmp(&common_one->item->object.oid, &j->item->object.oid)) {
                                up_to_date = 0;
                                break;
                        }
@@ -1530,7 +1494,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
             * Stash away the local changes so that we can try more than one.
             */
            save_state(stash))
-               hashcpy(stash, null_sha1);
+               hashclr(stash);
 
        for (i = 0; i < use_strategies_nr; i++) {
                int ret;