Mercurial > hg-stable
changeset 6049:348132c112cf
convert: improve gnu arch source performance and other fixes
- Improve performance by reading 'replay' output instead of
calling 'delta' command after 'replay'. This increases speed
significantly.
- Some times 'replay' command might fail with conflicts (don't
know why), a new get from that revision just fixes it. So,
if something fails, get a fresh copy from that revision and
try from there.
author | Aleix Conchillo Flaque <aleix@member.fsf.org> |
---|---|
date | Fri, 08 Feb 2008 13:56:29 +0100 |
parents | cfb4a51da7d5 |
children | adf73753eb7d 57c1a7052982 |
files | hgext/convert/common.py hgext/convert/gnuarch.py |
diffstat | 2 files changed, 27 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/convert/common.py Fri Feb 08 18:31:55 2008 -0200 +++ b/hgext/convert/common.py Fri Feb 08 13:56:29 2008 +0100 @@ -249,7 +249,7 @@ def runlines(self, cmd, *args, **kwargs): fp = self._run(cmd, *args, **kwargs) output = fp.readlines() - self.ui.debug(output) + self.ui.debug(''.join(output)) return output, fp.close() def checkexit(self, status, output=''): @@ -267,7 +267,7 @@ def runlines0(self, cmd, *args, **kwargs): output, status = self.runlines(cmd, *args, **kwargs) - self.checkexit(status, output) + self.checkexit(status, ''.join(output)) return output def getargmax(self):
--- a/hgext/convert/gnuarch.py Fri Feb 08 18:31:55 2008 -0200 +++ b/hgext/convert/gnuarch.py Fri Feb 08 13:56:29 2008 +0100 @@ -155,24 +155,24 @@ def _update(self, rev): if rev == 'base-0': # Initialise 'base-0' revision - self.ui.debug(_('obtaining revision %s...\n' % rev)) - revision = '%s--%s' % (self.treeversion, rev) - output = self._execute('get', revision, self.tmppath) - self.ui.debug(_('analysing revision %s...\n' % rev)) - files = self._readcontents(self.tmppath) - self.changes[rev].add_files += files + self._obtainrevision(rev) else: self.ui.debug(_('applying revision %s...\n' % rev)) revision = '%s--%s' % (self.treeversion, rev) - output = self._execute('replay', '-d', self.tmppath, revision) - - old_rev = self.parents[rev][0] - self.ui.debug(_('computing changeset between %s and %s...\n' \ - % (old_rev, rev))) - rev_a = '%s--%s' % (self.treeversion, old_rev) - rev_b = '%s--%s' % (self.treeversion, rev) - delta = self.runlines0('delta', '-n', rev_a, rev_b) - self._parsedelta(delta, rev) + changeset, status = self.runlines('replay', '-d', self.tmppath, + revision) + if status: + # Something went wrong while merging (baz or tla + # issue?), get latest revision and try from there + shutil.rmtree(self.tmppath, ignore_errors=True) + self._obtainrevision(rev) + else: + old_rev = self.parents[rev][0] + self.ui.debug(_('computing changeset between %s and %s...\n' \ + % (old_rev, rev))) + rev_a = '%s--%s' % (self.treeversion, old_rev) + rev_b = '%s--%s' % (self.treeversion, rev) + self._parsechangeset(changeset, rev) def _getfile(self, name, rev): mode = os.lstat(os.path.join(self.tmppath, name)).st_mode @@ -218,6 +218,15 @@ copies[s] = d return changes, copies + def _obtainrevision(self, rev): + self.ui.debug(_('obtaining revision %s...\n' % rev)) + revision = '%s--%s' % (self.treeversion, rev) + output = self._execute('get', revision, self.tmppath) + self.checkexit(output) + self.ui.debug(_('analysing revision %s...\n' % rev)) + files = self._readcontents(self.tmppath) + self.changes[rev].add_files += files + def _parsecatlog(self, data, rev): summary = [] for l in data: @@ -234,7 +243,7 @@ self.changes[rev].author = l[len('Creator: '):] self.changes[rev].summary = '\n'.join(summary) - def _parsedelta(self, data, rev): + def _parsechangeset(self, data, rev): for l in data: l = l.strip() if l.startswith('A') and not l.startswith('A/'):