summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Germishuys <jacquesg@striata.com>2014-08-15 22:51:19 +0200
committerJacques Germishuys <jacquesg@striata.com>2014-08-15 22:56:15 +0200
commitdc8adda4f1430df3ab0144e4c14773445142104c (patch)
tree9d1ab9532079ba76a83baf107ecc0d98bc324bbd
parente1c4429038d9b8f260edcc17c6d7ec03959ad563 (diff)
downloadlibgit2-dc8adda4f1430df3ab0144e4c14773445142104c.tar.gz
git_remote_ls() should return an error if the transport is not available
-rw-r--r--src/remote.c7
-rw-r--r--tests/network/remote/local.c11
2 files changed, 18 insertions, 0 deletions
diff --git a/src/remote.c b/src/remote.c
index e9dafa0ea..433015f60 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -699,6 +699,11 @@ int git_remote_ls(const git_remote_head ***out, size_t *size, git_remote *remote
{
assert(remote);
+ if (!remote->transport) {
+ giterr_set(GITERR_NET, "No transport bound to this remote");
+ return -1;
+ }
+
return remote->transport->ls(out, size, remote->transport);
}
@@ -1942,6 +1947,8 @@ int git_remote_default_branch(git_buf *out, git_remote *remote)
size_t heads_len, i;
int error;
+ assert(out);
+
if ((error = git_remote_ls(&heads, &heads_len, remote)) < 0)
return error;
diff --git a/tests/network/remote/local.c b/tests/network/remote/local.c
index 75f767980..f1084fc38 100644
--- a/tests/network/remote/local.c
+++ b/tests/network/remote/local.c
@@ -55,6 +55,17 @@ void test_network_remote_local__retrieve_advertised_references(void)
cl_assert_equal_i(refs_len, 28);
}
+void test_network_remote_local__retrieve_advertised_before_connect(void)
+{
+ const git_remote_head **refs;
+ size_t refs_len = 0;
+
+ git_buf_sets(&file_path_buf, cl_git_path_url(cl_fixture("testrepo.git")));
+
+ cl_git_pass(git_remote_create_anonymous(&remote, repo, git_buf_cstr(&file_path_buf), NULL));
+ cl_git_fail(git_remote_ls(&refs, &refs_len, remote));
+}
+
void test_network_remote_local__retrieve_advertised_references_after_disconnect(void)
{
const git_remote_head **refs;