summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2014-03-18 13:14:09 -0700
committerEdward Thomson <ethomson@microsoft.com>2014-03-20 09:25:10 -0700
commit97f3462ae699fae370cfa410ed58eb869ae6b276 (patch)
tree840b573fa746fd895086dd5d39d3de422cc165b2
parentd9fdee6e4cb87e4531d9ddba92b44e5323e794da (diff)
downloadlibgit2-97f3462ae699fae370cfa410ed58eb869ae6b276.tar.gz
git_merge_status -> git_merge_analysis
-rw-r--r--include/git2/merge.h23
-rw-r--r--src/merge.c10
-rw-r--r--tests/merge/workdir/analysis.c (renamed from tests/merge/workdir/status.c)45
3 files changed, 41 insertions, 37 deletions
diff --git a/include/git2/merge.h b/include/git2/merge.h
index a4432eef3..2cb8df36c 100644
--- a/include/git2/merge.h
+++ b/include/git2/merge.h
@@ -235,41 +235,44 @@ GIT_EXTERN(int) git_merge_init_options(
int version);
/**
- * The results of `git_merge_status` indicate the state of a merge scenario.
+ * The results of `git_merge_analysis` indicate the merge opportunities.
*/
typedef enum {
+ /** No merge is possible. (Unused.) */
+ GIT_MERGE_ANALYSIS_NONE = 0,
+
/**
* A "normal" merge; both HEAD and the given merge input have diverged
* from their common ancestor. The divergent commits must be merged.
*/
- GIT_MERGE_STATUS_NORMAL = 0,
+ GIT_MERGE_ANALYSIS_NORMAL = (1 << 0),
/**
* The repository is already up-to-date and no merge needs to be
* performed. The given merge input already exists as a parent of HEAD.
*/
- GIT_MERGE_STATUS_UP_TO_DATE = (1 << 0),
+ GIT_MERGE_ANALYSIS_UP_TO_DATE = (1 << 1),
/**
* The given merge input is a fast-forward from HEAD and no merge
* needs to be performed. Instead, the client can check out the
* given merge input.
*/
- GIT_MERGE_STATUS_FASTFORWARD = (1 << 1),
-} git_merge_status_t;
+ GIT_MERGE_ANALYSIS_FASTFORWARD = (1 << 2),
+} git_merge_analysis_t;
/**
- * Determine the status of the merge between the given branch(es) and the
- * HEAD of the repository.
+ * Analyzes the given branch(es) and determines the opportunities for
+ * merging them into the HEAD of the repository.
*
- * @param status_out status enumeration that the result is written into
+ * @param analysis_out analysis enumeration that the result is written into
* @param repo the repository to merge
* @param their_heads the heads to merge into
* @param their_heads_len the number of heads to merge
* @return 0 on success or error code
*/
-GIT_EXTERN(int) git_merge_status(
- git_merge_status_t *status_out,
+GIT_EXTERN(int) git_merge_analysis(
+ git_merge_analysis_t *analysis_out,
git_repository *repo,
const git_merge_head **their_heads,
size_t their_heads_len);
diff --git a/src/merge.c b/src/merge.c
index 66b8be684..6b416a3ef 100644
--- a/src/merge.c
+++ b/src/merge.c
@@ -2517,8 +2517,8 @@ done:
return error;
}
-int git_merge_status(
- git_merge_status_t *out,
+int git_merge_analysis(
+ git_merge_analysis_t *out,
git_repository *repo,
const git_merge_head **their_heads,
size_t their_heads_len)
@@ -2528,7 +2528,7 @@ int git_merge_status(
assert(out && repo && their_heads);
- *out = GIT_MERGE_STATUS_NORMAL;
+ *out = GIT_MERGE_ANALYSIS_NORMAL;
if ((error = merge_heads(&ancestor_head, &our_head, repo, their_heads, their_heads_len)) < 0)
goto done;
@@ -2536,11 +2536,11 @@ int git_merge_status(
if (their_heads_len == 1 && ancestor_head != NULL) {
/* We're up-to-date if we're trying to merge our own common ancestor. */
if (git_oid_equal(&ancestor_head->oid, &their_heads[0]->oid))
- *out = GIT_MERGE_STATUS_UP_TO_DATE;
+ *out = GIT_MERGE_ANALYSIS_UP_TO_DATE;
/* We're fastforwardable if we're our own common ancestor. */
else if (git_oid_equal(&ancestor_head->oid, &our_head->oid))
- *out = GIT_MERGE_STATUS_FASTFORWARD;
+ *out = GIT_MERGE_ANALYSIS_FASTFORWARD | GIT_MERGE_ANALYSIS_NORMAL;
}
done:
diff --git a/tests/merge/workdir/status.c b/tests/merge/workdir/analysis.c
index 589299eff..6a4b86d26 100644
--- a/tests/merge/workdir/status.c
+++ b/tests/merge/workdir/analysis.c
@@ -23,67 +23,68 @@ static git_index *repo_index;
// Fixture setup and teardown
-void test_merge_workdir_status__initialize(void)
+void test_merge_workdir_analysis__initialize(void)
{
repo = cl_git_sandbox_init(TEST_REPO_PATH);
git_repository_index(&repo_index, repo);
}
-void test_merge_workdir_status__cleanup(void)
+void test_merge_workdir_analysis__cleanup(void)
{
git_index_free(repo_index);
cl_git_sandbox_cleanup();
}
-static git_status_t status_from_branch(const char *branchname)
+static git_merge_analysis_t analysis_from_branch(const char *branchname)
{
git_buf refname = GIT_BUF_INIT;
git_reference *their_ref;
git_merge_head *their_heads[1];
- git_status_t status;
+ git_merge_analysis_t analysis;
git_buf_printf(&refname, "%s%s", GIT_REFS_HEADS_DIR, branchname);
cl_git_pass(git_reference_lookup(&their_ref, repo, git_buf_cstr(&refname)));
cl_git_pass(git_merge_head_from_ref(&their_heads[0], repo, their_ref));
- cl_git_pass(git_merge_status(&status, repo, their_heads, 1));
+ cl_git_pass(git_merge_analysis(&analysis, repo, their_heads, 1));
git_buf_free(&refname);
git_merge_head_free(their_heads[0]);
git_reference_free(their_ref);
- return status;
+ return analysis;
}
-void test_merge_workdir_status__fastforward(void)
+void test_merge_workdir_analysis__fastforward(void)
{
- git_merge_status_t status;
+ git_merge_analysis_t analysis;
- status = status_from_branch(FASTFORWARD_BRANCH);
- cl_assert_equal_i(GIT_MERGE_STATUS_FASTFORWARD, status);
+ analysis = analysis_from_branch(FASTFORWARD_BRANCH);
+ cl_assert_equal_i(GIT_MERGE_ANALYSIS_FASTFORWARD, (analysis & GIT_MERGE_ANALYSIS_FASTFORWARD));
+ cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL, (analysis & GIT_MERGE_ANALYSIS_NORMAL));
}
-void test_merge_workdir_status__no_fastforward(void)
+void test_merge_workdir_analysis__no_fastforward(void)
{
- git_merge_status_t status;
+ git_merge_analysis_t analysis;
- status = status_from_branch(NOFASTFORWARD_BRANCH);
- cl_assert_equal_i(GIT_MERGE_STATUS_NORMAL, status);
+ analysis = analysis_from_branch(NOFASTFORWARD_BRANCH);
+ cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL, analysis);
}
-void test_merge_workdir_status__uptodate(void)
+void test_merge_workdir_analysis__uptodate(void)
{
- git_merge_status_t status;
+ git_merge_analysis_t analysis;
- status = status_from_branch(UPTODATE_BRANCH);
- cl_assert_equal_i(GIT_MERGE_STATUS_UP_TO_DATE, status);
+ analysis = analysis_from_branch(UPTODATE_BRANCH);
+ cl_assert_equal_i(GIT_MERGE_ANALYSIS_UP_TO_DATE, analysis);
}
-void test_merge_workdir_status__uptodate_merging_prev_commit(void)
+void test_merge_workdir_analysis__uptodate_merging_prev_commit(void)
{
- git_merge_status_t status;
+ git_merge_analysis_t analysis;
- status = status_from_branch(PREVIOUS_BRANCH);
- cl_assert_equal_i(GIT_MERGE_STATUS_UP_TO_DATE, status);
+ analysis = analysis_from_branch(PREVIOUS_BRANCH);
+ cl_assert_equal_i(GIT_MERGE_ANALYSIS_UP_TO_DATE, analysis);
}