##// END OF EJS Templates
obsolete: add a high level function to create an obsolete marker...
Pierre-Yves David -
r17474:f85816af default
parent child Browse files
Show More
@@ -395,3 +395,39 b' def _computesuspendedset(repo):'
395 def _computeextinctset(repo):
395 def _computeextinctset(repo):
396 """the set of obsolete parents without non obsolete descendants"""
396 """the set of obsolete parents without non obsolete descendants"""
397 return set(repo.revs('obsolete() - obsolete()::unstable()'))
397 return set(repo.revs('obsolete() - obsolete()::unstable()'))
398
399 def createmarkers(repo, relations, flag=0, metadata=None):
400 """Add obsolete markers between changesets in a repo
401
402 <relations> must be an iterable of (<old>, (<new>, ...)) tuple.
403 `old` and `news` are changectx.
404
405 Trying to obsolete a public changeset will raise an exception.
406
407 Current user and date are used except if specified otherwise in the
408 metadata attribute.
409
410 This function operates within a transaction of its own, but does
411 not take any lock on the repo.
412 """
413 # prepare metadata
414 if metadata is None:
415 metadata = {}
416 if 'date' not in metadata:
417 metadata['date'] = '%i %i' % util.makedate()
418 if 'user' not in metadata:
419 metadata['user'] = repo.ui.username()
420 tr = repo.transaction('add-obsolescence-marker')
421 try:
422 for prec, sucs in relations:
423 if not prec.mutable():
424 raise util.Abort("cannot obsolete immutable changeset: %s"
425 % prec)
426 nprec = prec.node()
427 nsucs = tuple(s.node() for s in sucs)
428 if nprec in nsucs:
429 raise util.Abort("changeset %s cannot obsolete itself" % prec)
430 repo.obsstore.create(tr, nprec, nsucs, flag, metadata)
431 tr.close()
432 finally:
433 tr.release()
General Comments 0
You need to be logged in to leave comments. Login now