Mercurial > hg
changeset 20517:2158e8f3cbd2
createmarkers: allow to pass metadata for a marker only
The `metadata` argument only allow to specify metadata for all new markers. We
extension the format of the `relations` argument to support optional metadata
argument.
The first user of this should be the evolve extension who want to store parent
information of pruned changeset in extra (until we make a second version of the
format)
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Thu, 13 Feb 2014 17:34:09 -0800 |
parents | 3af218cf2007 |
children | 1e43f15a647f |
files | mercurial/obsolete.py |
diffstat | 1 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/obsolete.py Thu Feb 13 17:33:45 2014 -0800 +++ b/mercurial/obsolete.py Thu Feb 13 17:34:09 2014 -0800 @@ -811,8 +811,10 @@ def createmarkers(repo, relations, flag=0, metadata=None): """Add obsolete markers between changesets in a repo - <relations> must be an iterable of (<old>, (<new>, ...)) tuple. - `old` and `news` are changectx. + <relations> must be an iterable of (<old>, (<new>, ...)[,{metadata}]) + tuple. `old` and `news` are changectx. metadata is an optional dictionnary + containing metadata for this marker only. It is merged with the global + metadata specified through the `metadata` argument of this function, Trying to obsolete a public changeset will raise an exception. @@ -831,7 +833,13 @@ metadata['user'] = repo.ui.username() tr = repo.transaction('add-obsolescence-marker') try: - for prec, sucs in relations: + for rel in relations: + prec = rel[0] + sucs = rel[1] + localmetadata = metadata.copy() + if 2 < len(rel): + localmetadata.update(rel[2]) + if not prec.mutable(): raise util.Abort("cannot obsolete immutable changeset: %s" % prec) @@ -839,7 +847,7 @@ nsucs = tuple(s.node() for s in sucs) if nprec in nsucs: raise util.Abort("changeset %s cannot obsolete itself" % prec) - repo.obsstore.create(tr, nprec, nsucs, flag, metadata) + repo.obsstore.create(tr, nprec, nsucs, flag, localmetadata) repo.filteredrevcache.clear() tr.close() finally: