Re: git-clone causes out of memory
- From
Derrick Stolee <stolee@gmail.com>
- Date
- Oct 13, 2017, 13:55 UTC
- 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:
Show 20 quoted lines
> 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.)
Show 10 quoted lines
> 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