http: allow custom index-pack args
Currently, when fetching, packfiles referenced by URIs are run through index-pack without any arguments other than --stdin and --keep, no matter what arguments are used for the packfile that is inline in the fetch response. As a preparation for ensuring that all packs (whether inline or not) use the same index-pack arguments, teach the http subsystem to allow custom index-pack arguments. http-fetch has been updated to use the new API. For now, it passes --keep alone instead of --keep with a process ID, but this is only temporary because http-fetch itself will be taught to accept index-pack parameters (instead of using a hardcoded constant) in a subsequent commit. Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
66e871b664
commit
726b25a91b
@ -43,6 +43,9 @@ static int fetch_using_walker(const char *raw_url, int get_verbosely,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *index_pack_args[] =
|
||||||
|
{"index-pack", "--stdin", "--keep", NULL};
|
||||||
|
|
||||||
static void fetch_single_packfile(struct object_id *packfile_hash,
|
static void fetch_single_packfile(struct object_id *packfile_hash,
|
||||||
const char *url) {
|
const char *url) {
|
||||||
struct http_pack_request *preq;
|
struct http_pack_request *preq;
|
||||||
@ -55,7 +58,8 @@ static void fetch_single_packfile(struct object_id *packfile_hash,
|
|||||||
if (preq == NULL)
|
if (preq == NULL)
|
||||||
die("couldn't create http pack request");
|
die("couldn't create http pack request");
|
||||||
preq->slot->results = &results;
|
preq->slot->results = &results;
|
||||||
preq->generate_keep = 1;
|
preq->index_pack_args = index_pack_args;
|
||||||
|
preq->preserve_index_pack_stdout = 1;
|
||||||
|
|
||||||
if (start_active_slot(preq->slot)) {
|
if (start_active_slot(preq->slot)) {
|
||||||
run_active_slot(preq->slot);
|
run_active_slot(preq->slot);
|
||||||
|
15
http.c
15
http.c
@ -2259,6 +2259,9 @@ void release_http_pack_request(struct http_pack_request *preq)
|
|||||||
free(preq);
|
free(preq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *default_index_pack_args[] =
|
||||||
|
{"index-pack", "--stdin", NULL};
|
||||||
|
|
||||||
int finish_http_pack_request(struct http_pack_request *preq)
|
int finish_http_pack_request(struct http_pack_request *preq)
|
||||||
{
|
{
|
||||||
struct child_process ip = CHILD_PROCESS_INIT;
|
struct child_process ip = CHILD_PROCESS_INIT;
|
||||||
@ -2270,17 +2273,15 @@ int finish_http_pack_request(struct http_pack_request *preq)
|
|||||||
|
|
||||||
tmpfile_fd = xopen(preq->tmpfile.buf, O_RDONLY);
|
tmpfile_fd = xopen(preq->tmpfile.buf, O_RDONLY);
|
||||||
|
|
||||||
strvec_push(&ip.args, "index-pack");
|
|
||||||
strvec_push(&ip.args, "--stdin");
|
|
||||||
ip.git_cmd = 1;
|
ip.git_cmd = 1;
|
||||||
ip.in = tmpfile_fd;
|
ip.in = tmpfile_fd;
|
||||||
if (preq->generate_keep) {
|
ip.argv = preq->index_pack_args ? preq->index_pack_args
|
||||||
strvec_pushf(&ip.args, "--keep=git %"PRIuMAX,
|
: default_index_pack_args;
|
||||||
(uintmax_t)getpid());
|
|
||||||
|
if (preq->preserve_index_pack_stdout)
|
||||||
ip.out = 0;
|
ip.out = 0;
|
||||||
} else {
|
else
|
||||||
ip.no_stdout = 1;
|
ip.no_stdout = 1;
|
||||||
}
|
|
||||||
|
|
||||||
if (run_command(&ip)) {
|
if (run_command(&ip)) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
10
http.h
10
http.h
@ -218,12 +218,12 @@ struct http_pack_request {
|
|||||||
char *url;
|
char *url;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this is true, finish_http_pack_request() will pass "--keep" to
|
* index-pack command to run. Must be terminated by NULL.
|
||||||
* index-pack, resulting in the creation of a keep file, and will not
|
*
|
||||||
* suppress its stdout (that is, the "keep\t<hash>\n" line will be
|
* If NULL, defaults to {"index-pack", "--stdin", NULL}.
|
||||||
* printed to stdout).
|
|
||||||
*/
|
*/
|
||||||
unsigned generate_keep : 1;
|
const char **index_pack_args;
|
||||||
|
unsigned preserve_index_pack_stdout : 1;
|
||||||
|
|
||||||
FILE *packfile;
|
FILE *packfile;
|
||||||
struct strbuf tmpfile;
|
struct strbuf tmpfile;
|
||||||
|
Loading…
Reference in New Issue
Block a user