mirror of
https://github.com/git/git.git
synced 2024-06-10 12:16:12 +02:00
http-fetch: allow custom index-pack args
This is the next step in teaching fetch-pack to pass its index-pack arguments when processing packfiles referenced by URIs. The "--keep" in fetch-pack.c will be replaced with a full message 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
726b25a91b
commit
27e35ba6c6
|
@ -41,11 +41,17 @@ commit-id::
|
||||||
<commit-id>['\t'<filename-as-in--w>]
|
<commit-id>['\t'<filename-as-in--w>]
|
||||||
|
|
||||||
--packfile=<hash>::
|
--packfile=<hash>::
|
||||||
Instead of a commit id on the command line (which is not expected in
|
For internal use only. Instead of a commit id on the command
|
||||||
|
line (which is not expected in
|
||||||
this case), 'git http-fetch' fetches the packfile directly at the given
|
this case), 'git http-fetch' fetches the packfile directly at the given
|
||||||
URL and uses index-pack to generate corresponding .idx and .keep files.
|
URL and uses index-pack to generate corresponding .idx and .keep files.
|
||||||
The hash is used to determine the name of the temporary file and is
|
The hash is used to determine the name of the temporary file and is
|
||||||
arbitrary. The output of index-pack is printed to stdout.
|
arbitrary. The output of index-pack is printed to stdout. Requires
|
||||||
|
--index-pack-args.
|
||||||
|
|
||||||
|
--index-pack-args=<args>::
|
||||||
|
For internal use only. The command to run on the contents of the
|
||||||
|
downloaded pack. Arguments are URL-encoded separated by spaces.
|
||||||
|
|
||||||
--recover::
|
--recover::
|
||||||
Verify that everything reachable from target is fetched. Used after
|
Verify that everything reachable from target is fetched. Used after
|
||||||
|
|
|
@ -1645,6 +1645,9 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
|
||||||
strvec_pushf(&cmd.args, "--packfile=%.*s",
|
strvec_pushf(&cmd.args, "--packfile=%.*s",
|
||||||
(int) the_hash_algo->hexsz,
|
(int) the_hash_algo->hexsz,
|
||||||
packfile_uris.items[i].string);
|
packfile_uris.items[i].string);
|
||||||
|
strvec_push(&cmd.args, "--index-pack-arg=index-pack");
|
||||||
|
strvec_push(&cmd.args, "--index-pack-arg=--stdin");
|
||||||
|
strvec_push(&cmd.args, "--index-pack-arg=--keep");
|
||||||
strvec_push(&cmd.args, uri);
|
strvec_push(&cmd.args, uri);
|
||||||
cmd.git_cmd = 1;
|
cmd.git_cmd = 1;
|
||||||
cmd.no_stdin = 1;
|
cmd.no_stdin = 1;
|
||||||
|
|
20
http-fetch.c
20
http-fetch.c
|
@ -3,6 +3,7 @@
|
||||||
#include "exec-cmd.h"
|
#include "exec-cmd.h"
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
#include "walker.h"
|
#include "walker.h"
|
||||||
|
#include "strvec.h"
|
||||||
|
|
||||||
static const char http_fetch_usage[] = "git http-fetch "
|
static const char http_fetch_usage[] = "git http-fetch "
|
||||||
"[-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin | --packfile=hash | commit-id] url";
|
"[-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin | --packfile=hash | commit-id] url";
|
||||||
|
@ -43,11 +44,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,
|
||||||
|
const char **index_pack_args) {
|
||||||
struct http_pack_request *preq;
|
struct http_pack_request *preq;
|
||||||
struct slot_results results;
|
struct slot_results results;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -90,6 +89,7 @@ int cmd_main(int argc, const char **argv)
|
||||||
int packfile = 0;
|
int packfile = 0;
|
||||||
int nongit;
|
int nongit;
|
||||||
struct object_id packfile_hash;
|
struct object_id packfile_hash;
|
||||||
|
struct strvec index_pack_args = STRVEC_INIT;
|
||||||
|
|
||||||
setup_git_directory_gently(&nongit);
|
setup_git_directory_gently(&nongit);
|
||||||
|
|
||||||
|
@ -116,6 +116,8 @@ int cmd_main(int argc, const char **argv)
|
||||||
packfile = 1;
|
packfile = 1;
|
||||||
if (parse_oid_hex(p, &packfile_hash, &end) || *end)
|
if (parse_oid_hex(p, &packfile_hash, &end) || *end)
|
||||||
die(_("argument to --packfile must be a valid hash (got '%s')"), p);
|
die(_("argument to --packfile must be a valid hash (got '%s')"), p);
|
||||||
|
} else if (skip_prefix(argv[arg], "--index-pack-arg=", &p)) {
|
||||||
|
strvec_push(&index_pack_args, p);
|
||||||
}
|
}
|
||||||
arg++;
|
arg++;
|
||||||
}
|
}
|
||||||
|
@ -128,10 +130,18 @@ int cmd_main(int argc, const char **argv)
|
||||||
git_config(git_default_config, NULL);
|
git_config(git_default_config, NULL);
|
||||||
|
|
||||||
if (packfile) {
|
if (packfile) {
|
||||||
fetch_single_packfile(&packfile_hash, argv[arg]);
|
if (!index_pack_args.nr)
|
||||||
|
die(_("--packfile requires --index-pack-args"));
|
||||||
|
|
||||||
|
fetch_single_packfile(&packfile_hash, argv[arg],
|
||||||
|
index_pack_args.v);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (index_pack_args.nr)
|
||||||
|
die(_("--index-pack-args can only be used with --packfile"));
|
||||||
|
|
||||||
if (commits_on_stdin) {
|
if (commits_on_stdin) {
|
||||||
commits = walker_targets_stdin(&commit_id, &write_ref);
|
commits = walker_targets_stdin(&commit_id, &write_ref);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -224,7 +224,10 @@ test_expect_success 'http-fetch --packfile' '
|
||||||
|
|
||||||
git init packfileclient &&
|
git init packfileclient &&
|
||||||
p=$(cd "$HTTPD_DOCUMENT_ROOT_PATH"/repo_pack.git && ls objects/pack/pack-*.pack) &&
|
p=$(cd "$HTTPD_DOCUMENT_ROOT_PATH"/repo_pack.git && ls objects/pack/pack-*.pack) &&
|
||||||
git -C packfileclient http-fetch --packfile=$ARBITRARY "$HTTPD_URL"/dumb/repo_pack.git/$p >out &&
|
git -C packfileclient http-fetch --packfile=$ARBITRARY \
|
||||||
|
--index-pack-arg=index-pack --index-pack-arg=--stdin \
|
||||||
|
--index-pack-arg=--keep \
|
||||||
|
"$HTTPD_URL"/dumb/repo_pack.git/$p >out &&
|
||||||
|
|
||||||
grep "^keep.[0-9a-f]\{16,\}$" out &&
|
grep "^keep.[0-9a-f]\{16,\}$" out &&
|
||||||
cut -c6- out >packhash &&
|
cut -c6- out >packhash &&
|
||||||
|
|
Loading…
Reference in New Issue