]> git.proxmox.com Git - libgit2.git/commitdiff
Introduce git_merge_head_id
authorEdward Thomson <ethomson@microsoft.com>
Mon, 31 Mar 2014 02:56:18 +0000 (19:56 -0700)
committerEdward Thomson <ethomson@edwardthomson.com>
Mon, 31 Mar 2014 16:43:38 +0000 (11:43 -0500)
include/git2/merge.h
src/merge.c
tests/merge/workdir/setup.c

index 21159d83292e48171db0a972d9b9d6a264d62b0e..939f202148b8e1368e18ebd6f058502df9effed3 100644 (file)
@@ -375,6 +375,15 @@ GIT_EXTERN(int) git_merge_head_from_id(
        git_repository *repo,
        const git_oid *id);
 
+/**
+ * Gets the commit ID that the given `git_merge_head` refers to.
+ *
+ * @param id pointer to commit id to be filled in
+ * @param head the given merge head
+ */
+GIT_EXTERN(const git_oid *) git_merge_head_id(
+       const git_merge_head *head);
+
 /**
  * Frees a `git_merge_head`.
  *
index 24b7d37ce7a66b2384bd903098f97b92ae4c1bfe..f9ed7b0a3c19ccf6def828d406e0a74c91823225 100644 (file)
@@ -2736,6 +2736,14 @@ int git_merge_head_from_fetchhead(
        return merge_head_init(out, repo, branch_name, remote_url, oid);
 }
 
+const git_oid *git_merge_head_id(
+       const git_merge_head *head)
+{
+       assert(head);
+
+       return &head->oid;
+}
+
 void git_merge_head_free(git_merge_head *head)
 {
        if (head == NULL)
index 49b38b2468d3619746f3eaad452bdb23cc9dbbe2..a0028ec6d582cb309f6445daaac692fff7a5e248 100644 (file)
@@ -881,6 +881,33 @@ void test_merge_workdir_setup__two_remotes(void)
        git_merge_head_free(their_heads[3]);
 }
 
+void test_merge_workdir_setup__id_from_head(void)
+{
+       git_oid expected_id;
+       const git_oid *id;
+       git_reference *ref;
+       git_merge_head *heads[3];
+
+       cl_git_pass(git_oid_fromstr(&expected_id, OCTO1_OID));
+       cl_git_pass(git_merge_head_from_fetchhead(&heads[0], repo, GIT_REFS_HEADS_DIR OCTO1_BRANCH, "http://remote.url/repo.git", &expected_id));
+       id = git_merge_head_id(heads[0]);
+       cl_assert_equal_i(1, git_oid_equal(id, &expected_id));
+
+       cl_git_pass(git_merge_head_from_id(&heads[1], repo, &expected_id));
+       id = git_merge_head_id(heads[1]);
+       cl_assert_equal_i(1, git_oid_equal(id, &expected_id));
+
+       cl_git_pass(git_reference_lookup(&ref, repo, GIT_REFS_HEADS_DIR OCTO1_BRANCH));
+       cl_git_pass(git_merge_head_from_ref(&heads[2], repo, ref));
+       id = git_merge_head_id(heads[2]);
+       cl_assert_equal_i(1, git_oid_equal(id, &expected_id));
+
+       git_reference_free(ref);
+       git_merge_head_free(heads[0]);
+       git_merge_head_free(heads[1]);
+       git_merge_head_free(heads[2]);
+}
+
 struct merge_head_cb_data {
        const char **oid_str;
        unsigned int len;