1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 10:16:08 +02:00

Teach git-http-fetch the --stdin switch

Speeds up things quite a lot when fetching tags with Cogito.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Petr Baudis 2006-07-27 23:56:22 +02:00 committed by Junio C Hamano
parent 8e87ca6615
commit 8e29f6a07e
2 changed files with 36 additions and 17 deletions

View File

@ -8,7 +8,7 @@ git-http-fetch - downloads a remote git repository via HTTP
SYNOPSIS
--------
'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] <commit> <url>
'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] [--stdin] <commit> <url>
DESCRIPTION
-----------
@ -33,6 +33,12 @@ commit-id::
Writes the commit-id into the filename under $GIT_DIR/refs/<filename> on
the local end after the transfer is complete.
--stdin::
Instead of a commit id on the commandline (which is not expected in this
case), 'git-http-fetch' expects lines on stdin in the format
<commit-id>['\t'<filename-as-in--w>]
Author
------
Written by Linus Torvalds <torvalds@osdl.org>

View File

@ -36,6 +36,8 @@ enum XML_Status {
#define PREV_BUF_SIZE 4096
#define RANGE_HEADER_SIZE 30
static int commits_on_stdin = 0;
static int got_alternates = -1;
static int corrupt_object_found = 0;
@ -43,7 +45,7 @@ static struct curl_slist *no_pragma_header;
struct alt_base
{
char *base;
const char *base;
int path_len;
int got_indices;
struct packed_git *packs;
@ -81,7 +83,7 @@ struct object_request
};
struct alternates_request {
char *base;
const char *base;
char *url;
struct buffer *buffer;
struct active_request_slot *slot;
@ -142,7 +144,7 @@ static size_t fwrite_sha1_file(void *ptr, size_t eltsize, size_t nmemb,
return size;
}
static void fetch_alternates(char *base);
static void fetch_alternates(const char *base);
static void process_object_response(void *callback_data);
@ -507,7 +509,7 @@ static void process_alternates_response(void *callback_data)
(struct alternates_request *)callback_data;
struct active_request_slot *slot = alt_req->slot;
struct alt_base *tail = alt;
char *base = alt_req->base;
const char *base = alt_req->base;
static const char null_byte = '\0';
char *data;
int i = 0;
@ -612,7 +614,7 @@ static void process_alternates_response(void *callback_data)
got_alternates = 1;
}
static void fetch_alternates(char *base)
static void fetch_alternates(const char *base)
{
struct buffer buffer;
char *url;
@ -1185,7 +1187,7 @@ int fetch_ref(char *ref, unsigned char *sha1)
char *url;
char hex[42];
struct buffer buffer;
char *base = alt->base;
const char *base = alt->base;
struct active_request_slot *slot;
struct slot_results results;
buffer.size = 41;
@ -1214,11 +1216,12 @@ int fetch_ref(char *ref, unsigned char *sha1)
return 0;
}
int main(int argc, char **argv)
int main(int argc, const char **argv)
{
const char *write_ref = NULL;
char *commit_id;
char *url;
int commits;
const char **write_ref = NULL;
char **commit_id;
const char *url;
char *path;
int arg = 1;
int rc = 0;
@ -1238,19 +1241,26 @@ int main(int argc, char **argv)
} else if (argv[arg][1] == 'v') {
get_verbosely = 1;
} else if (argv[arg][1] == 'w') {
write_ref = argv[arg + 1];
write_ref = &argv[arg + 1];
arg++;
} else if (!strcmp(argv[arg], "--recover")) {
get_recover = 1;
} else if (!strcmp(argv[arg], "--stdin")) {
commits_on_stdin = 1;
}
arg++;
}
if (argc < arg + 2) {
usage("git-http-fetch [-c] [-t] [-a] [-v] [--recover] [-w ref] commit-id url");
if (argc < arg + 2 - commits_on_stdin) {
usage("git-http-fetch [-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin] commit-id url");
return 1;
}
commit_id = argv[arg];
url = argv[arg + 1];
if (commits_on_stdin) {
commits = pull_targets_stdin(&commit_id, &write_ref);
} else {
commit_id = (char **) &argv[arg++];
commits = 1;
}
url = argv[arg];
http_init();
@ -1268,13 +1278,16 @@ int main(int argc, char **argv)
alt->path_len = strlen(path);
}
if (pull(1, &commit_id, &write_ref, url))
if (pull(commits, commit_id, write_ref, url))
rc = 1;
http_cleanup();
curl_slist_free_all(no_pragma_header);
if (commits_on_stdin)
pull_targets_free(commits, commit_id, write_ref);
if (corrupt_object_found) {
fprintf(stderr,
"Some loose object were found to be corrupt, but they might be just\n"