Git 2.8.4
[git/git.git] / http-fetch.c
CommitLineData
30ae764b 1#include "cache.h"
f01d7496 2#include "exec_cmd.h"
888692b7 3#include "http.h"
30ae764b
DB
4#include "walker.h"
5
616f86d7
JN
6static const char http_fetch_usage[] = "git http-fetch "
7"[-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin] commit-id url";
8
1088261f 9int main(int argc, const char **argv)
30ae764b
DB
10{
11 struct walker *walker;
12 int commits_on_stdin = 0;
13 int commits;
14 const char **write_ref = NULL;
15 char **commit_id;
6f5185bd 16 char *url = NULL;
30ae764b
DB
17 int arg = 1;
18 int rc = 0;
19 int get_tree = 0;
20 int get_history = 0;
21 int get_all = 0;
22 int get_verbosely = 0;
23 int get_recover = 0;
24
5e9637c6
ÆAB
25 git_setup_gettext();
26
f01d7496 27 git_extract_argv0_path(argv[0]);
30ae764b
DB
28
29 while (arg < argc && argv[arg][0] == '-') {
30 if (argv[arg][1] == 't') {
31 get_tree = 1;
32 } else if (argv[arg][1] == 'c') {
33 get_history = 1;
34 } else if (argv[arg][1] == 'a') {
35 get_all = 1;
36 get_tree = 1;
37 get_history = 1;
38 } else if (argv[arg][1] == 'v') {
39 get_verbosely = 1;
40 } else if (argv[arg][1] == 'w') {
41 write_ref = &argv[arg + 1];
42 arg++;
616f86d7
JN
43 } else if (argv[arg][1] == 'h') {
44 usage(http_fetch_usage);
30ae764b
DB
45 } else if (!strcmp(argv[arg], "--recover")) {
46 get_recover = 1;
47 } else if (!strcmp(argv[arg], "--stdin")) {
48 commits_on_stdin = 1;
49 }
50 arg++;
51 }
616f86d7
JN
52 if (argc != arg + 2 - commits_on_stdin)
53 usage(http_fetch_usage);
30ae764b
DB
54 if (commits_on_stdin) {
55 commits = walker_targets_stdin(&commit_id, &write_ref);
56 } else {
57 commit_id = (char **) &argv[arg++];
58 commits = 1;
59 }
6f5185bd 60
a6c786fc
BW
61 if (get_all == 0)
62 warning("http-fetch: use without -a is deprecated.\n"
63 "In a future release, -a will become the default.");
64
6f5185bd
TRC
65 if (argv[arg])
66 str_end_url_with_slash(argv[arg], &url);
616f86d7 67
13ee1384 68 setup_git_directory();
616f86d7
JN
69
70 git_config(git_default_config, NULL);
71
a4ddbc33 72 http_init(NULL, url, 0);
888692b7 73 walker = get_http_walker(url);
30ae764b
DB
74 walker->get_tree = get_tree;
75 walker->get_history = get_history;
76 walker->get_all = get_all;
77 walker->get_verbosely = get_verbosely;
78 walker->get_recover = get_recover;
79
80 rc = walker_fetch(walker, commits, commit_id, write_ref, url);
81
82 if (commits_on_stdin)
83 walker_targets_free(commits, commit_id, write_ref);
84
85 if (walker->corrupt_object_found) {
86 fprintf(stderr,
87"Some loose object were found to be corrupt, but they might be just\n"
88"a false '404 Not Found' error message sent with incorrect HTTP\n"
05207a28 89"status code. Suggest running 'git fsck'.\n");
30ae764b
DB
90 }
91
92 walker_free(walker);
888692b7 93 http_cleanup();
30ae764b 94
6f5185bd 95 free(url);
3057ded0 96
30ae764b
DB
97 return rc;
98}