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