From: Derrick Stolee Date: Fri, 13 Oct 2017 13:55:15 GMT Subject: Re: git-clone causes out of memory Message-ID: <53f98311-3c5f-9863-5f6c-bc4f25fad317@gmail.com> In-Reply-To: <20171013135058.q7vhufdtin42ddic@sigill.intra.peff.net> On 10/13/2017 9:50 AM, Jeff King wrote: > On Fri, Oct 13, 2017 at 09:39:14AM -0400, Derrick Stolee wrote: > >> Since I don't understand enough about the consumers to diff_tree_oid() (and >> the fact that the recursive behavior may be wanted in some cases), I think >> we can fix this in builtin/rev-list.c with this simple diff: >> >> --- >> >> diff --git a/builtin/rev-list.c b/builtin/rev-list.c >> index ded1577424..b2e8e02cc8 100644 >> --- a/builtin/rev-list.c >> +++ b/builtin/rev-list.c >> @@ -285,6 +285,9 @@ int cmd_rev_list(int argc, const char **argv, const char >> *prefix) >> >>         git_config(git_default_config, NULL); >>         init_revisions(&revs, prefix); >> + >> +       revs.pruning.flags = revs.pruning.flags & ~DIFF_OPT_RECURSIVE; >> + (Note: I'm running tests now and see that this breaks behavior. Definitely not the solution we want.) > Hmm, this feels wrong, because we _do_ want to recurse down and follow > the pathspec to see if there are real changes. > > We should be comparing an empty tree and d0/d0/d0/d0 (or however deep > your pathspec goes). We should be able to see immediately that the entry > is not present between the two and not bother descending. After all, > we've set the QUICK flag in init_revisions(). So the real question is > why QUICK is not kicking in. > > -Peff I'm struggling to understand your meaning. We want to walk from root to d0/d0/d0/d0, but there is no reason to walk beyond that tree. But maybe that's what the QUICK flag is supposed to do. Thanks, -Stolee