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
This commit is contained in:
Junio C Hamano
2012-07-04 23:40:11 -07:00
4 changed files with 51 additions and 16 deletions

View File

@ -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;
}