obsolete: convert try to guess what invalid node id are stable
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Wed, 04 Jul 2012 18:00:43 +0200
branchstable
changeset 337 ebfd1b96a013
parent 336 7db8107eef30
child 338 b922d144f93d
obsolete: convert try to guess what invalid node id are invalid input are probably short version of node
hgext/obsolete.py
--- a/hgext/obsolete.py	Wed Jul 04 17:51:33 2012 +0200
+++ b/hgext/obsolete.py	Wed Jul 04 18:00:43 2012 +0200
@@ -569,7 +569,7 @@
 def cmddebugconvertobsolete(ui, repo):
     """import markers from an .hg/obsolete-relations file"""
     cnt = 0
-    error = 0
+    err = 0
     l = repo.lock()
     some = False
     try:
@@ -601,22 +601,29 @@
         if data:
             some = True
             for oldmark in json.loads(data):
-                del oldmark['id'] # dropped for now
-                del oldmark['reason'] # unused until then
-                oldobject = oldmark['object']
-                oldsubjects = oldmark['subjects']
-                oldmark['subjects'] = [bin(n) for n in oldmark['subjects']]
-                oldmark['object'] = bin(oldmark['object'])
+                del oldmark['id']  # dropped for now
+                del oldmark['reason']  # unused until then
+                oldobject = str(oldmark.pop('object'))
+                oldsubjects = [str(s) for s in oldmark.pop('subjects')]
+                if len(oldobject) != 40:
+                    try:
+                        oldobject = repo[oldobject].node()
+                    except error.RepoLookupError:
+                        pass
+                if any(len(s) != 40 for s in oldsubjects):
+                    try:
+                        oldsubjects = [repo[s].node() for s in oldsubjects]
+                    except error.RepoLookupError:
+                        pass
+
                 oldmark['date'] = '%i %i' % tuple(oldmark['date'])
-                assert oldmark['object'], repr(oldmark['object'])
                 try:
-                    store.create(oldmark.pop('object'),
-                                 oldmark.pop('subjects'),
+                    store.create(bin(oldobject), [bin(n) for n in oldsubjects],
                                  0, oldmark)
                 except ValueError:
                     repo.ui.write_err("invalid marker %s -> %s\n"
                                  % (oldobject, oldsubjects))
-                    error += 1
+                    err += 1
                 cnt += 1
             util.unlink(repo.sjoin('obsoletemarkers'))
     finally:
@@ -625,8 +632,8 @@
     if not some:
             ui.warn('nothing to do\n')
     ui.status('%i obsolete marker converted\n' % cnt)
-    if error:
-        ui.write_err('%i conversion failed. check you graph!\n' % error)
+    if err:
+        ui.write_err('%i conversion failed. check you graph!\n' % err)
 
 @command('debugsuccessors', [], '')
 def cmddebugsuccessors(ui, repo):