http-fetch.c 1.87 KB
Newer Older
1
#include "cache.h"
2
#include "config.h"
3
#include "exec-cmd.h"
4
#include "http.h"
5 6
#include "walker.h"

7 8 9
static const char http_fetch_usage[] = "git http-fetch "
"[-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin] commit-id url";

10
int cmd_main(int argc, const char **argv)
11 12 13 14 15 16
{
	struct walker *walker;
	int commits_on_stdin = 0;
	int commits;
	const char **write_ref = NULL;
	char **commit_id;
Ray's avatar
Ray committed
17
	char *url = NULL;
18 19 20 21 22 23 24 25 26 27 28 29 30 31
	int arg = 1;
	int rc = 0;
	int get_verbosely = 0;
	int get_recover = 0;

	while (arg < argc && argv[arg][0] == '-') {
		if (argv[arg][1] == 't') {
		} else if (argv[arg][1] == 'c') {
		} else if (argv[arg][1] == 'a') {
		} else if (argv[arg][1] == 'v') {
			get_verbosely = 1;
		} else if (argv[arg][1] == 'w') {
			write_ref = &argv[arg + 1];
			arg++;
32 33
		} else if (argv[arg][1] == 'h') {
			usage(http_fetch_usage);
34 35 36 37 38 39 40
		} else if (!strcmp(argv[arg], "--recover")) {
			get_recover = 1;
		} else if (!strcmp(argv[arg], "--stdin")) {
			commits_on_stdin = 1;
		}
		arg++;
	}
41 42
	if (argc != arg + 2 - commits_on_stdin)
		usage(http_fetch_usage);
43 44 45 46 47 48
	if (commits_on_stdin) {
		commits = walker_targets_stdin(&commit_id, &write_ref);
	} else {
		commit_id = (char **) &argv[arg++];
		commits = 1;
	}
Ray's avatar
Ray committed
49 50 51

	if (argv[arg])
		str_end_url_with_slash(argv[arg], &url);
52

53
	setup_git_directory();
54 55 56

	git_config(git_default_config, NULL);

57
	http_init(NULL, url, 0);
58
	walker = get_http_walker(url);
59 60 61 62 63 64 65 66 67 68 69 70
	walker->get_verbosely = get_verbosely;
	walker->get_recover = get_recover;

	rc = walker_fetch(walker, commits, commit_id, write_ref, url);

	if (commits_on_stdin)
		walker_targets_free(commits, commit_id, write_ref);

	if (walker->corrupt_object_found) {
		fprintf(stderr,
"Some loose object were found to be corrupt, but they might be just\n"
"a false '404 Not Found' error message sent with incorrect HTTP\n"
71
"status code.  Suggest running 'git fsck'.\n");
72 73 74
	}

	walker_free(walker);
75
	http_cleanup();
76

Ray's avatar
Ray committed
77
	free(url);
78

79 80
	return rc;
}