# HG changeset patch # User Patrick Mezard # Date 1239477431 -7200 # Node ID d22432bdcba1dd872fdbffa3491d0f280473a931 # Parent 04c62275cbc7501aad3bc5fdf8e138092e4ace84 convert/cvs: delay CVS log parsing after initialization (issue1581/2) Source and destination constructors should be fast so configurations issues are hit quickly, including authentication and filemap/authormap/splicemap issues. Delaying might be a problem if the remove side disconnects idle connections while the log is being read. It did not happen when converting openafs repository, where log retrieval took at least 10mn. diff -r 04c62275cbc7 -r d22432bdcba1 hgext/convert/cvs.py --- a/hgext/convert/cvs.py Sat Apr 11 21:15:27 2009 +0200 +++ b/hgext/convert/cvs.py Sat Apr 11 21:17:11 2009 +0200 @@ -24,7 +24,7 @@ if not self.builtin: checktool(cvspsexe) - self.changeset = {} + self.changeset = None self.files = {} self.tags = {} self.lastbranch = {} @@ -34,12 +34,12 @@ self.cvsrepo = file(os.path.join(cvs, "Repository")).read()[:-1] self.encoding = locale.getpreferredencoding() - self._parse(ui) self._connect() - def _parse(self, ui): - if self.changeset: + def _parse(self): + if self.changeset is not None: return + self.changeset = {} maxrev = 0 cmd = self.cmd @@ -65,13 +65,13 @@ if self.builtin: # builtin cvsps code - ui.status(_('using builtin cvsps\n')) + self.ui.status(_('using builtin cvsps\n')) - db = cvsps.createlog(ui, cache='update') - db = cvsps.createchangeset(ui, db, - fuzz=int(ui.config('convert', 'cvsps.fuzz', 60)), - mergeto=ui.config('convert', 'cvsps.mergeto', None), - mergefrom=ui.config('convert', 'cvsps.mergefrom', None)) + db = cvsps.createlog(self.ui, cache='update') + db = cvsps.createchangeset(self.ui, db, + fuzz=int(self.ui.config('convert', 'cvsps.fuzz', 60)), + mergeto=self.ui.config('convert', 'cvsps.mergeto', None), + mergefrom=self.ui.config('convert', 'cvsps.mergefrom', None)) for cs in db: if maxrev and cs.id>maxrev: @@ -278,6 +278,7 @@ r = self.readp.readline() def getheads(self): + self._parse() return self.heads def _getfile(self, name, rev): @@ -332,6 +333,7 @@ raise util.Abort(_("unknown CVS response: %s") % line) def getfile(self, file, rev): + self._parse() data, mode = self._getfile(file, rev) self.modecache[(file, rev)] = mode return data @@ -340,14 +342,18 @@ return self.modecache[(file, rev)] def getchanges(self, rev): + self._parse() self.modecache = {} return util.sort(self.files[rev].items()), {} def getcommit(self, rev): + self._parse() return self.changeset[rev] def gettags(self): + self._parse() return self.tags def getchangedfiles(self, rev, i): + self._parse() return util.sort(self.files[rev].keys()) diff -r 04c62275cbc7 -r d22432bdcba1 tests/test-convert-cvs-branch.out --- a/tests/test-convert-cvs-branch.out Sat Apr 11 21:15:27 2009 +0200 +++ b/tests/test-convert-cvs-branch.out Sat Apr 11 21:17:11 2009 +0200 @@ -23,13 +23,13 @@ % Convert assuming destination src-hg initializing destination src-hg repository +connecting to cvsrepo +scanning source... using builtin cvsps collecting CVS rlog 7 log entries creating changesets 5 changeset entries -connecting to cvsrepo -scanning source... sorting... converting... 4 Initial revision diff -r 04c62275cbc7 -r d22432bdcba1 tests/test-convert-cvs-builtincvsps.out --- a/tests/test-convert-cvs-builtincvsps.out Sat Apr 11 21:15:27 2009 +0200 +++ b/tests/test-convert-cvs-builtincvsps.out Sat Apr 11 21:17:11 2009 +0200 @@ -13,13 +13,13 @@ checking in src/b/c,v % convert fresh repo initializing destination src-hg repository +connecting to cvsrepo +scanning source... using builtin cvsps collecting CVS rlog 5 log entries creating changesets 3 changeset entries -connecting to cvsrepo -scanning source... sorting... converting... 2 Initial revision @@ -31,13 +31,13 @@ c % convert fresh repo with --filemap initializing destination src-filemap repository +connecting to cvsrepo +scanning source... using builtin cvsps collecting CVS rlog 5 log entries creating changesets 3 changeset entries -connecting to cvsrepo -scanning source... sorting... converting... 2 Initial revision @@ -54,13 +54,13 @@ checking in src/a,v checking in src/b/c,v % convert again +connecting to cvsrepo +scanning source... using builtin cvsps collecting CVS rlog 7 log entries creating changesets 4 changeset entries -connecting to cvsrepo -scanning source... sorting... converting... 0 ci1 @@ -70,13 +70,13 @@ c c % convert again with --filemap +connecting to cvsrepo +scanning source... using builtin cvsps collecting CVS rlog 7 log entries creating changesets 4 changeset entries -connecting to cvsrepo -scanning source... sorting... converting... 0 ci1 @@ -93,13 +93,13 @@ T b/c checking in src/b/c,v % convert again +connecting to cvsrepo +scanning source... using builtin cvsps collecting CVS rlog 8 log entries creating changesets 5 changeset entries -connecting to cvsrepo -scanning source... sorting... converting... 0 ci2 @@ -107,13 +107,13 @@ c d % convert again with --filemap +connecting to cvsrepo +scanning source... using builtin cvsps collecting CVS rlog 8 log entries creating changesets 5 changeset entries -connecting to cvsrepo -scanning source... sorting... converting... 0 ci2 @@ -127,13 +127,13 @@ % commit a new revision with funny log message checking in src/a,v % convert again +connecting to cvsrepo +scanning source... using builtin cvsps collecting CVS rlog 9 log entries creating changesets 6 changeset entries -connecting to cvsrepo -scanning source... sorting... converting... 0 funny diff -r 04c62275cbc7 -r d22432bdcba1 tests/test-convert-cvs-synthetic.out --- a/tests/test-convert-cvs-synthetic.out Sat Apr 11 21:15:27 2009 +0200 +++ b/tests/test-convert-cvs-synthetic.out Sat Apr 11 21:17:11 2009 +0200 @@ -34,13 +34,13 @@ new revision: 1.1.4.2; previous revision: 1.1.4.1 % convert to hg initializing destination proj.hg repository +connecting to *REPO* +scanning source... using builtin cvsps collecting CVS rlog 9 log entries creating changesets 4 changeset entries -connecting to *REPO* -scanning source... sorting... converting... 3 add file1 on trunk