[PATCH] Split out "pull" from particular methods
The method for deciding what to pull is useful separately from any of the
ways of actually fetching the objects.
So split out "pull" functionality from http-pull and rpull
Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/http-pull.c b/http-pull.c
index 192dcc3..d877c4a 100644
--- a/http-pull.c
+++ b/http-pull.c
@@ -7,6 +7,8 @@
#include <errno.h>
#include <stdio.h>
+#include "pull.h"
+
#include <curl/curl.h>
#include <curl/easy.h>
@@ -14,10 +16,6 @@
static char *base;
-static int tree = 0;
-static int commits = 0;
-static int all = 0;
-
static SHA_CTX c;
static z_stream stream;
@@ -47,7 +45,7 @@
return size;
}
-static int fetch(unsigned char *sha1)
+int fetch(unsigned char *sha1)
{
char *hex = sha1_to_hex(sha1);
char *filename = sha1_file_name(sha1);
@@ -105,77 +103,21 @@
return 0;
}
-static int process_tree(unsigned char *sha1)
-{
- struct tree *tree = lookup_tree(sha1);
- struct tree_entry_list *entries;
-
- if (parse_tree(tree))
- return -1;
-
- for (entries = tree->entries; entries; entries = entries->next) {
- if (fetch(entries->item.tree->object.sha1))
- return -1;
- if (entries->directory) {
- if (process_tree(entries->item.tree->object.sha1))
- return -1;
- }
- }
- return 0;
-}
-
-static int process_commit(unsigned char *sha1)
-{
- struct commit *obj = lookup_commit(sha1);
-
- if (fetch(sha1))
- return -1;
-
- if (parse_commit(obj))
- return -1;
-
- if (tree) {
- if (fetch(obj->tree->object.sha1))
- return -1;
- if (process_tree(obj->tree->object.sha1))
- return -1;
- if (!all)
- tree = 0;
- }
- if (commits) {
- struct commit_list *parents = obj->parents;
- for (; parents; parents = parents->next) {
- if (has_sha1_file(parents->item->object.sha1))
- continue;
- if (fetch(parents->item->object.sha1)) {
- /* The server might not have it, and
- * we don't mind.
- */
- continue;
- }
- if (process_commit(parents->item->object.sha1))
- return -1;
- }
- }
- return 0;
-}
-
int main(int argc, char **argv)
{
char *commit_id;
char *url;
int arg = 1;
- unsigned char sha1[20];
while (arg < argc && argv[arg][0] == '-') {
if (argv[arg][1] == 't') {
- tree = 1;
+ get_tree = 1;
} else if (argv[arg][1] == 'c') {
- commits = 1;
+ get_history = 1;
} else if (argv[arg][1] == 'a') {
- all = 1;
- tree = 1;
- commits = 1;
+ get_all = 1;
+ get_tree = 1;
+ get_history = 1;
}
arg++;
}
@@ -186,17 +128,13 @@
commit_id = argv[arg];
url = argv[arg + 1];
- get_sha1_hex(commit_id, sha1);
-
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
base = url;
- if (fetch(sha1))
- return 1;
- if (process_commit(sha1))
+ if (pull(commit_id))
return 1;
curl_global_cleanup();