hgext/obsolete.py
changeset 348 afbe4fc8de42
parent 343 6b92f8d5ae58
parent 344 9bbcd2746898
child 349 9c156b9caa4f
equal deleted inserted replaced
347:631cdf4295bc 348:afbe4fc8de42
   524 
   524 
   525 @command('debugconvertobsolete', [], '')
   525 @command('debugconvertobsolete', [], '')
   526 def cmddebugconvertobsolete(ui, repo):
   526 def cmddebugconvertobsolete(ui, repo):
   527     """import markers from an .hg/obsolete-relations file"""
   527     """import markers from an .hg/obsolete-relations file"""
   528     cnt = 0
   528     cnt = 0
       
   529     err = 0
   529     l = repo.lock()
   530     l = repo.lock()
   530     some = False
   531     some = False
   531     try:
   532     try:
   532         repo._importoldobsolete = True
   533         repo._importoldobsolete = True
   533         store = repo.obsstore
   534         store = repo.obsstore
   543                     sucs = (suc==nullid) and [] or [suc]
   544                     sucs = (suc==nullid) and [] or [suc]
   544                     meta = {
   545                     meta = {
   545                         'date':  '%i %i' % util.makedate(),
   546                         'date':  '%i %i' % util.makedate(),
   546                         'user': ui.username(),
   547                         'user': ui.username(),
   547                         }
   548                         }
   548                     store.create(prec, sucs, 0, meta)
   549                     try:
   549                     cnt += 1
   550                         store.create(prec, sucs, 0, meta)
       
   551                         cnt += 1
       
   552                     except ValueError:
       
   553                         repo.ui.write_err("invalid old marker line: %s"
       
   554                                           % (line))
       
   555                         err += 1
   550             finally:
   556             finally:
   551                 f.close()
   557                 f.close()
   552             util.unlink(repo.join('obsolete-relations'))
   558             util.unlink(repo.join('obsolete-relations'))
   553         except IOError:
   559         except IOError:
   554             pass
   560             pass
   555         ### second (json) format
   561         ### second (json) format
   556         data = repo.sopener.tryread('obsoletemarkers')
   562         data = repo.sopener.tryread('obsoletemarkers')
   557         if data:
   563         if data:
   558             some = True
   564             some = True
   559             for oldmark in json.loads(data):
   565             for oldmark in json.loads(data):
   560                 del oldmark['id'] # dropped for now
   566                 del oldmark['id']  # dropped for now
   561                 del oldmark['reason'] # unused until then
   567                 del oldmark['reason']  # unused until then
   562                 oldmark['subjects'] = [bin(n) for n in oldmark['subjects']]
   568                 oldobject = str(oldmark.pop('object'))
   563                 oldmark['object'] = bin(oldmark['object'])
   569                 oldsubjects = [str(s) for s in oldmark.pop('subjects')]
       
   570                 LOOKUP_ERRORS = (error.RepoLookupError, error.LookupError)
       
   571                 if len(oldobject) != 40:
       
   572                     try:
       
   573                         oldobject = repo[oldobject].node()
       
   574                     except LOOKUP_ERRORS:
       
   575                         pass
       
   576                 if any(len(s) != 40 for s in oldsubjects):
       
   577                     try:
       
   578                         oldsubjects = [repo[s].node() for s in oldsubjects]
       
   579                     except LOOKUP_ERRORS:
       
   580                         pass
       
   581 
   564                 oldmark['date'] = '%i %i' % tuple(oldmark['date'])
   582                 oldmark['date'] = '%i %i' % tuple(oldmark['date'])
   565                 store.create(oldmark.pop('object'),
   583                 meta = dict((k.encode('utf-8'), v.encode('utf-8'))
   566                              oldmark.pop('subjects'),
   584                              for k, v in oldmark.iteritems())
   567                              0, oldmark)
   585                 try:
   568                 cnt += 1
   586                     store.create(bin(oldobject), [bin(n) for n in oldsubjects],
       
   587                                  0, meta)
       
   588                     cnt += 1
       
   589                 except ValueError:
       
   590                     repo.ui.write_err("invalid marker %s -> %s\n"
       
   591                                  % (oldobject, oldsubjects))
       
   592                     err += 1
   569             util.unlink(repo.sjoin('obsoletemarkers'))
   593             util.unlink(repo.sjoin('obsoletemarkers'))
   570     finally:
   594     finally:
   571         del repo._importoldobsolete
   595         del repo._importoldobsolete
   572         l.release()
   596         l.release()
   573     if not some:
   597     if not some:
   574             ui.warn('nothing to do\n')
   598             ui.warn('nothing to do\n')
   575     ui.status('%i obsolete marker converted\n' % cnt)
   599     ui.status('%i obsolete marker converted\n' % cnt)
       
   600     if err:
       
   601         ui.write_err('%i conversion failed. check you graph!\n' % err)
   576 
   602 
   577 @command('debugsuccessors', [], '')
   603 @command('debugsuccessors', [], '')
   578 def cmddebugsuccessors(ui, repo):
   604 def cmddebugsuccessors(ui, repo):
   579     """dump obsolete changesets and their successors
   605     """dump obsolete changesets and their successors
   580 
   606 
   734 
   760 
   735 def reposetup(ui, repo):
   761 def reposetup(ui, repo):
   736     if not repo.local():
   762     if not repo.local():
   737         return
   763         return
   738 
   764 
       
   765     if not util.safehasattr(repo.opener, 'tryread'):
       
   766         raise util.Abort('Obsolete extension require Mercurial 2.2 (or later)')
   739     opull = repo.pull
   767     opull = repo.pull
   740     opush = repo.push
   768     opush = repo.push
   741     olock = repo.lock
   769     olock = repo.lock
   742     o_rollback = repo._rollback
   770     o_rollback = repo._rollback
   743     o_updatebranchcache = repo.updatebranchcache
   771     o_updatebranchcache = repo.updatebranchcache