[PATCH 6 of 9 v3] bundlerepo: introduce method to find file starts and use it
Martin von Zweigbergk
martinvonz at google.com
Fri Aug 5 18:05:42 EDT 2016
On Fri, Aug 5, 2016 at 2:45 PM, Augie Fackler <raf at durin42.com> wrote:
> # HG changeset patch
> # User Augie Fackler <augie at google.com>
> # Date 1470416878 14400
> # Fri Aug 05 13:07:58 2016 -0400
> # Node ID bb22ee33a9f98e3e017288c13993e1cef6dbd4ed
> # Parent 3d62ff7bd297f51e29738df0de074ee9e929b6a3
> bundlerepo: introduce method to find file starts and use it
>
> This moves us to the modern iter() technique instead of the `while
> True` pattern since it's easy. Factored out as a function because I'm
> about to need this in a second place.
>
> diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
> --- a/mercurial/bundlerepo.py
> +++ b/mercurial/bundlerepo.py
> @@ -234,6 +234,15 @@ class bundlephasecache(phases.phasecache
> self.invalidate()
> self.dirty = True
>
> +def _getfilestarts(bundle):
> + bundlefilespos = {}
> + for chunkdata in iter(bundle.filelogheader, {}):
> + fname = chunkdata['filename']
> + bundlefilespos[fname] = bundle.tell()
> + for chunk in iter(lambda: bundle.deltachunk(None), {}):
> + pass
> + return bundlefilespos
> +
> class bundlerepository(localrepo.localrepository):
> def __init__(self, ui, path, bundlename):
> def _writetempbundle(read, suffix, header=''):
> @@ -349,13 +358,7 @@ class bundlerepository(localrepo.localre
> def file(self, f):
> if not self.bundlefilespos:
> self.bundle.seek(self.filestart)
> - for chunkdata in iter(self.bundle.filelogheader, {}):
> - fname = chunkdata['filename']
> - self.bundlefilespos[fname] = self.bundle.tell()
> - while True:
> - c = self.bundle.deltachunk(None)
> - if not c:
> - break
> + self.bundlefilespos.update(_getfilestarts(self.bundle))
We know it's empty, so I'll change this to a reassignment in flight if
you don't mind. Not that it will be noticeably faster, but I think
it's simpler.
>
> if f in self.bundlefilespos:
> self.bundle.seek(self.bundlefilespos[f])
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list