diff options
Diffstat (limited to 'upload-pack.c')
-rw-r--r-- | upload-pack.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/upload-pack.c b/upload-pack.c index 7597ba3405..f05cc2b5e6 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -471,6 +471,9 @@ static int do_reachable_revlist(struct child_process *cmd, static const char *argv[] = { "rev-list", "--stdin", NULL, }; + static const char *argv_with_objects[] = { + "rev-list", "--objects", "--stdin", NULL, + }; struct object *o; char namebuf[42]; /* ^ + SHA-1 + LF */ int i; @@ -488,6 +491,18 @@ static int do_reachable_revlist(struct child_process *cmd, */ sigchain_push(SIGPIPE, SIG_IGN); + /* + * If we are testing reachability of a tree or blob, rev-list needs to + * operate more granularly. + */ + for (i = 0; i < src->nr; i++) { + o = src->objects[i].item; + if (o->type == OBJ_TREE || o->type == OBJ_BLOB) { + cmd->argv = argv_with_objects; + break; + } + } + if (start_command(cmd)) goto error; |