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 |