From 3e199f428513fbf04b126d536409deae1c6d045f Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Wed, 1 May 2013 04:18:46 -0700 Subject: [PATCH] Set error message for branch functions There were a couple of places where an error was being returned from branch related code but no error message was being set. --- src/branch.c | 14 ++++++++++++-- tests-clar/refs/branches/remote.c | 6 ++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/branch.c b/src/branch.c index 88f052529..ab661f422 100644 --- a/src/branch.c +++ b/src/branch.c @@ -185,7 +185,7 @@ int git_branch_move( git_buf_cstr(&old_config_section), git_buf_cstr(&new_config_section))) < 0) goto done; - + if ((error = git_reference_rename(out, branch, git_buf_cstr(&new_reference_name), force)) < 0) goto done; @@ -276,6 +276,8 @@ int git_branch_upstream__name( goto cleanup; if (!*remote_name || !*merge_name) { + giterr_set(GITERR_REFERENCE, + "branch '%s' does not have an upstream", canonical_branch_name); error = GIT_ENOTFOUND; goto cleanup; } @@ -342,6 +344,9 @@ static int remote_name(git_buf *buf, git_repository *repo, const char *canonical remote_name = remote_list.strings[i]; } else { git_remote_free(remote); + + giterr_set(GITERR_REFERENCE, + "Reference '%s' is ambiguous", canonical_branch_name); error = GIT_EAMBIGUOUS; goto cleanup; } @@ -354,6 +359,8 @@ static int remote_name(git_buf *buf, git_repository *repo, const char *canonical git_buf_clear(buf); error = git_buf_puts(buf, remote_name); } else { + giterr_set(GITERR_REFERENCE, + "Could not determine remote for '%s'", canonical_branch_name); error = GIT_ENOTFOUND; } @@ -490,8 +497,11 @@ int git_branch_set_upstream(git_reference *branch, const char *upstream_name) local = 1; else if (git_branch_lookup(&upstream, repo, upstream_name, GIT_BRANCH_REMOTE) == 0) local = 0; - else + else { + giterr_set(GITERR_REFERENCE, + "Cannot set upstream for branch '%s'", shortname); return GIT_ENOTFOUND; + } /* * If it's local, the remote is "." and the branch name is diff --git a/tests-clar/refs/branches/remote.c b/tests-clar/refs/branches/remote.c index 6043828b3..c110adb33 100644 --- a/tests-clar/refs/branches/remote.c +++ b/tests-clar/refs/branches/remote.c @@ -49,16 +49,20 @@ void test_refs_branches_remote__no_matching_remote_returns_error(void) { const char *unknown = "refs/remotes/nonexistent/master"; + giterr_clear(); cl_git_fail_with(git_branch_remote_name( NULL, 0, g_repo, unknown), GIT_ENOTFOUND); + cl_assert(giterr_last() != NULL); } void test_refs_branches_remote__local_remote_returns_error(void) { const char *local = "refs/heads/master"; + giterr_clear(); cl_git_fail_with(git_branch_remote_name( NULL, 0, g_repo, local), GIT_ERROR); + cl_assert(giterr_last() != NULL); } void test_refs_branches_remote__ambiguous_remote_returns_error(void) @@ -75,6 +79,8 @@ void test_refs_branches_remote__ambiguous_remote_returns_error(void) git_remote_free(remote); + giterr_clear(); cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, remote_tracking_branch_name), GIT_EAMBIGUOUS); + cl_assert(giterr_last() != NULL); }