hgext/obsolete.py
branchstable
changeset 337 ebfd1b96a013
parent 336 7db8107eef30
child 338 b922d144f93d
equal deleted inserted replaced
336:7db8107eef30 337:ebfd1b96a013
   567 
   567 
   568 @command('debugconvertobsolete', [], '')
   568 @command('debugconvertobsolete', [], '')
   569 def cmddebugconvertobsolete(ui, repo):
   569 def cmddebugconvertobsolete(ui, repo):
   570     """import markers from an .hg/obsolete-relations file"""
   570     """import markers from an .hg/obsolete-relations file"""
   571     cnt = 0
   571     cnt = 0
   572     error = 0
   572     err = 0
   573     l = repo.lock()
   573     l = repo.lock()
   574     some = False
   574     some = False
   575     try:
   575     try:
   576         repo._importoldobsolete = True
   576         repo._importoldobsolete = True
   577         store = repo.obsstore
   577         store = repo.obsstore
   599         ### second (json) format
   599         ### second (json) format
   600         data = repo.sopener.tryread('obsoletemarkers')
   600         data = repo.sopener.tryread('obsoletemarkers')
   601         if data:
   601         if data:
   602             some = True
   602             some = True
   603             for oldmark in json.loads(data):
   603             for oldmark in json.loads(data):
   604                 del oldmark['id'] # dropped for now
   604                 del oldmark['id']  # dropped for now
   605                 del oldmark['reason'] # unused until then
   605                 del oldmark['reason']  # unused until then
   606                 oldobject = oldmark['object']
   606                 oldobject = str(oldmark.pop('object'))
   607                 oldsubjects = oldmark['subjects']
   607                 oldsubjects = [str(s) for s in oldmark.pop('subjects')]
   608                 oldmark['subjects'] = [bin(n) for n in oldmark['subjects']]
   608                 if len(oldobject) != 40:
   609                 oldmark['object'] = bin(oldmark['object'])
   609                     try:
       
   610                         oldobject = repo[oldobject].node()
       
   611                     except error.RepoLookupError:
       
   612                         pass
       
   613                 if any(len(s) != 40 for s in oldsubjects):
       
   614                     try:
       
   615                         oldsubjects = [repo[s].node() for s in oldsubjects]
       
   616                     except error.RepoLookupError:
       
   617                         pass
       
   618 
   610                 oldmark['date'] = '%i %i' % tuple(oldmark['date'])
   619                 oldmark['date'] = '%i %i' % tuple(oldmark['date'])
   611                 assert oldmark['object'], repr(oldmark['object'])
       
   612                 try:
   620                 try:
   613                     store.create(oldmark.pop('object'),
   621                     store.create(bin(oldobject), [bin(n) for n in oldsubjects],
   614                                  oldmark.pop('subjects'),
       
   615                                  0, oldmark)
   622                                  0, oldmark)
   616                 except ValueError:
   623                 except ValueError:
   617                     repo.ui.write_err("invalid marker %s -> %s\n"
   624                     repo.ui.write_err("invalid marker %s -> %s\n"
   618                                  % (oldobject, oldsubjects))
   625                                  % (oldobject, oldsubjects))
   619                     error += 1
   626                     err += 1
   620                 cnt += 1
   627                 cnt += 1
   621             util.unlink(repo.sjoin('obsoletemarkers'))
   628             util.unlink(repo.sjoin('obsoletemarkers'))
   622     finally:
   629     finally:
   623         del repo._importoldobsolete
   630         del repo._importoldobsolete
   624         l.release()
   631         l.release()
   625     if not some:
   632     if not some:
   626             ui.warn('nothing to do\n')
   633             ui.warn('nothing to do\n')
   627     ui.status('%i obsolete marker converted\n' % cnt)
   634     ui.status('%i obsolete marker converted\n' % cnt)
   628     if error:
   635     if err:
   629         ui.write_err('%i conversion failed. check you graph!\n' % error)
   636         ui.write_err('%i conversion failed. check you graph!\n' % err)
   630 
   637 
   631 @command('debugsuccessors', [], '')
   638 @command('debugsuccessors', [], '')
   632 def cmddebugsuccessors(ui, repo):
   639 def cmddebugsuccessors(ui, repo):
   633     """dump obsolete changesets and their successors
   640     """dump obsolete changesets and their successors
   634 
   641