diff options
author | Ilari Liusvaara <ilari.liusvaara@elisanet.fi> | 2009-12-09 17:26:28 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-12-09 12:40:42 -0800 |
commit | 28ed5b3524c1ee5245131691b783d897239f5b03 (patch) | |
tree | c39c412552734b84cd9c6c10144cb14b4919eb15 /transport-helper.c | |
parent | bf3c523c3fd641609adcef67dcec47a43a6abd60 (diff) | |
download | git-28ed5b3524c1ee5245131691b783d897239f5b03.tar.gz |
Support mandatory capabilities
Add support for marking capability as mandatory for hosting git version
to understand. This is useful for helpers which require various types
of assistance from main git binary.
Signed-off-by: Ilari Liusvaara <ilari.liusvaara@elisanet.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
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) { |