changeset 336:7db8107eef30 stable

obsolete: Only warn on bad obsolete marker Older version probably created invalide one.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Wed, 04 Jul 2012 17:51:33 +0200
parents c27a465daef2
children ebfd1b96a013
files hgext/obsolete.py
diffstat 1 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/obsolete.py
+++ b/hgext/obsolete.py
@@ -569,6 +569,7 @@
 def cmddebugconvertobsolete(ui, repo):
     """import markers from an .hg/obsolete-relations file"""
     cnt = 0
+    error = 0
     l = repo.lock()
     some = False
     try:
@@ -602,12 +603,20 @@
             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'])
                 oldmark['date'] = '%i %i' % tuple(oldmark['date'])
-                store.create(oldmark.pop('object'),
-                             oldmark.pop('subjects'),
-                             0, oldmark)
+                assert oldmark['object'], repr(oldmark['object'])
+                try:
+                    store.create(oldmark.pop('object'),
+                                 oldmark.pop('subjects'),
+                                 0, oldmark)
+                except ValueError:
+                    repo.ui.write_err("invalid marker %s -> %s\n"
+                                 % (oldobject, oldsubjects))
+                    error += 1
                 cnt += 1
             util.unlink(repo.sjoin('obsoletemarkers'))
     finally:
@@ -616,6 +625,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)
 
 @command('debugsuccessors', [], '')
 def cmddebugsuccessors(ui, repo):