[PATCH default] convert: update hg convert source to accept revsets as revs

Boris Feld boris.feld at octobus.net
Tue May 23 13:21:59 UTC 2017


# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1495542603 -7200
#      Tue May 23 14:30:03 2017 +0200
# Node ID 1e4860f3409aec9fc81e65a53c8e107d1c9c815a
# Parent  e8c043375b53b30c4b468687f08323cbeeb452ef
# EXP-Topic convert-revset
convert: update hg convert source to accept revsets as revs

My usecase is to pass a revset like (limit(all(), X, 0)) to convert hg source
repositories pieces by pieces as it seems that hg convert leaks memory. This
way we can bypass the problem by processing the repositories small pieces at
the time.

It also makes convert more flexible.

diff -r e8c043375b53 -r 1e4860f3409a hgext/convert/hg.py
--- a/hgext/convert/hg.py	Fri May 19 20:06:45 2017 +0530
+++ b/hgext/convert/hg.py	Tue May 23 14:30:03 2017 +0200
@@ -480,7 +480,8 @@
             else:
                 self.keep = util.always
             if revs:
-                self._heads = [self.repo[r].node() for r in revs]
+                revsnumbers = scmutil.revrange(self.repo, revs)
+                self._heads = [self.repo[r].node() for r in revsnumbers]
             else:
                 self._heads = self.repo.heads()
         else:
diff -r e8c043375b53 -r 1e4860f3409a tests/test-convert-hg-source.t
--- a/tests/test-convert-hg-source.t	Fri May 19 20:06:45 2017 +0530
+++ b/tests/test-convert-hg-source.t	Tue May 23 14:30:03 2017 +0200
@@ -200,3 +200,56 @@
   a
   c
   d
+
+check that convert accepts revsets and that converting a repository in two times works
+
+  $ hg convert orig revset-multiple -r "limit(all(), 4, 0)" 2>&1 | grep -v 'subversion python bindings could not be loaded'
+  initializing destination revset-multiple repository
+  scanning source...
+  sorting...
+  converting...
+  3 add foo bar
+  2 change foo
+  1 make bar and baz copies of foo
+  0 merge local copy
+  updating bookmarks
+  $ hg convert orig revset-multiple -r "limit(all(), 4, 4)" 2>&1 | grep -v 'subversion python bindings could not be loaded'
+  scanning source...
+  sorting...
+  converting...
+  3 merge remote copy
+  2 Added tag that for changeset 88586c4e9f02
+  1 Removed tag that
+  0 Added tag this for changeset c56a7f387039
+  updating bookmarks
+  $ hg convert orig revset-multiple -r "limit(all(), 4, 8)" 2>&1 | grep -v 'subversion python bindings could not be loaded'
+  scanning source...
+  sorting...
+  converting...
+  2 mark baz executable
+  1 change foo again
+  0 change foo again again
+  updating bookmarks
+  $ hg -R "revset-multiple" log -G -T '{rev} {desc}'
+  o  10 change foo again again
+  |
+  | o  9 change foo again
+  | |
+  | | o  8 mark baz executable
+  | | |
+  | | o  7 Added tag this for changeset c56a7f387039
+  | | |
+  | | o  6 Removed tag that
+  | | |
+  | | o  5 Added tag that for changeset 88586c4e9f02
+  | | |
+  +---o  4 merge remote copy
+  | |/
+  +---o  3 merge local copy
+  | |/
+  o |  2 make bar and baz copies of foo
+  | |
+  | o  1 change foo
+  |/
+  o  0 add foo bar
+  


More information about the Mercurial-devel mailing list