Show More
@@ -395,3 +395,39 b' def _computesuspendedset(repo):' | |||
|
395 | 395 | def _computeextinctset(repo): |
|
396 | 396 | """the set of obsolete parents without non obsolete descendants""" |
|
397 | 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