notes-merge: convert notes_merge* to struct object_id
Convert notes_merge and notes_merge_commit to use struct object_id. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
7b8dea0c75
commit
5237e0eb59
@ -724,7 +724,7 @@ static int merge_commit(struct notes_merge_options *o)
|
|||||||
if (!o->local_ref)
|
if (!o->local_ref)
|
||||||
die(_("failed to resolve NOTES_MERGE_REF"));
|
die(_("failed to resolve NOTES_MERGE_REF"));
|
||||||
|
|
||||||
if (notes_merge_commit(o, t, partial, oid.hash))
|
if (notes_merge_commit(o, t, partial, &oid))
|
||||||
die(_("failed to finalize notes merge"));
|
die(_("failed to finalize notes merge"));
|
||||||
|
|
||||||
/* Reuse existing commit message in reflog message */
|
/* Reuse existing commit message in reflog message */
|
||||||
@ -842,9 +842,9 @@ static int merge(int argc, const char **argv, const char *prefix)
|
|||||||
remote_ref.buf, default_notes_ref());
|
remote_ref.buf, default_notes_ref());
|
||||||
strbuf_add(&(o.commit_msg), msg.buf + 7, msg.len - 7); /* skip "notes: " */
|
strbuf_add(&(o.commit_msg), msg.buf + 7, msg.len - 7); /* skip "notes: " */
|
||||||
|
|
||||||
result = notes_merge(&o, t, result_oid.hash);
|
result = notes_merge(&o, t, &result_oid);
|
||||||
|
|
||||||
if (result >= 0) /* Merge resulted (trivially) in result_sha1 */
|
if (result >= 0) /* Merge resulted (trivially) in result_oid */
|
||||||
/* Update default notes ref with new commit */
|
/* Update default notes ref with new commit */
|
||||||
update_ref(msg.buf, default_notes_ref(), result_oid.hash, NULL,
|
update_ref(msg.buf, default_notes_ref(), result_oid.hash, NULL,
|
||||||
0, UPDATE_REFS_DIE_ON_ERR);
|
0, UPDATE_REFS_DIE_ON_ERR);
|
||||||
|
@ -533,17 +533,17 @@ static int merge_from_diffs(struct notes_merge_options *o,
|
|||||||
|
|
||||||
int notes_merge(struct notes_merge_options *o,
|
int notes_merge(struct notes_merge_options *o,
|
||||||
struct notes_tree *local_tree,
|
struct notes_tree *local_tree,
|
||||||
unsigned char *result_sha1)
|
struct object_id *result_oid)
|
||||||
{
|
{
|
||||||
struct object_id local_oid, remote_oid;
|
struct object_id local_oid, remote_oid;
|
||||||
struct commit *local, *remote;
|
struct commit *local, *remote;
|
||||||
struct commit_list *bases = NULL;
|
struct commit_list *bases = NULL;
|
||||||
const unsigned char *base_sha1, *base_tree_sha1;
|
const struct object_id *base_oid, *base_tree_oid;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
assert(o->local_ref && o->remote_ref);
|
assert(o->local_ref && o->remote_ref);
|
||||||
assert(!strcmp(o->local_ref, local_tree->ref));
|
assert(!strcmp(o->local_ref, local_tree->ref));
|
||||||
hashclr(result_sha1);
|
oidclr(result_oid);
|
||||||
|
|
||||||
trace_printf("notes_merge(o->local_ref = %s, o->remote_ref = %s)\n",
|
trace_printf("notes_merge(o->local_ref = %s, o->remote_ref = %s)\n",
|
||||||
o->local_ref, o->remote_ref);
|
o->local_ref, o->remote_ref);
|
||||||
@ -553,16 +553,16 @@ int notes_merge(struct notes_merge_options *o,
|
|||||||
die("Failed to resolve local notes ref '%s'", o->local_ref);
|
die("Failed to resolve local notes ref '%s'", o->local_ref);
|
||||||
else if (!check_refname_format(o->local_ref, 0) &&
|
else if (!check_refname_format(o->local_ref, 0) &&
|
||||||
is_null_oid(&local_oid))
|
is_null_oid(&local_oid))
|
||||||
local = NULL; /* local_sha1 == null_sha1 indicates unborn ref */
|
local = NULL; /* local_oid == null_oid indicates unborn ref */
|
||||||
else if (!(local = lookup_commit_reference(&local_oid)))
|
else if (!(local = lookup_commit_reference(&local_oid)))
|
||||||
die("Could not parse local commit %s (%s)",
|
die("Could not parse local commit %s (%s)",
|
||||||
oid_to_hex(&local_oid), o->local_ref);
|
oid_to_hex(&local_oid), o->local_ref);
|
||||||
trace_printf("\tlocal commit: %.7s\n", oid_to_hex(&local_oid));
|
trace_printf("\tlocal commit: %.7s\n", oid_to_hex(&local_oid));
|
||||||
|
|
||||||
/* Dereference o->remote_ref into remote_sha1 */
|
/* Dereference o->remote_ref into remote_oid */
|
||||||
if (get_oid(o->remote_ref, &remote_oid)) {
|
if (get_oid(o->remote_ref, &remote_oid)) {
|
||||||
/*
|
/*
|
||||||
* Failed to get remote_sha1. If o->remote_ref looks like an
|
* Failed to get remote_oid. If o->remote_ref looks like an
|
||||||
* unborn ref, perform the merge using an empty notes tree.
|
* unborn ref, perform the merge using an empty notes tree.
|
||||||
*/
|
*/
|
||||||
if (!check_refname_format(o->remote_ref, 0)) {
|
if (!check_refname_format(o->remote_ref, 0)) {
|
||||||
@ -583,12 +583,12 @@ int notes_merge(struct notes_merge_options *o,
|
|||||||
"(%s)", o->remote_ref, o->local_ref);
|
"(%s)", o->remote_ref, o->local_ref);
|
||||||
if (!local) {
|
if (!local) {
|
||||||
/* result == remote commit */
|
/* result == remote commit */
|
||||||
hashcpy(result_sha1, remote_oid.hash);
|
oidcpy(result_oid, &remote_oid);
|
||||||
goto found_result;
|
goto found_result;
|
||||||
}
|
}
|
||||||
if (!remote) {
|
if (!remote) {
|
||||||
/* result == local commit */
|
/* result == local commit */
|
||||||
hashcpy(result_sha1, local_oid.hash);
|
oidcpy(result_oid, &local_oid);
|
||||||
goto found_result;
|
goto found_result;
|
||||||
}
|
}
|
||||||
assert(local && remote);
|
assert(local && remote);
|
||||||
@ -596,47 +596,47 @@ int notes_merge(struct notes_merge_options *o,
|
|||||||
/* Find merge bases */
|
/* Find merge bases */
|
||||||
bases = get_merge_bases(local, remote);
|
bases = get_merge_bases(local, remote);
|
||||||
if (!bases) {
|
if (!bases) {
|
||||||
base_sha1 = null_sha1;
|
base_oid = &null_oid;
|
||||||
base_tree_sha1 = EMPTY_TREE_SHA1_BIN;
|
base_tree_oid = &empty_tree_oid;
|
||||||
if (o->verbosity >= 4)
|
if (o->verbosity >= 4)
|
||||||
printf("No merge base found; doing history-less merge\n");
|
printf("No merge base found; doing history-less merge\n");
|
||||||
} else if (!bases->next) {
|
} else if (!bases->next) {
|
||||||
base_sha1 = bases->item->object.oid.hash;
|
base_oid = &bases->item->object.oid;
|
||||||
base_tree_sha1 = bases->item->tree->object.oid.hash;
|
base_tree_oid = &bases->item->tree->object.oid;
|
||||||
if (o->verbosity >= 4)
|
if (o->verbosity >= 4)
|
||||||
printf("One merge base found (%.7s)\n",
|
printf("One merge base found (%.7s)\n",
|
||||||
sha1_to_hex(base_sha1));
|
oid_to_hex(base_oid));
|
||||||
} else {
|
} else {
|
||||||
/* TODO: How to handle multiple merge-bases? */
|
/* TODO: How to handle multiple merge-bases? */
|
||||||
base_sha1 = bases->item->object.oid.hash;
|
base_oid = &bases->item->object.oid;
|
||||||
base_tree_sha1 = bases->item->tree->object.oid.hash;
|
base_tree_oid = &bases->item->tree->object.oid;
|
||||||
if (o->verbosity >= 3)
|
if (o->verbosity >= 3)
|
||||||
printf("Multiple merge bases found. Using the first "
|
printf("Multiple merge bases found. Using the first "
|
||||||
"(%.7s)\n", sha1_to_hex(base_sha1));
|
"(%.7s)\n", oid_to_hex(base_oid));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (o->verbosity >= 4)
|
if (o->verbosity >= 4)
|
||||||
printf("Merging remote commit %.7s into local commit %.7s with "
|
printf("Merging remote commit %.7s into local commit %.7s with "
|
||||||
"merge-base %.7s\n", oid_to_hex(&remote->object.oid),
|
"merge-base %.7s\n", oid_to_hex(&remote->object.oid),
|
||||||
oid_to_hex(&local->object.oid),
|
oid_to_hex(&local->object.oid),
|
||||||
sha1_to_hex(base_sha1));
|
oid_to_hex(base_oid));
|
||||||
|
|
||||||
if (!hashcmp(remote->object.oid.hash, base_sha1)) {
|
if (!oidcmp(&remote->object.oid, base_oid)) {
|
||||||
/* Already merged; result == local commit */
|
/* Already merged; result == local commit */
|
||||||
if (o->verbosity >= 2)
|
if (o->verbosity >= 2)
|
||||||
printf("Already up-to-date!\n");
|
printf("Already up-to-date!\n");
|
||||||
hashcpy(result_sha1, local->object.oid.hash);
|
oidcpy(result_oid, &local->object.oid);
|
||||||
goto found_result;
|
goto found_result;
|
||||||
}
|
}
|
||||||
if (!hashcmp(local->object.oid.hash, base_sha1)) {
|
if (!oidcmp(&local->object.oid, base_oid)) {
|
||||||
/* Fast-forward; result == remote commit */
|
/* Fast-forward; result == remote commit */
|
||||||
if (o->verbosity >= 2)
|
if (o->verbosity >= 2)
|
||||||
printf("Fast-forward\n");
|
printf("Fast-forward\n");
|
||||||
hashcpy(result_sha1, remote->object.oid.hash);
|
oidcpy(result_oid, &remote->object.oid);
|
||||||
goto found_result;
|
goto found_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = merge_from_diffs(o, base_tree_sha1, local->tree->object.oid.hash,
|
result = merge_from_diffs(o, base_tree_oid->hash, local->tree->object.oid.hash,
|
||||||
remote->tree->object.oid.hash, local_tree);
|
remote->tree->object.oid.hash, local_tree);
|
||||||
|
|
||||||
if (result != 0) { /* non-trivial merge (with or without conflicts) */
|
if (result != 0) { /* non-trivial merge (with or without conflicts) */
|
||||||
@ -646,28 +646,28 @@ int notes_merge(struct notes_merge_options *o,
|
|||||||
commit_list_insert(local, &parents);
|
commit_list_insert(local, &parents);
|
||||||
create_notes_commit(local_tree, parents,
|
create_notes_commit(local_tree, parents,
|
||||||
o->commit_msg.buf, o->commit_msg.len,
|
o->commit_msg.buf, o->commit_msg.len,
|
||||||
result_sha1);
|
result_oid->hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
found_result:
|
found_result:
|
||||||
free_commit_list(bases);
|
free_commit_list(bases);
|
||||||
strbuf_release(&(o->commit_msg));
|
strbuf_release(&(o->commit_msg));
|
||||||
trace_printf("notes_merge(): result = %i, result_sha1 = %.7s\n",
|
trace_printf("notes_merge(): result = %i, result_oid = %.7s\n",
|
||||||
result, sha1_to_hex(result_sha1));
|
result, oid_to_hex(result_oid));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int notes_merge_commit(struct notes_merge_options *o,
|
int notes_merge_commit(struct notes_merge_options *o,
|
||||||
struct notes_tree *partial_tree,
|
struct notes_tree *partial_tree,
|
||||||
struct commit *partial_commit,
|
struct commit *partial_commit,
|
||||||
unsigned char *result_sha1)
|
struct object_id *result_oid)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Iterate through files in .git/NOTES_MERGE_WORKTREE and add all
|
* Iterate through files in .git/NOTES_MERGE_WORKTREE and add all
|
||||||
* found notes to 'partial_tree'. Write the updated notes tree to
|
* found notes to 'partial_tree'. Write the updated notes tree to
|
||||||
* the DB, and commit the resulting tree object while reusing the
|
* the DB, and commit the resulting tree object while reusing the
|
||||||
* commit message and parents from 'partial_commit'.
|
* commit message and parents from 'partial_commit'.
|
||||||
* Finally store the new commit object SHA1 into 'result_sha1'.
|
* Finally store the new commit object OID into 'result_oid'.
|
||||||
*/
|
*/
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *e;
|
struct dirent *e;
|
||||||
@ -721,11 +721,11 @@ int notes_merge_commit(struct notes_merge_options *o,
|
|||||||
}
|
}
|
||||||
|
|
||||||
create_notes_commit(partial_tree, partial_commit->parents,
|
create_notes_commit(partial_tree, partial_commit->parents,
|
||||||
msg, strlen(msg), result_sha1);
|
msg, strlen(msg), result_oid->hash);
|
||||||
unuse_commit_buffer(partial_commit, buffer);
|
unuse_commit_buffer(partial_commit, buffer);
|
||||||
if (o->verbosity >= 4)
|
if (o->verbosity >= 4)
|
||||||
printf("Finalized notes merge commit: %s\n",
|
printf("Finalized notes merge commit: %s\n",
|
||||||
sha1_to_hex(result_sha1));
|
oid_to_hex(result_oid));
|
||||||
strbuf_release(&path);
|
strbuf_release(&path);
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -32,16 +32,16 @@ void init_notes_merge_options(struct notes_merge_options *o);
|
|||||||
* outcomes:
|
* outcomes:
|
||||||
*
|
*
|
||||||
* 1. The merge trivially results in an existing commit (e.g. fast-forward or
|
* 1. The merge trivially results in an existing commit (e.g. fast-forward or
|
||||||
* already-up-to-date). 'local_tree' is untouched, the SHA1 of the result
|
* already-up-to-date). 'local_tree' is untouched, the OID of the result
|
||||||
* is written into 'result_sha1' and 0 is returned.
|
* is written into 'result_oid' and 0 is returned.
|
||||||
* 2. The merge successfully completes, producing a merge commit. local_tree
|
* 2. The merge successfully completes, producing a merge commit. local_tree
|
||||||
* contains the updated notes tree, the SHA1 of the resulting commit is
|
* contains the updated notes tree, the OID of the resulting commit is
|
||||||
* written into 'result_sha1', and 1 is returned.
|
* written into 'result_oid', and 1 is returned.
|
||||||
* 3. The merge results in conflicts. This is similar to #2 in that the
|
* 3. The merge results in conflicts. This is similar to #2 in that the
|
||||||
* partial merge result (i.e. merge result minus the unmerged entries)
|
* partial merge result (i.e. merge result minus the unmerged entries)
|
||||||
* are stored in 'local_tree', and the SHA1 or the resulting commit
|
* are stored in 'local_tree', and the OID or the resulting commit
|
||||||
* (to be amended when the conflicts have been resolved) is written into
|
* (to be amended when the conflicts have been resolved) is written into
|
||||||
* 'result_sha1'. The unmerged entries are written into the
|
* 'result_oid'. The unmerged entries are written into the
|
||||||
* .git/NOTES_MERGE_WORKTREE directory with conflict markers.
|
* .git/NOTES_MERGE_WORKTREE directory with conflict markers.
|
||||||
* -1 is returned.
|
* -1 is returned.
|
||||||
*
|
*
|
||||||
@ -52,7 +52,7 @@ void init_notes_merge_options(struct notes_merge_options *o);
|
|||||||
*/
|
*/
|
||||||
int notes_merge(struct notes_merge_options *o,
|
int notes_merge(struct notes_merge_options *o,
|
||||||
struct notes_tree *local_tree,
|
struct notes_tree *local_tree,
|
||||||
unsigned char *result_sha1);
|
struct object_id *result_oid);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Finalize conflict resolution from an earlier notes_merge()
|
* Finalize conflict resolution from an earlier notes_merge()
|
||||||
@ -62,13 +62,13 @@ int notes_merge(struct notes_merge_options *o,
|
|||||||
* call to notes_merge().
|
* call to notes_merge().
|
||||||
*
|
*
|
||||||
* This function will add the (now resolved) notes in .git/NOTES_MERGE_WORKTREE
|
* This function will add the (now resolved) notes in .git/NOTES_MERGE_WORKTREE
|
||||||
* to 'partial_tree', and create a final notes merge commit, the SHA1 of which
|
* to 'partial_tree', and create a final notes merge commit, the OID of which
|
||||||
* will be stored in 'result_sha1'.
|
* will be stored in 'result_oid'.
|
||||||
*/
|
*/
|
||||||
int notes_merge_commit(struct notes_merge_options *o,
|
int notes_merge_commit(struct notes_merge_options *o,
|
||||||
struct notes_tree *partial_tree,
|
struct notes_tree *partial_tree,
|
||||||
struct commit *partial_commit,
|
struct commit *partial_commit,
|
||||||
unsigned char *result_sha1);
|
struct object_id *result_oid);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Abort conflict resolution from an earlier notes_merge()
|
* Abort conflict resolution from an earlier notes_merge()
|
||||||
|
Reference in New Issue
Block a user