aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--http-pull.c4
-rw-r--r--pull.c17
-rw-r--r--rpull.c2
3 files changed, 12 insertions, 11 deletions
diff --git a/http-pull.c b/http-pull.c
index d877c4abe..f693aba61 100644
--- a/http-pull.c
+++ b/http-pull.c
@@ -53,10 +53,6 @@ int fetch(unsigned char *sha1)
char *url;
char *posn;
- if (has_sha1_file(sha1)) {
- return 0;
- }
-
local = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
if (local < 0)
diff --git a/pull.c b/pull.c
index 86a7b6901..bbef245fc 100644
--- a/pull.c
+++ b/pull.c
@@ -8,6 +8,13 @@ int get_tree = 0;
int get_history = 0;
int get_all = 0;
+static int make_sure_we_have_it(unsigned char *sha1)
+{
+ if (has_sha1_file(sha1))
+ return 0;
+ return fetch(sha1);
+}
+
static int process_tree(unsigned char *sha1)
{
struct tree *tree = lookup_tree(sha1);
@@ -17,7 +24,7 @@ static int process_tree(unsigned char *sha1)
return -1;
for (entries = tree->entries; entries; entries = entries->next) {
- if (fetch(entries->item.tree->object.sha1))
+ if (make_sure_we_have_it(entries->item.tree->object.sha1))
return -1;
if (entries->directory) {
if (process_tree(entries->item.tree->object.sha1))
@@ -31,14 +38,14 @@ static int process_commit(unsigned char *sha1)
{
struct commit *obj = lookup_commit(sha1);
- if (fetch(sha1))
+ if (make_sure_we_have_it(sha1))
return -1;
if (parse_commit(obj))
return -1;
if (get_tree) {
- if (fetch(obj->tree->object.sha1))
+ if (make_sure_we_have_it(obj->tree->object.sha1))
return -1;
if (process_tree(obj->tree->object.sha1))
return -1;
@@ -50,7 +57,7 @@ static int process_commit(unsigned char *sha1)
for (; parents; parents = parents->next) {
if (has_sha1_file(parents->item->object.sha1))
continue;
- if (fetch(parents->item->object.sha1)) {
+ if (make_sure_we_have_it(parents->item->object.sha1)) {
/* The server might not have it, and
* we don't mind.
*/
@@ -70,7 +77,7 @@ int pull(char *target)
retval = get_sha1_hex(target, sha1);
if (retval)
return retval;
- retval = fetch(sha1);
+ retval = make_sure_we_have_it(sha1);
if (retval)
return retval;
return process_commit(sha1);
diff --git a/rpull.c b/rpull.c
index 6624440d5..d4d4b9b9a 100644
--- a/rpull.c
+++ b/rpull.c
@@ -14,8 +14,6 @@ static int fd_out;
int fetch(unsigned char *sha1)
{
- if (has_sha1_file(sha1))
- return 0;
write(fd_out, sha1, 20);
return write_sha1_from_fd(sha1, fd_in);
}