On Tue, Dec 20, 2016 at 10:07:22AM -0800, David Soria Parra wrote: > # HG changeset patch > # User David Soria Parra <davi...@fb.com> > # Date 1482254630 28800 > # Tue Dec 20 09:23:50 2016 -0800 > # Node ID a047a142f151709f882361916617e762816db619 > # Parent 77e1912e2e0817a96633568c400450a9566e7e33 > convert: parse perforce data on-demand
Queued these, thanks. How does it feel to be the convert maintainer? > > We are using read-only attributes that parse the perforce data on > demand. We are reading the data only once whenever an attribute is > requested and use it throughout the import process. This is equivalent > to the previous behavior, but we are avoiding reading from perforce when > we initialize the object, but instead run it during the actual import > process, when the first attribute is requested (usually getheads(), see > `convertcmd.convert`). > > diff --git a/hgext/convert/p4.py b/hgext/convert/p4.py > --- a/hgext/convert/p4.py > +++ b/hgext/convert/p4.py > @@ -56,13 +56,8 @@ > common.checktool('p4', abort=False) > > self.revmap = {} > - self.heads = [] > - self.changeset = {} > - self.files = {} > - self.copies = {} > self.encoding = self.ui.config('convert', 'p4.encoding', > default=convcmd.orig_encoding) > - self.depotname = {} # mapping from local name to depot name > self.re_type = re.compile( > "([a-z]+)?(text|binary|symlink|apple|resource|unicode|utf\d+)" > "(\+\w+)?$") > @@ -74,7 +69,6 @@ > if revs and len(revs) > 1: > raise error.Abort(_("p4 source does not support specifying " > "multiple revisions")) > - self._parse_once(ui, path) > > def setrevmap(self, revmap): > """Sets the parsed revmap dictionary. > @@ -240,13 +234,29 @@ > 'depotname': depotname, > } > > - def _parse_once(self, ui, path): > - d = self._parse(ui, path) > - self.changeset = d['changeset'] > - self.heads = d['heads'] > - self.files = d['files'] > - self.copies = d['copies'] > - self.depotname = d['depotname'] > + @util.propertycache > + def _parse_once(self): > + return self._parse(self.ui, self.path) > + > + @util.propertycache > + def copies(self): > + return self._parse_once['copies'] > + > + @util.propertycache > + def files(self): > + return self._parse_once['files'] > + > + @util.propertycache > + def changeset(self): > + return self._parse_once['changeset'] > + > + @util.propertycache > + def heads(self): > + return self._parse_once['heads'] > + > + @util.propertycache > + def depotname(self): > + return self._parse_once['depotname'] > > def getheads(self): > return self.heads > diff --git a/tests/test-convert-p4-filetypes.t > b/tests/test-convert-p4-filetypes.t > --- a/tests/test-convert-p4-filetypes.t > +++ b/tests/test-convert-p4-filetypes.t > @@ -307,11 +307,11 @@ > convert > $ hg convert -s p4 $DEPOTPATH dst > initializing destination dst repository > + scanning source... > reading p4 views > collecting p4 changelists > 1 initial > 2 keywords > - scanning source... > sorting... > converting... > 1 initial > diff --git a/tests/test-convert-p4.t b/tests/test-convert-p4.t > --- a/tests/test-convert-p4.t > +++ b/tests/test-convert-p4.t > @@ -67,12 +67,12 @@ > convert > $ hg convert -s p4 $DEPOTPATH dst > initializing destination dst repository > + scanning source... > reading p4 views > collecting p4 changelists > 1 initial > 2 change a > 3 change b/c > - scanning source... > sorting... > converting... > 2 initial > @@ -98,13 +98,10 @@ > > convert again > $ hg convert -s p4 $DEPOTPATH dst > + scanning source... > reading p4 views > collecting p4 changelists > - 1 initial > - 2 change a > - 3 change b/c > 4 change a b/c > - scanning source... > sorting... > converting... > 0 change a b/c > @@ -130,14 +127,10 @@ > > convert again > $ hg convert -s p4 $DEPOTPATH dst > + scanning source... > reading p4 views > collecting p4 changelists > - 1 initial > - 2 change a > - 3 change b/c > - 4 change a b/c > 5 add d e f > - scanning source... > sorting... > converting... > 0 add d e f > _______________________________________________ > Mercurial-devel mailing list > Mercurial-devel@mercurial-scm.org > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel