Skip to content

Commit

Permalink
Support mandatory capabilities
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ilari Liusvaara authored and Junio C Hamano committed Dec 9, 2009
1 parent bf3c523 commit 28ed5b3
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
5 changes: 4 additions & 1 deletion Documentation/git-remote-helpers.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ Commands are given by the caller on the helper's standard input, one per line.

'capabilities'::
Lists the capabilities of the helper, one per line, ending
with a blank line.
with a blank line. Each capability may be preceeded with '*'.
This marks them mandatory for git version using the remote
helper to understand (unknown mandatory capability is fatal
error).

'list'::
Lists the refs, one per line, in the format "<value> <name>
Expand Down
25 changes: 19 additions & 6 deletions transport-helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 28ed5b3

Please sign in to comment.