[PATCH] rename git-rpush and git-rpull to git-ssh-push and git-ssh-pull
[git.git] / pull.c
diff --git a/pull.c b/pull.c
index 55f17c0..f4f1d8f 100644 (file)
--- a/pull.c
+++ b/pull.c
@@ -6,13 +6,21 @@
 
 int get_tree = 0;
 int get_history = 0;
+/* 1 means "get delta", 2 means "really check delta harder */
+int get_delta = 1;
 int get_all = 0;
+int get_verbosely = 0;
 static unsigned char current_commit_sha1[20];
 
 static const char commitS[] = "commit";
 static const char treeS[] = "tree";
 static const char blobS[] = "blob";
 
+void pull_say(const char *fmt, const char *hex) {
+       if (get_verbosely)
+               fprintf(stderr, fmt, hex);
+}
+
 static void report_missing(const char *what, const unsigned char *missing)
 {
        char missing_hex[41];
@@ -25,12 +33,22 @@ static void report_missing(const char *what, const unsigned char *missing)
 
 static int make_sure_we_have_it(const char *what, unsigned char *sha1)
 {
-       int status;
-       if (has_sha1_file(sha1))
+       int status = 0;
+
+       if (!has_sha1_file(sha1)) {
+               status = fetch(sha1);
+               if (status && what)
+                       report_missing(what, sha1);
+       }
+       else if (get_delta < 2)
                return 0;
-       status = fetch(sha1);
-       if (status && what)
-               report_missing(what, sha1);
+
+       if (get_delta) {
+               char delta_sha1[20];
+               status = sha1_delta_base(sha1, delta_sha1);
+               if (0 < status)
+                       status = make_sure_we_have_it(what, delta_sha1);
+       }
        return status;
 }