mercurial/obsolete.py
changeset 20517 2158e8f3cbd2
parent 20516 3af218cf2007
child 20549 2025315cfb0c
equal deleted inserted replaced
20516:3af218cf2007 20517:2158e8f3cbd2
   809 
   809 
   810 
   810 
   811 def createmarkers(repo, relations, flag=0, metadata=None):
   811 def createmarkers(repo, relations, flag=0, metadata=None):
   812     """Add obsolete markers between changesets in a repo
   812     """Add obsolete markers between changesets in a repo
   813 
   813 
   814     <relations> must be an iterable of (<old>, (<new>, ...)) tuple.
   814     <relations> must be an iterable of (<old>, (<new>, ...)[,{metadata}])
   815     `old` and `news` are changectx.
   815     tuple. `old` and `news` are changectx. metadata is an optional dictionnary
       
   816     containing metadata for this marker only. It is merged with the global
       
   817     metadata specified through the `metadata` argument of this function,
   816 
   818 
   817     Trying to obsolete a public changeset will raise an exception.
   819     Trying to obsolete a public changeset will raise an exception.
   818 
   820 
   819     Current user and date are used except if specified otherwise in the
   821     Current user and date are used except if specified otherwise in the
   820     metadata attribute.
   822     metadata attribute.
   829         metadata['date'] = '%i %i' % util.makedate()
   831         metadata['date'] = '%i %i' % util.makedate()
   830     if 'user' not in metadata:
   832     if 'user' not in metadata:
   831         metadata['user'] = repo.ui.username()
   833         metadata['user'] = repo.ui.username()
   832     tr = repo.transaction('add-obsolescence-marker')
   834     tr = repo.transaction('add-obsolescence-marker')
   833     try:
   835     try:
   834         for prec, sucs in relations:
   836         for rel in relations:
       
   837             prec = rel[0]
       
   838             sucs = rel[1]
       
   839             localmetadata = metadata.copy()
       
   840             if 2 < len(rel):
       
   841                 localmetadata.update(rel[2])
       
   842 
   835             if not prec.mutable():
   843             if not prec.mutable():
   836                 raise util.Abort("cannot obsolete immutable changeset: %s"
   844                 raise util.Abort("cannot obsolete immutable changeset: %s"
   837                                  % prec)
   845                                  % prec)
   838             nprec = prec.node()
   846             nprec = prec.node()
   839             nsucs = tuple(s.node() for s in sucs)
   847             nsucs = tuple(s.node() for s in sucs)
   840             if nprec in nsucs:
   848             if nprec in nsucs:
   841                 raise util.Abort("changeset %s cannot obsolete itself" % prec)
   849                 raise util.Abort("changeset %s cannot obsolete itself" % prec)
   842             repo.obsstore.create(tr, nprec, nsucs, flag, metadata)
   850             repo.obsstore.create(tr, nprec, nsucs, flag, localmetadata)
   843             repo.filteredrevcache.clear()
   851             repo.filteredrevcache.clear()
   844         tr.close()
   852         tr.close()
   845     finally:
   853     finally:
   846         tr.release()
   854         tr.release()