Merge branch 'rz/worktree-no-checkout'
[gitweb.git] / notes-merge.c
index 0b2b82c41fc043a48e9bf458c4f75f992ead7175..34bfac0c685f18c635b30dbf19d7b25250faa1c6 100644 (file)
@@ -295,7 +295,7 @@ static void write_buf_to_worktree(const unsigned char *obj,
                                  const char *buf, unsigned long size)
 {
        int fd;
-       const char *path = git_path(NOTES_MERGE_WORKTREE "/%s", sha1_to_hex(obj));
+       char *path = git_pathdup(NOTES_MERGE_WORKTREE "/%s", sha1_to_hex(obj));
        if (safe_create_leading_directories_const(path))
                die_errno("unable to create directory for '%s'", path);
        if (file_exists(path))
@@ -320,6 +320,7 @@ static void write_buf_to_worktree(const unsigned char *obj,
        }
 
        close(fd);
+       free(path);
 }
 
 static void write_note_to_worktree(const unsigned char *obj,
@@ -601,15 +602,15 @@ int notes_merge(struct notes_merge_options *o,
                if (o->verbosity >= 4)
                        printf("No merge base found; doing history-less merge\n");
        } else if (!bases->next) {
-               base_sha1 = bases->item->object.sha1;
-               base_tree_sha1 = bases->item->tree->object.sha1;
+               base_sha1 = bases->item->object.oid.hash;
+               base_tree_sha1 = bases->item->tree->object.oid.hash;
                if (o->verbosity >= 4)
                        printf("One merge base found (%.7s)\n",
                                sha1_to_hex(base_sha1));
        } else {
                /* TODO: How to handle multiple merge-bases? */
-               base_sha1 = bases->item->object.sha1;
-               base_tree_sha1 = bases->item->tree->object.sha1;
+               base_sha1 = bases->item->object.oid.hash;
+               base_tree_sha1 = bases->item->tree->object.oid.hash;
                if (o->verbosity >= 3)
                        printf("Multiple merge bases found. Using the first "
                                "(%.7s)\n", sha1_to_hex(base_sha1));
@@ -617,27 +618,27 @@ int notes_merge(struct notes_merge_options *o,
 
        if (o->verbosity >= 4)
                printf("Merging remote commit %.7s into local commit %.7s with "
-                       "merge-base %.7s\n", sha1_to_hex(remote->object.sha1),
-                       sha1_to_hex(local->object.sha1),
+                       "merge-base %.7s\n", oid_to_hex(&remote->object.oid),
+                       oid_to_hex(&local->object.oid),
                        sha1_to_hex(base_sha1));
 
-       if (!hashcmp(remote->object.sha1, base_sha1)) {
+       if (!hashcmp(remote->object.oid.hash, base_sha1)) {
                /* Already merged; result == local commit */
                if (o->verbosity >= 2)
                        printf("Already up-to-date!\n");
-               hashcpy(result_sha1, local->object.sha1);
+               hashcpy(result_sha1, local->object.oid.hash);
                goto found_result;
        }
-       if (!hashcmp(local->object.sha1, base_sha1)) {
+       if (!hashcmp(local->object.oid.hash, base_sha1)) {
                /* Fast-forward; result == remote commit */
                if (o->verbosity >= 2)
                        printf("Fast-forward\n");
-               hashcpy(result_sha1, remote->object.sha1);
+               hashcpy(result_sha1, remote->object.oid.hash);
                goto found_result;
        }
 
-       result = merge_from_diffs(o, base_tree_sha1, local->tree->object.sha1,
-                                 remote->tree->object.sha1, local_tree);
+       result = merge_from_diffs(o, base_tree_sha1, local->tree->object.oid.hash,
+                                 remote->tree->object.oid.hash, local_tree);
 
        if (result != 0) { /* non-trivial merge (with or without conflicts) */
                /* Commit (partial) result */