[Python-checkins] pymigr: Fix findlarge.py, suggest patch and more actions
antoine.pitrou
python-checkins at python.org
Thu Feb 24 04:34:26 CET 2011
antoine.pitrou pushed 54a76c200148 to pymigr:
http://hg.python.org/pymigr/rev/54a76c200148
changeset: 95:54a76c200148
tag: tip
user: Antoine Pitrou <solipsis at pitrou.net>
date: Thu Feb 24 04:34:20 2011 +0100
summary:
Fix findlarge.py, suggest patch and more actions
files:
findlarge.py
diff --git a/findlarge.py b/findlarge.py
--- a/findlarge.py
+++ b/findlarge.py
@@ -9,11 +9,78 @@
Full recipe for shrinking a repo:
$ hg shrink
$ ../findlarge.py | xargs -0 -n 1 hg shrink --revlog
+ # the following optional
$ hg verify
$ find .hg -name "*.old" -print0 | xargs -0 rm
+You can also try an other reordering algorithm:
+ $ ../findlarge.py | xargs -0 -n 1 hg shrink --sort postorderreverse --revlog
+
+
+NOTE: Many operations become *much* slower after the shrink of a full converted
+repo (probably because of the large number of heads - more than 400 - combined
+with the new non-natural revlog order).
+So it's better to first build a bundle of py3k before shrinking:
+
+ $ hg bundle --base null -r 3.x -r 3.2.x -r 3.1.x -r 3.0.x py3k.bundle
+
+(replace "3.x" with "default" if the newer branchmap is used)
+
"""
+# !--- It is advised to apply the following patch to your hg tree ---!
+
+'''
+diff -r 5fc7c84ed9b0 contrib/shrink-revlog.py
+--- a/contrib/shrink-revlog.py Tue Feb 01 17:30:13 2011 -0600
++++ b/contrib/shrink-revlog.py Thu Feb 24 04:11:42 2011 +0100
+@@ -145,6 +145,7 @@ def report(ui, r1, r2):
+ shrink_factor = oldsize / newsize
+ ui.write(_('shrinkage: %.1f%% (%.1fx)\n')
+ % (shrink_percent, shrink_factor))
++ return shrink_factor
+
+ def shrink(ui, repo, **opts):
+ """shrink a revlog by reordering revisions
+@@ -235,7 +236,7 @@ def shrink(ui, repo, **opts):
+ ui.note(_('%d suboptimal nodes\n') % suboptimal)
+
+ writerevs(ui, r1, r2, order, tr)
+- report(ui, r1, r2)
++ shrink_factor = report(ui, r1, r2)
+ tr.close()
+ except:
+ # Abort transaction first, so we truncate the files before
+@@ -244,7 +245,7 @@ def shrink(ui, repo, **opts):
+ for fn in (tmpindexfn, tmpdatafn):
+ ignoremissing(os.unlink)(fn)
+ raise
+- if not opts.get('dry_run'):
++ if not opts.get('dry_run') and shrink_factor > 1.0:
+ # racy, both files cannot be renamed atomically
+ # copy files
+ util.os_link(indexfn, oldindexfn)
+@@ -253,7 +254,7 @@ def shrink(ui, repo, **opts):
+ # rename
+ util.rename(tmpindexfn, indexfn)
+ try:
+- os.chmod(tmpdatafn, os.stat(datafn).st_mode)
++ os.chmod(tmpdatafn, os.stat(indexfn).st_mode)
+ util.rename(tmpdatafn, datafn)
+ except OSError, inst:
+ if inst.errno != errno.ENOENT:
+@@ -265,7 +266,7 @@ def shrink(ui, repo, **opts):
+ finally:
+ lock.release()
+
+- if not opts.get('dry_run'):
++ if not opts.get('dry_run') and shrink_factor > 1.0:
+ ui.write(_('note: old revlog saved in:\n'
+ ' %s\n'
+ ' %s\n'
+'''
+
+
import os
import sys
import collections
@@ -32,9 +99,11 @@
continue
fn = os.path.join(dir, fn)
fni = os.path.join(dir, fni)
- # Strange issue with this file, skip it
- if fni.endswith('_misc/python-mode.el.i'):
- continue
+ # Strange issues with these files, skip
+ #if (fni.endswith('_misc/python-mode.el.i') or
+ #'objects/listobject.c' in fni or
+ #'objects/dictobject.c' in fni):
+ #continue
files[fni] += os.path.getsize(fn)
return files
@@ -43,11 +112,12 @@
[(v, k) for (k, v) in file_sizes('.hg/store/dh').items()]
)
-nlargest = sorted(files, reverse=True)[0:1000]
+nlargest = sorted(files, reverse=True)[0:2000]
if '-v' in sys.argv:
for s, fn in nlargest:
print s, fn
print "(total %d)" % sum(s for s, fn in nlargest)
else:
- print '\0'.join(fn for s, fn in nlargest)
+ # no final \n
+ sys.stdout.write('\0'.join(fn for s, fn in nlargest))
--
Repository URL: http://hg.python.org/pymigr
More information about the Python-checkins
mailing list