extension using revsets etc.

Matthew Watson mattw.watson at gmail.com
Mon Apr 11 16:54:54 CDT 2011


Thanks Mads,

cmdutil.revrange is what I was looking for.

I was trying to duplicate the pattern that hg log is using, using
cmdutil.walkchangerevs, but something about the way I was doing this
was not freeing memory.

Matt

On 11 April 2011 06:05, Mads Kiilerich <mads at kiilerich.com> wrote:
> Matthew Watson wrote, On 04/08/2011 04:06 PM:
>>
>> Hi Guys,
>>
>> I've got an extension that I want to be able to accept revsets for
>> convenience and consistency's sake.
>>
>> I've got an arg *nodes that gets passed in and I was doing the
>> following, basically from looking at what log does in commands.py:
>>
>>    matchfn = cmdutil.matchall(repo)
>>     fopts = {}
>>     fopts['rev'] = nodes
>>     if not nodes:
>>         fopts['rev'] = "0:%s" % repo['tip'].rev()
>>     def prep(ctx, fns):
>>         True
>>     for ctx in cmdutil.walkchangerevs(repo, matchfn, fopts, prep):
>>         felognode(ui, repo, ctx, **opts)
>>
>> felognode does a lot of inspection of the commit, loads manifests and
>> diffs etc.
>>
>> Problem is that this approach doesn't seem to garbage colect anything
>> - after about 4000 commits, my python process is up to 12GB memory and
>> the machine is swapping like crazy. Is there a better way to do this
>> where the contexts, the filectx and manifest(s) are getting garbage
>> collected as I go along? Or a better way to process a generic --rev
>> arg into a list of commit numbers to process?
>>
>> Also, I'm not really sure of the role of the "prep" function, whether
>> I should be doing my output within that or within the body of the for
>> loop.
>
> I think the answer depends on what you really want to do. Could you post a
> complete but minimal example that demonstrates the question/problem?
>
> The most obvious explanation could be that you somehow keep a reference to
> everything and thus prevents the gc from working.
>
> It would perhaps be simpler to use cmdutil.revrange.
>
> /Mads
>


More information about the Mercurial-devel mailing list