hgext/convert/gnuarch.py
changeset 6049 348132c112cf
parent 6044 9360a58a09e6
child 6055 a3d8b1f8721d
--- 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/'):