diff options
Diffstat (limited to 'transport-helper.c')
-rw-r--r-- | transport-helper.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/transport-helper.c b/transport-helper.c index a721dc25be..4b17aaa237 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -93,25 +93,38 @@ static struct child_process *get_helper(struct transport *transport) data->out = xfdopen(helper->out, "r"); while (1) { + const char *capname; + int mandatory = 0; recvline(data, &buf); if (!*buf.buf) break; + + if (*buf.buf == '*') { + capname = buf.buf + 1; + mandatory = 1; + } else + capname = buf.buf; + if (debug) - fprintf(stderr, "Debug: Got cap %s\n", buf.buf); - if (!strcmp(buf.buf, "fetch")) + fprintf(stderr, "Debug: Got cap %s\n", capname); + if (!strcmp(capname, "fetch")) data->fetch = 1; - if (!strcmp(buf.buf, "option")) + else if (!strcmp(capname, "option")) data->option = 1; - if (!strcmp(buf.buf, "push")) + else if (!strcmp(capname, "push")) data->push = 1; - if (!strcmp(buf.buf, "import")) + else if (!strcmp(capname, "import")) data->import = 1; - if (!data->refspecs && !prefixcmp(buf.buf, "refspec ")) { + else if (!data->refspecs && !prefixcmp(capname, "refspec ")) { ALLOC_GROW(refspecs, refspec_nr + 1, refspec_alloc); refspecs[refspec_nr++] = strdup(buf.buf + strlen("refspec ")); + } else if (mandatory) { + die("Unknown madatory capability %s. This remote " + "helper probably needs newer version of Git.\n", + capname); } } if (refspecs) { |