Skip to content

Commit

Permalink
Allow fetch--tool to read from stdin
Browse files Browse the repository at this point in the history
If the reflist is "-" then read the reflist data from stdin instead,
this will allow the passing of more than 128K of reflist data - which
won't fit in the environment passed by execve.

Signed-off-by: Julian Phillips <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
Julian Phillips authored and Junio C Hamano committed Feb 14, 2007
1 parent 8655158 commit 46ce8b6
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions builtin-fetch--tool.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,21 @@
#include "refs.h"
#include "commit.h"

#define CHUNK_SIZE (1048576)

static char *get_stdin(void)
{
char *data = xmalloc(CHUNK_SIZE);
int offset = 0, read = 0;
read = xread(0, data, CHUNK_SIZE);
while (read == CHUNK_SIZE) {
offset += CHUNK_SIZE;
data = xrealloc(data, offset + CHUNK_SIZE);
read = xread(0, data + offset, CHUNK_SIZE);
}
return data;
}

static void show_new(char *type, unsigned char *sha1_new)
{
fprintf(stderr, " %s: %s\n", type,
Expand Down Expand Up @@ -461,14 +476,22 @@ int cmd_fetch__tool(int argc, const char **argv, const char *prefix)
return result;
}
if (!strcmp("parse-reflist", argv[1])) {
const char *reflist;
if (argc != 3)
return error("parse-reflist takes 1 arg");
return parse_reflist(argv[2]);
reflist = argv[2];
if (!strcmp(reflist, "-"))
reflist = get_stdin();
return parse_reflist(reflist);
}
if (!strcmp("expand-refs-wildcard", argv[1])) {
const char *reflist;
if (argc < 4)
return error("expand-refs-wildcard takes at least 2 args");
return expand_refs_wildcard(argv[2], argc - 3, argv + 3);
reflist = argv[2];
if (!strcmp(reflist, "-"))
reflist = get_stdin();
return expand_refs_wildcard(reflist, argc - 3, argv + 3);
}

return error("Unknown subcommand: %s", argv[1]);
Expand Down

0 comments on commit 46ce8b6

Please sign in to comment.