]> git.ipfire.org Git - thirdparty/git.git/blame - http-fetch.c
Merge git://git.bogomips.org/git-svn
[thirdparty/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
f01d7496 25 git_extract_argv0_path(argv[0]);
30ae764b
DB
26
27 while (arg < argc && argv[arg][0] == '-') {
28 if (argv[arg][1] == 't') {
29 get_tree = 1;
30 } else if (argv[arg][1] == 'c') {
31 get_history = 1;
32 } else if (argv[arg][1] == 'a') {
33 get_all = 1;
34 get_tree = 1;
35 get_history = 1;
36 } else if (argv[arg][1] == 'v') {
37 get_verbosely = 1;
38 } else if (argv[arg][1] == 'w') {
39 write_ref = &argv[arg + 1];
40 arg++;
616f86d7
JN
41 } else if (argv[arg][1] == 'h') {
42 usage(http_fetch_usage);
30ae764b
DB
43 } else if (!strcmp(argv[arg], "--recover")) {
44 get_recover = 1;
45 } else if (!strcmp(argv[arg], "--stdin")) {
46 commits_on_stdin = 1;
47 }
48 arg++;
49 }
616f86d7
JN
50 if (argc != arg + 2 - commits_on_stdin)
51 usage(http_fetch_usage);
30ae764b
DB
52 if (commits_on_stdin) {
53 commits = walker_targets_stdin(&commit_id, &write_ref);
54 } else {
55 commit_id = (char **) &argv[arg++];
56 commits = 1;
57 }
6f5185bd
TRC
58
59 if (argv[arg])
60 str_end_url_with_slash(argv[arg], &url);
616f86d7 61
13ee1384 62 setup_git_directory();
616f86d7
JN
63
64 git_config(git_default_config, NULL);
65
888692b7
TRC
66 http_init(NULL);
67 walker = get_http_walker(url);
30ae764b
DB
68 walker->get_tree = get_tree;
69 walker->get_history = get_history;
70 walker->get_all = get_all;
71 walker->get_verbosely = get_verbosely;
72 walker->get_recover = get_recover;
73
74 rc = walker_fetch(walker, commits, commit_id, write_ref, url);
75
76 if (commits_on_stdin)
77 walker_targets_free(commits, commit_id, write_ref);
78
79 if (walker->corrupt_object_found) {
80 fprintf(stderr,
81"Some loose object were found to be corrupt, but they might be just\n"
82"a false '404 Not Found' error message sent with incorrect HTTP\n"
05207a28 83"status code. Suggest running 'git fsck'.\n");
30ae764b
DB
84 }
85
86 walker_free(walker);
888692b7 87 http_cleanup();
30ae764b 88
6f5185bd 89 free(url);
3057ded0 90
30ae764b
DB
91 return rc;
92}