summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/branch.c6
-rw-r--r--tests/refs/branches/upstream.c16
2 files changed, 22 insertions, 0 deletions
diff --git a/src/branch.c b/src/branch.c
index 01402a2e9..b4e4b0564 100644
--- a/src/branch.c
+++ b/src/branch.c
@@ -400,6 +400,12 @@ int git_branch_upstream_remote(git_buf *buf, git_repository *repo, const char *r
if ((error = retrieve_upstream_configuration(&str, cfg, refname, "branch.%s.remote")) < 0)
goto cleanup;
+ if (!*str) {
+ giterr_set(GITERR_REFERENCE, "branch '%s' does not have an upstream remote", refname);
+ error = GIT_ENOTFOUND;
+ goto cleanup;
+ }
+
error = git_buf_puts(buf, str);
cleanup:
diff --git a/tests/refs/branches/upstream.c b/tests/refs/branches/upstream.c
index abf7933d3..b20b93753 100644
--- a/tests/refs/branches/upstream.c
+++ b/tests/refs/branches/upstream.c
@@ -70,6 +70,22 @@ void test_refs_branches_upstream__upstream_remote(void)
git_buf_free(&buf);
}
+void test_refs_branches_upstream__upstream_remote_empty_value(void)
+{
+ git_repository *repository;
+ git_config *cfg;
+ git_buf buf = GIT_BUF_INIT;
+
+ repository = cl_git_sandbox_init("testrepo.git");
+ cl_git_pass(git_repository_config(&cfg, repository));
+ cl_git_pass(git_config_set_string(cfg, "branch.master.remote", ""));
+ cl_git_fail_with(GIT_ENOTFOUND, git_branch_upstream_remote(&buf, repository, "refs/heads/master"));
+
+ cl_git_pass(git_config_delete_entry(cfg, "branch.master.remote"));
+ cl_git_fail_with(GIT_ENOTFOUND, git_branch_upstream_remote(&buf, repository, "refs/heads/master"));
+ cl_git_sandbox_cleanup();
+}
+
static void assert_merge_and_or_remote_key_missing(git_repository *repository, const git_commit *target, const char *entry_name)
{
git_reference *branch;