[PATCH 02 of 10] bundlerepo: improve performance for bundle() revset expression
Benoit Boissinot
bboissin at gmail.com
Wed Jan 16 14:15:30 CST 2013
LGTM
On Wed, Jan 16, 2013 at 8:57 PM, Mads Kiilerich <mads at kiilerich.com> wrote:
> # HG changeset patch
> # User Mads Kiilerich <madski at unity3d.com>
> # Date 1358365294 -3600
> # Node ID e246188705491d7faa73afb13cfcd1ac79fd9dd3
> # Parent 528c8be7d397d7c2638858006bdd9d55e3e2c314
> bundlerepo: improve performance for bundle() revset expression
>
> Create the set of revision numbers directly instead of creating a list of
> nodes
> first.
>
> diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
> --- a/mercurial/bundlerepo.py
> +++ b/mercurial/bundlerepo.py
> @@ -35,7 +35,7 @@
> n = len(self)
> self.disktiprev = n - 1
> chain = None
> - self.bundlenodes = []
> + self.bundlerevs = set() # used by 'bundle()' revset expression
> while True:
> chunkdata = bundle.deltachunk(chain)
> if not chunkdata:
> @@ -51,10 +51,10 @@
> start = bundle.tell() - size
>
> link = linkmapper(cs)
> - self.bundlenodes.append(node)
> if node in self.nodemap:
> # this can happen if two branches make the same change
> chain = node
> + self.bundlerevs.add(self.nodemap[node])
> continue
>
> for p in (p1, p2):
> @@ -67,6 +67,7 @@
> self.basemap[n] = deltabase
> self.index.insert(-1, e)
> self.nodemap[node] = n
> + self.bundlerevs.add(n)
> chain = node
> n += 1
>
> diff --git a/mercurial/revset.py b/mercurial/revset.py
> --- a/mercurial/revset.py
> +++ b/mercurial/revset.py
> @@ -450,11 +450,10 @@
> Bundle must be specified by the -R option."""
>
> try:
> - bundlenodes = repo.changelog.bundlenodes
> + bundlerevs = repo.changelog.bundlerevs
> except AttributeError:
> raise util.Abort(_("no bundle provided - specify with -R"))
> - revs = set(repo[n].rev() for n in bundlenodes)
> - return [r for r in subset if r in revs]
> + return [r for r in subset if r in bundlerevs]
>
> def checkstatus(repo, subset, pat, field):
> m = None
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>
On Wed, Jan 16, 2013 at 8:57 PM, Mads Kiilerich <mads at kiilerich.com> wrote:
> # HG changeset patch
> # User Mads Kiilerich <madski at unity3d.com>
> # Date 1358365294 -3600
> # Node ID e246188705491d7faa73afb13cfcd1ac79fd9dd3
> # Parent 528c8be7d397d7c2638858006bdd9d55e3e2c314
> bundlerepo: improve performance for bundle() revset expression
>
> Create the set of revision numbers directly instead of creating a list of
> nodes
> first.
>
> diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
> --- a/mercurial/bundlerepo.py
> +++ b/mercurial/bundlerepo.py
> @@ -35,7 +35,7 @@
> n = len(self)
> self.disktiprev = n - 1
> chain = None
> - self.bundlenodes = []
> + self.bundlerevs = set() # used by 'bundle()' revset expression
> while True:
> chunkdata = bundle.deltachunk(chain)
> if not chunkdata:
> @@ -51,10 +51,10 @@
> start = bundle.tell() - size
>
> link = linkmapper(cs)
> - self.bundlenodes.append(node)
> if node in self.nodemap:
> # this can happen if two branches make the same change
> chain = node
> + self.bundlerevs.add(self.nodemap[node])
> continue
>
> for p in (p1, p2):
> @@ -67,6 +67,7 @@
> self.basemap[n] = deltabase
> self.index.insert(-1, e)
> self.nodemap[node] = n
> + self.bundlerevs.add(n)
> chain = node
> n += 1
>
> diff --git a/mercurial/revset.py b/mercurial/revset.py
> --- a/mercurial/revset.py
> +++ b/mercurial/revset.py
> @@ -450,11 +450,10 @@
> Bundle must be specified by the -R option."""
>
> try:
> - bundlenodes = repo.changelog.bundlenodes
> + bundlerevs = repo.changelog.bundlerevs
> except AttributeError:
> raise util.Abort(_("no bundle provided - specify with -R"))
> - revs = set(repo[n].rev() for n in bundlenodes)
> - return [r for r in subset if r in revs]
> + return [r for r in subset if r in bundlerevs]
>
> def checkstatus(repo, subset, pat, field):
> m = None
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20130116/c2292519/attachment.html>
More information about the Mercurial-devel
mailing list