convert/subversion: work around memory leak in svn's python bindings
The svn.ra.get_log wrapper attaches the hash of changed paths for every
log entry to a global memory pool, so memory consumption increases
rapidly, with no way to free it.
Our workaround is to call this function in a child process, and feed
its results back over a pipe. The memory consumption of the child still
grows huge (hundreds of megabytes), but at least it goes away once the
reading-the-log phase is done.
#!/usr/bin/env python
import os
from mercurial import ui
hgrc = os.environ['HGRCPATH']
print ' hgrc settings command line options final result '
print ' quiet verbo debug quiet verbo debug quiet verbo debug'
for i in xrange(64):
hgrc_quiet = bool(i & 1<<0)
hgrc_verbose = bool(i & 1<<1)
hgrc_debug = bool(i & 1<<2)
cmd_quiet = bool(i & 1<<3)
cmd_verbose = bool(i & 1<<4)
cmd_debug = bool(i & 1<<5)
f = open(hgrc, 'w')
f.write('[ui]\n')
if hgrc_quiet:
f.write('quiet = True\n')
if hgrc_verbose:
f.write('verbose = True\n')
if hgrc_debug:
f.write('debug = True\n')
f.close()
u = ui.ui()
u.updateopts(quiet=cmd_quiet, verbose=cmd_verbose, debug=cmd_debug)
check = ''
if u.debugflag:
if not u.verbose or u.quiet:
check = ' *'
elif u.verbose and u.quiet:
check = ' +'
print ('%2d %5s %5s %5s %5s %5s %5s -> %5s %5s %5s%s'
% (i, hgrc_quiet, hgrc_verbose, hgrc_debug,
cmd_quiet, cmd_verbose, cmd_debug,
u.quiet, u.verbose, u.debugflag, check))