diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-07-04 23:40:11 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-07-04 23:40:12 -0700 |
commit | 348c44e78eb079fa97a575f8fb8c1fcac747efe5 (patch) | |
tree | d165e016cd3067b04f0b6c4edb155ff423d84b0e /connect.c | |
parent | b12905140a8239ac687450ad43f18b5f0bcfb62e (diff) | |
parent | 46284dd1528d7bff53a4ef7c398648da91ea0842 (diff) | |
download | git-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.c | 18 |
1 files changed, 17 insertions, 1 deletions
@@ -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; } |