summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2013-03-30 09:30:29 +0100
committerCarlos Martín Nieto <cmn@dwim.me>2013-03-31 12:51:53 +0200
commit97016f29ab2359da5c59e2acae6369794fceb9d4 (patch)
tree891c8062cce0c3a3afce5eda864be9d7e0bc16e5
parenta258d8e3574c4e993bf16e0c136d1a5fbc356728 (diff)
downloadlibgit2-97016f29ab2359da5c59e2acae6369794fceb9d4.tar.gz
branch: refactor git_branch_remote_name
Return the size we'd need to write to instead of simply an error. Split the function into two to be used later by the upstream configuration functions.
-rw-r--r--src/branch.c47
-rw-r--r--tests-clar/refs/branches/remote.c2
2 files changed, 23 insertions, 26 deletions
diff --git a/src/branch.c b/src/branch.c
index 56c63a82a..3b5d1d3c7 100644
--- a/src/branch.c
+++ b/src/branch.c
@@ -305,23 +305,16 @@ cleanup:
return error;
}
-int git_branch_remote_name(
- char *remote_name_out,
- size_t buffer_size,
- git_repository *repo,
- const char *canonical_branch_name)
+static int remote_name(git_buf *buf, git_repository *repo, const char *canonical_branch_name)
{
git_strarray remote_list = {0};
- size_t i, remote_name_size;
+ size_t i;
git_remote *remote;
const git_refspec *fetchspec;
int error = 0;
char *remote_name = NULL;
- assert(repo && canonical_branch_name);
-
- if (remote_name_out && buffer_size)
- *remote_name_out = '\0';
+ assert(buf && repo && canonical_branch_name);
/* Verify that this is a remote branch */
if (!git_reference__is_remote(canonical_branch_name)) {
@@ -362,23 +355,10 @@ int git_branch_remote_name(
}
if (remote_name) {
- remote_name_size = strlen(remote_name) + 1;
- error = (int) remote_name_size;
-
- if (remote_name_out) {
- if(remote_name_size > buffer_size) {
- giterr_set(
- GITERR_INVALID,
- "Buffer too short to hold the remote name.");
- error = GIT_ERROR;
- goto cleanup;
- }
-
- memcpy(remote_name_out, remote_name, remote_name_size);
- }
+ git_buf_clear(buf);
+ error = git_buf_puts(buf, remote_name);
} else {
error = GIT_ENOTFOUND;
- goto cleanup;
}
cleanup:
@@ -386,6 +366,23 @@ cleanup:
return error;
}
+int git_branch_remote_name(char *buffer, size_t buffer_len, git_repository *repo, const char *refname)
+{
+ int ret;
+ git_buf buf = GIT_BUF_INIT;
+
+ if ((ret = remote_name(&buf, repo, refname)) < 0)
+ return ret;
+
+ if (buffer)
+ git_buf_copy_cstr(buffer, buffer_len, &buf);
+
+ ret = git_buf_len(&buf) + 1;
+ git_buf_free(&buf);
+
+ return ret;
+}
+
int git_branch_upstream_name(
char *tracking_branch_name_out,
size_t buffer_size,
diff --git a/tests-clar/refs/branches/remote.c b/tests-clar/refs/branches/remote.c
index 5272d1236..2beef3724 100644
--- a/tests-clar/refs/branches/remote.c
+++ b/tests-clar/refs/branches/remote.c
@@ -42,7 +42,7 @@ void test_refs_branches_remote__insufficient_buffer_returns_error(void)
cl_git_fail_with(git_branch_remote_name(remotename,
expected_remote_name_length - 1, g_repo, remote_tracking_branch_name),
- GIT_ERROR);
+ expected_remote_name_length);
}
void test_refs_branches_remote__no_matching_remote_returns_error(void)