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