diff options
author | Ilari Liusvaara <ilari.liusvaara@elisanet.fi> | 2009-12-09 15:26:28 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-12-09 20:40:42 (GMT) |
commit | 28ed5b3524c1ee5245131691b783d897239f5b03 (patch) | |
tree | c39c412552734b84cd9c6c10144cb14b4919eb15 /transport-helper.c | |
parent | bf3c523c3fd641609adcef67dcec47a43a6abd60 (diff) | |
download | git-28ed5b3524c1ee5245131691b783d897239f5b03.zip git-28ed5b3524c1ee5245131691b783d897239f5b03.tar.gz git-28ed5b3524c1ee5245131691b783d897239f5b03.tar.bz2 |
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 a721dc2..4b17aaa 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) { |