From: Linus Torvalds Date: Wed, 5 Aug 2009 05:01:59 +0000 (-0400) Subject: git-http-fetch: not a builtin X-Git-Tag: v1.6.5-rc1~11^2~8 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=1088261f6fc90324014b5306cca4171987da85ce;p=git.git git-http-fetch: not a builtin This splits up git-http-fetch so that it isn't built-in. It also removes the general dependency on curl, because it is no longer used by any built-in code. Because they are no longer LIB_OBJS, add LIB_H to the dependencies of http-related object files, and remove http.h from the dependencies of transport.o Signed-off-by: Linus Torvalds Signed-off-by: Daniel Barkalow Signed-off-by: Junio C Hamano --- diff --git a/Makefile b/Makefile index 35117fcf4..0ebf9dd95 100644 --- a/Makefile +++ b/Makefile @@ -980,10 +980,7 @@ else else CURL_LIBCURL = -lcurl endif - BUILTIN_OBJS += builtin-http-fetch.o PROGRAMS += git-remote-http$X git-remote-https$X git-remote-ftp$X git-http-fetch$X - EXTLIBS += $(CURL_LIBCURL) - LIB_OBJS += http.o http-walker.o curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p) ifeq "$(curl_check)" "070908" ifndef NO_EXPAT @@ -1486,8 +1483,13 @@ git-imap-send$X: imap-send.o $(GITLIBS) $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \ $(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL) -http.o http-walker.o http-push.o transport.o: http.h +http.o http-walker.o http-push.o: http.h +http.o http-walker.o: $(LIB_H) + +git-http-fetch$X: revision.o http.o http-push.o $(GITLIBS) + $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \ + $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT) git-http-push$X: revision.o http.o http-push.o $(GITLIBS) $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \ $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT) diff --git a/builtin-http-fetch.c b/builtin-http-fetch.c deleted file mode 100644 index f3e63d720..000000000 --- a/builtin-http-fetch.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "cache.h" -#include "walker.h" - -int cmd_http_fetch(int argc, const char **argv, const char *prefix) -{ - struct walker *walker; - int commits_on_stdin = 0; - int commits; - const char **write_ref = NULL; - char **commit_id; - const char *url; - char *rewritten_url = NULL; - int arg = 1; - int rc = 0; - int get_tree = 0; - int get_history = 0; - int get_all = 0; - int get_verbosely = 0; - int get_recover = 0; - - git_config(git_default_config, NULL); - - while (arg < argc && argv[arg][0] == '-') { - if (argv[arg][1] == 't') { - get_tree = 1; - } else if (argv[arg][1] == 'c') { - get_history = 1; - } else if (argv[arg][1] == 'a') { - get_all = 1; - get_tree = 1; - get_history = 1; - } else if (argv[arg][1] == 'v') { - get_verbosely = 1; - } else if (argv[arg][1] == 'w') { - write_ref = &argv[arg + 1]; - arg++; - } else if (!strcmp(argv[arg], "--recover")) { - get_recover = 1; - } else if (!strcmp(argv[arg], "--stdin")) { - commits_on_stdin = 1; - } - arg++; - } - if (argc < arg + 2 - commits_on_stdin) { - usage("git http-fetch [-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin] commit-id url"); - return 1; - } - if (commits_on_stdin) { - commits = walker_targets_stdin(&commit_id, &write_ref); - } else { - commit_id = (char **) &argv[arg++]; - commits = 1; - } - url = argv[arg]; - if (url && url[strlen(url)-1] != '/') { - rewritten_url = xmalloc(strlen(url)+2); - strcpy(rewritten_url, url); - strcat(rewritten_url, "/"); - url = rewritten_url; - } - - walker = get_http_walker(url, NULL); - walker->get_tree = get_tree; - walker->get_history = get_history; - walker->get_all = get_all; - 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" -"status code. Suggest running 'git fsck'.\n"); - } - - walker_free(walker); - - free(rewritten_url); - - return rc; -} diff --git a/git.c b/git.c index 807d875ae..c1e8f05e5 100644 --- a/git.c +++ b/git.c @@ -309,9 +309,6 @@ static void handle_internal_command(int argc, const char **argv) { "get-tar-commit-id", cmd_get_tar_commit_id }, { "grep", cmd_grep, RUN_SETUP | USE_PAGER }, { "help", cmd_help }, -#ifndef NO_CURL - { "http-fetch", cmd_http_fetch, RUN_SETUP }, -#endif { "init", cmd_init_db }, { "init-db", cmd_init_db }, { "log", cmd_log, RUN_SETUP | USE_PAGER }, diff --git a/http-fetch.c b/http-fetch.c new file mode 100644 index 000000000..e8f44babd --- /dev/null +++ b/http-fetch.c @@ -0,0 +1,89 @@ +#include "cache.h" +#include "walker.h" + +int main(int argc, const char **argv) +{ + const char *prefix; + struct walker *walker; + int commits_on_stdin = 0; + int commits; + const char **write_ref = NULL; + char **commit_id; + const char *url; + char *rewritten_url = NULL; + int arg = 1; + int rc = 0; + int get_tree = 0; + int get_history = 0; + int get_all = 0; + int get_verbosely = 0; + int get_recover = 0; + + prefix = setup_git_directory(); + + git_config(git_default_config, NULL); + + while (arg < argc && argv[arg][0] == '-') { + if (argv[arg][1] == 't') { + get_tree = 1; + } else if (argv[arg][1] == 'c') { + get_history = 1; + } else if (argv[arg][1] == 'a') { + get_all = 1; + get_tree = 1; + get_history = 1; + } else if (argv[arg][1] == 'v') { + get_verbosely = 1; + } else if (argv[arg][1] == 'w') { + write_ref = &argv[arg + 1]; + arg++; + } else if (!strcmp(argv[arg], "--recover")) { + get_recover = 1; + } else if (!strcmp(argv[arg], "--stdin")) { + commits_on_stdin = 1; + } + arg++; + } + if (argc < arg + 2 - commits_on_stdin) { + usage("git http-fetch [-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin] commit-id url"); + return 1; + } + if (commits_on_stdin) { + commits = walker_targets_stdin(&commit_id, &write_ref); + } else { + commit_id = (char **) &argv[arg++]; + commits = 1; + } + url = argv[arg]; + if (url && url[strlen(url)-1] != '/') { + rewritten_url = xmalloc(strlen(url)+2); + strcpy(rewritten_url, url); + strcat(rewritten_url, "/"); + url = rewritten_url; + } + + walker = get_http_walker(url, NULL); + walker->get_tree = get_tree; + walker->get_history = get_history; + walker->get_all = get_all; + 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" +"status code. Suggest running 'git fsck'.\n"); + } + + walker_free(walker); + + free(rewritten_url); + + return rc; +} diff --git a/transport-helper.c b/transport-helper.c index c982bb257..43fdc0a43 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -75,7 +75,7 @@ static int fetch_with_fetch(struct transport *transport, struct strbuf buf = STRBUF_INIT; for (i = 0; i < nr_heads; i++) { - struct ref *posn = to_fetch[i]; + const struct ref *posn = to_fetch[i]; if (posn->status & REF_STATUS_UPTODATE) continue; write_in_full(helper->in, "fetch ", 6);