Make the --recover flag check the parents of commits which are already
available. This is needed currently to deal with cases where a parent is
pulled along with a commit (in a pack, e.g.) and references above that
parent aren't also pulled together.

Signed-off-by: Daniel Barkalow <[EMAIL PROTECTED]>
---
commit 75e8c1be7a778e0a0fa119fe1bc408341932e7e5
tree ffbe708117543c356eb2981f1e0540b89b7a95e2
parent a7336ae514738f159dad314d6674961427f043a6
author Daniel Barkalow <[EMAIL PROTECTED]> 1121024019 -0400
committer Daniel Barkalow <[EMAIL PROTECTED](none)> 1121024019 -0400

Index: http-pull.c
===================================================================
--- 248f72f3e4dcb40693488b0c06f93d0b38122b8e/http-pull.c  (mode:100644 
sha1:1f9d60b9b1d5eed85b24d96c240666bbfc5a22ed)
+++ ffbe708117543c356eb2981f1e0540b89b7a95e2/http-pull.c  (mode:100644 
sha1:3fa56f08b0b8e7316afcaab3a7bfa3f2d26b550f)
@@ -146,7 +146,10 @@
        int arg = 1;
 
        while (arg < argc && argv[arg][0] == '-') {
-               if (argv[arg][1] == 't') {
+               if (argv[arg][1] == '-') {
+                       if (!strcmp(argv[arg] + 2, "recover"))
+                               careful = 1;
+               } else if (argv[arg][1] == 't') {
                        get_tree = 1;
                } else if (argv[arg][1] == 'c') {
                        get_history = 1;
Index: local-pull.c
===================================================================
--- 248f72f3e4dcb40693488b0c06f93d0b38122b8e/local-pull.c  (mode:100644 
sha1:2f06fbee8b840a7ae642f5a22e2cb993687f3470)
+++ ffbe708117543c356eb2981f1e0540b89b7a95e2/local-pull.c  (mode:100644 
sha1:0d10c07844030bc7cb615cf916dce89592151be7)
@@ -116,7 +116,10 @@
        int arg = 1;
 
        while (arg < argc && argv[arg][0] == '-') {
-               if (argv[arg][1] == 't')
+               if (argv[arg][1] == '-') {
+                       if (!strcmp(argv[arg] + 2, "recover"))
+                               careful = 1;
+               } else if (argv[arg][1] == 't')
                        get_tree = 1;
                else if (argv[arg][1] == 'c')
                        get_history = 1;
Index: pull.c
===================================================================
--- 248f72f3e4dcb40693488b0c06f93d0b38122b8e/pull.c  (mode:100644 
sha1:ed3078e3b27c62c07558fd94f339801cbd685593)
+++ ffbe708117543c356eb2981f1e0540b89b7a95e2/pull.c  (mode:100644 
sha1:d9763840c7ebcb1e5838c3b960695cafcca3ac73)
@@ -11,6 +11,7 @@
 
 const unsigned char *current_ref = NULL;
 
+int careful = 0;
 int get_tree = 0;
 int get_history = 0;
 int get_all = 0;
@@ -91,7 +92,8 @@
        if (get_history) {
                struct commit_list *parents = obj->parents;
                for (; parents; parents = parents->next) {
-                       if (has_sha1_file(parents->item->object.sha1))
+                       if (!careful &&
+                           has_sha1_file(parents->item->object.sha1))
                                continue;
                        if (make_sure_we_have_it(NULL,
                                                 parents->item->object.sha1)) {
Index: pull.h
===================================================================
--- 248f72f3e4dcb40693488b0c06f93d0b38122b8e/pull.h  (mode:100644 
sha1:e173ae3337c4465da87d849f4e5c9da203fdf01d)
+++ ffbe708117543c356eb2981f1e0540b89b7a95e2/pull.h  (mode:100644 
sha1:d1076468b71b31dd5e59ec55d98de830cf9df60e)
@@ -21,6 +21,12 @@
 /* If set, the hash that the current value of write_ref must be. */
 extern const unsigned char *current_ref;
 
+/* 
+ * Set to check on everything, instead of stopping at points where we think
+ * we must have everything.
+ */
+extern int careful;
+
 /* Set to fetch the target tree. */
 extern int get_tree;
 
Index: ssh-pull.c
===================================================================
--- 248f72f3e4dcb40693488b0c06f93d0b38122b8e/ssh-pull.c  (mode:100644 
sha1:26356dd7d84ea1bc9f7320b18562ed4117d4fac0)
+++ ffbe708117543c356eb2981f1e0540b89b7a95e2/ssh-pull.c  (mode:100644 
sha1:7ca4243f3bd84590e7bb94467fd5acccd7d4d6f9)
@@ -61,7 +61,10 @@
        const char *prog = getenv("GIT_SSH_PUSH") ? : "git-ssh-push";
 
        while (arg < argc && argv[arg][0] == '-') {
-               if (argv[arg][1] == 't') {
+               if (argv[arg][1] == '-') {
+                       if (!strcmp(argv[arg] + 2, "recover"))
+                               careful = 1;
+               } else if (argv[arg][1] == 't') {
                        get_tree = 1;
                } else if (argv[arg][1] == 'c') {
                        get_history = 1;

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to