Teach git-local-fetch the --stdin switch
This makes it possible to fetch many commits (refs) at once, greatly speeding up cg-clone. Signed-off-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
4211e4d10c
commit
8e87ca6615
@ -8,8 +8,9 @@
|
||||
static int use_link = 0;
|
||||
static int use_symlink = 0;
|
||||
static int use_filecopy = 1;
|
||||
static int commits_on_stdin = 0;
|
||||
|
||||
static char *path; /* "Remote" git repository */
|
||||
static const char *path; /* "Remote" git repository */
|
||||
|
||||
void prefetch(unsigned char *sha1)
|
||||
{
|
||||
@ -194,7 +195,7 @@ int fetch_ref(char *ref, unsigned char *sha1)
|
||||
}
|
||||
|
||||
static const char local_pull_usage[] =
|
||||
"git-local-fetch [-c] [-t] [-a] [-v] [-w filename] [--recover] [-l] [-s] [-n] commit-id path";
|
||||
"git-local-fetch [-c] [-t] [-a] [-v] [-w filename] [--recover] [-l] [-s] [-n] [--stdin] commit-id path";
|
||||
|
||||
/*
|
||||
* By default we only use file copy.
|
||||
@ -202,10 +203,11 @@ static const char local_pull_usage[] =
|
||||
* If -s is specified, then a symlink is attempted.
|
||||
* If -n is _not_ specified, then a regular file-to-file copy is done.
|
||||
*/
|
||||
int main(int argc, char **argv)
|
||||
int main(int argc, const char **argv)
|
||||
{
|
||||
const char *write_ref = NULL;
|
||||
char *commit_id;
|
||||
int commits;
|
||||
const char **write_ref = NULL;
|
||||
char **commit_id;
|
||||
int arg = 1;
|
||||
|
||||
setup_git_directory();
|
||||
@ -230,20 +232,30 @@ 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];
|
||||
write_ref = &argv[++arg];
|
||||
else if (!strcmp(argv[arg], "--recover"))
|
||||
get_recover = 1;
|
||||
else if (!strcmp(argv[arg], "--stdin"))
|
||||
commits_on_stdin = 1;
|
||||
else
|
||||
usage(local_pull_usage);
|
||||
arg++;
|
||||
}
|
||||
if (argc < arg + 2)
|
||||
if (argc < arg + 2 - commits_on_stdin)
|
||||
usage(local_pull_usage);
|
||||
commit_id = argv[arg];
|
||||
path = argv[arg + 1];
|
||||
if (commits_on_stdin) {
|
||||
commits = pull_targets_stdin(&commit_id, &write_ref);
|
||||
} else {
|
||||
commit_id = (char **) &argv[arg++];
|
||||
commits = 1;
|
||||
}
|
||||
path = argv[arg];
|
||||
|
||||
if (pull(1, &commit_id, &write_ref, path))
|
||||
if (pull(commits, commit_id, write_ref, path))
|
||||
return 1;
|
||||
|
||||
if (commits_on_stdin)
|
||||
pull_targets_free(commits, commit_id, write_ref);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user