summaryrefslogtreecommitdiff
path: root/connect.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-07-04 23:40:11 -0700
committerJunio C Hamano <gitster@pobox.com>2012-07-04 23:40:12 -0700
commit348c44e78eb079fa97a575f8fb8c1fcac747efe5 (patch)
treed165e016cd3067b04f0b6c4edb155ff423d84b0e /connect.c
parentb12905140a8239ac687450ad43f18b5f0bcfb62e (diff)
parent46284dd1528d7bff53a4ef7c398648da91ea0842 (diff)
downloadgit-348c44e78eb079fa97a575f8fb8c1fcac747efe5.tar.gz
Merge branch 'hv/remote-end-hung-up'
When we get disconnected while expecting a response from the remote side because authentication failed, we issued an error message "The remote side hung up unexpectedly." Give hint that it may be a permission problem in the message when we can reasonably suspect it. * hv/remote-end-hung-up: remove the impression of unexpectedness when access is denied
Diffstat (limited to 'connect.c')
-rw-r--r--connect.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/connect.c b/connect.c
index 41b7400aa9..55a85adea9 100644
--- a/connect.c
+++ b/connect.c
@@ -49,6 +49,16 @@ static void add_extra_have(struct extra_have_objects *extra, unsigned char *sha1
extra->nr++;
}
+static void die_initial_contact(int got_at_least_one_head)
+{
+ if (got_at_least_one_head)
+ die("The remote end hung up upon initial contact");
+ else
+ die("Could not read from remote repository.\n\n"
+ "Please make sure you have the correct access rights\n"
+ "and the repository exists.");
+}
+
/*
* Read all the refs from the other end
*/
@@ -56,6 +66,8 @@ struct ref **get_remote_heads(int in, struct ref **list,
unsigned int flags,
struct extra_have_objects *extra_have)
{
+ int got_at_least_one_head = 0;
+
*list = NULL;
for (;;) {
struct ref *ref;
@@ -64,7 +76,10 @@ struct ref **get_remote_heads(int in, struct ref **list,
char *name;
int len, name_len;
- len = packet_read_line(in, buffer, sizeof(buffer));
+ len = packet_read(in, buffer, sizeof(buffer));
+ if (len < 0)
+ die_initial_contact(got_at_least_one_head);
+
if (!len)
break;
if (buffer[len-1] == '\n')
@@ -95,6 +110,7 @@ struct ref **get_remote_heads(int in, struct ref **list,
hashcpy(ref->old_sha1, old_sha1);
*list = ref;
list = &ref->next;
+ got_at_least_one_head = 1;
}
return list;
}