summaryrefslogtreecommitdiff
path: root/tests-clar
diff options
context:
space:
mode:
authorVicent Martí <vicent@github.com>2013-02-22 09:48:47 -0800
committerVicent Martí <vicent@github.com>2013-02-22 09:48:47 -0800
commit06eaa06f2687d0a27b1df48b5233834952c2cb1e (patch)
treed4bd0c727771a0965dc8689940203454f32b99b8 /tests-clar
parent698bf1da0e02ada06ded9277ce43f429ce789975 (diff)
parentbbc53e4f93542ad442d9d491563ddacaf9ae9b12 (diff)
downloadlibgit2-06eaa06f2687d0a27b1df48b5233834952c2cb1e.tar.gz
Merge pull request #1343 from nulltoken/topic/remote_orphaned_branch
Teach git_branch_remote_name() to work with orphaned heads
Diffstat (limited to 'tests-clar')
-rw-r--r--tests-clar/clone/empty.c20
-rw-r--r--tests-clar/refs/branches/remote.c86
2 files changed, 40 insertions, 66 deletions
diff --git a/tests-clar/clone/empty.c b/tests-clar/clone/empty.c
index e611bc24e..0f867257a 100644
--- a/tests-clar/clone/empty.c
+++ b/tests-clar/clone/empty.c
@@ -34,7 +34,9 @@ static void cleanup_repository(void *path)
void test_clone_empty__can_clone_an_empty_local_repo_barely(void)
{
char *local_name = "refs/heads/master";
- char tracking_name[1024];
+ const char *expected_tracked_branch_name = "refs/remotes/origin/master";
+ const char *expected_remote_name = "origin";
+ char buffer[1024];
git_reference *ref;
cl_set_cleanup(&cleanup_repository, "./empty");
@@ -46,8 +48,20 @@ void test_clone_empty__can_clone_an_empty_local_repo_barely(void)
cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&ref, g_repo_cloned, local_name));
/* ...one can still retrieve the name of the remote tracking reference */
- cl_assert_equal_i((int)strlen("refs/remotes/origin/master") + 1U,
- git_branch_tracking_name(tracking_name, 1024, g_repo_cloned, local_name));
+ cl_assert_equal_i((int)strlen(expected_tracked_branch_name) + 1,
+ git_branch_tracking_name(buffer, 1024, g_repo_cloned, local_name));
+
+ cl_assert_equal_s(expected_tracked_branch_name, buffer);
+
+ /* ...and the name of the remote... */
+ cl_assert_equal_i((int)strlen(expected_remote_name) + 1,
+ git_branch_remote_name(buffer, 1024, g_repo_cloned, expected_tracked_branch_name));
+
+ cl_assert_equal_s(expected_remote_name, buffer);
+
+ /* ...even when the remote HEAD is orphaned as well */
+ cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&ref, g_repo_cloned,
+ expected_tracked_branch_name));
}
void test_clone_empty__can_clone_an_empty_local_repo(void)
diff --git a/tests-clar/refs/branches/remote.c b/tests-clar/refs/branches/remote.c
index be355af46..145c3182f 100644
--- a/tests-clar/refs/branches/remote.c
+++ b/tests-clar/refs/branches/remote.c
@@ -3,18 +3,15 @@
#include "remote.h"
static git_repository *g_repo;
-
-static const char *current_master_tip = "099fabac3a9ea935598528c27f866e34089c2eff";
+static const char *remote_tracking_branch_name = "refs/remotes/test/master";
+static const char *expected_remote_name = "test";
+static int expected_remote_name_length;
void test_refs_branches_remote__initialize(void)
{
- git_oid id;
-
g_repo = cl_git_sandbox_init("testrepo");
- git_oid_fromstr(&id, current_master_tip);
- /* Create test/master */
- git_reference_create(NULL, g_repo, "refs/remotes/test/master", &id, 1);
+ expected_remote_name_length = strlen(expected_remote_name) + 1;
}
void test_refs_branches_remote__cleanup(void)
@@ -24,81 +21,48 @@ void test_refs_branches_remote__cleanup(void)
void test_refs_branches_remote__can_get_remote_for_branch(void)
{
- git_reference *ref;
- const char *name;
- char *expectedRemoteName = "test";
- int expectedRemoteNameLength = strlen(expectedRemoteName) + 1;
char remotename[1024] = {0};
- cl_git_pass(git_branch_lookup(&ref, g_repo, "test/master", GIT_BRANCH_REMOTE));
- cl_git_pass(git_branch_name(&name, ref));
- cl_assert_equal_s("test/master", name);
+ cl_assert_equal_i(expected_remote_name_length,
+ git_branch_remote_name(NULL, 0, g_repo, remote_tracking_branch_name));
- cl_assert_equal_i(expectedRemoteNameLength,
- git_branch_remote_name(NULL, 0, g_repo, ref));
- cl_assert_equal_i(expectedRemoteNameLength,
- git_branch_remote_name(remotename, expectedRemoteNameLength, g_repo, ref));
- cl_assert_equal_s("test", remotename);
+ cl_assert_equal_i(expected_remote_name_length,
+ git_branch_remote_name(remotename, expected_remote_name_length, g_repo,
+ remote_tracking_branch_name));
- git_reference_free(ref);
+ cl_assert_equal_s("test", remotename);
}
void test_refs_branches_remote__insufficient_buffer_returns_error(void)
{
- git_reference *ref;
- const char *name;
- char *expectedRemoteName = "test";
- int expectedRemoteNameLength = strlen(expectedRemoteName) + 1;
char remotename[1024] = {0};
- cl_git_pass(git_branch_lookup(&ref, g_repo, "test/master", GIT_BRANCH_REMOTE));
- cl_git_pass(git_branch_name(&name, ref));
- cl_assert_equal_s("test/master", name);
-
- cl_assert_equal_i(expectedRemoteNameLength,
- git_branch_remote_name(NULL, 0, g_repo, ref));
- cl_git_fail_with(GIT_ERROR,
- git_branch_remote_name(remotename, expectedRemoteNameLength - 1, g_repo, ref));
+ cl_assert_equal_i(expected_remote_name_length,
+ git_branch_remote_name(NULL, 0, g_repo, remote_tracking_branch_name));
- git_reference_free(ref);
+ cl_git_fail_with(git_branch_remote_name(remotename,
+ expected_remote_name_length - 1, g_repo, remote_tracking_branch_name),
+ GIT_ERROR);
}
void test_refs_branches_remote__no_matching_remote_returns_error(void)
{
- git_reference *ref;
- const char *name;
- git_oid id;
+ const char *unknown = "refs/remotes/nonexistent/master";
- git_oid_fromstr(&id, current_master_tip);
-
- /* Create nonexistent/master */
- git_reference_create(NULL, g_repo, "refs/remotes/nonexistent/master", &id, 1);
-
- cl_git_pass(git_branch_lookup(&ref, g_repo,"nonexistent/master", GIT_BRANCH_REMOTE));
- cl_git_pass(git_branch_name(&name, ref));
- cl_assert_equal_s("nonexistent/master", name);
-
- cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_ENOTFOUND);
- git_reference_free(ref);
+ cl_git_fail_with(git_branch_remote_name(
+ NULL, 0, g_repo, unknown), GIT_ENOTFOUND);
}
void test_refs_branches_remote__local_remote_returns_error(void)
{
- git_reference *ref;
- const char *name;
+ const char *local = "refs/heads/master";
- cl_git_pass(git_branch_lookup(&ref,g_repo, "master", GIT_BRANCH_LOCAL));
- cl_git_pass(git_branch_name(&name, ref));
- cl_assert_equal_s("master",name);
-
- cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_ERROR);
- git_reference_free(ref);
+ cl_git_fail_with(git_branch_remote_name(
+ NULL, 0, g_repo, local), GIT_ERROR);
}
void test_refs_branches_remote__ambiguous_remote_returns_error(void)
{
- git_reference *ref;
- const char *name;
git_remote *remote;
/* Create the remote */
@@ -110,10 +74,6 @@ void test_refs_branches_remote__ambiguous_remote_returns_error(void)
git_remote_free(remote);
- cl_git_pass(git_branch_lookup(&ref,g_repo, "test/master", GIT_BRANCH_REMOTE));
- cl_git_pass(git_branch_name(&name, ref));
- cl_assert_equal_s("test/master", name);
-
- cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_EAMBIGUOUS);
- git_reference_free(ref);
+ cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo,
+ remote_tracking_branch_name), GIT_EAMBIGUOUS);
}