[PATCH] transplant: add the transplanted revset predicate

Juan Pablo Aroztegi juanpablo.aroztegi at openbravo.com
Tue Sep 28 12:44:00 CDT 2010


# HG changeset patch
# User Juan Pablo Aroztegi <juanpablo.aroztegi at openbravo.com>
# Date 1285695365 -7200
# Node ID 40e17f5530b1901028a58415446f0d9e96c9828e
# Parent  f18fd371ecbd523dd1c292871815285348e54add
transplant: add the transplanted revset predicate

This adds support to identify a particular transplanted changeset or set
of changesets. The argument is optional. Examples:

hg log -r 'transplanted(1234 or 2345)'
hg log -r 'transplanted()'

diff -r f18fd371ecbd -r 40e17f5530b1 hgext/transplant.py
--- a/hgext/transplant.py	Sun Sep 26 13:44:49 2010 -0500
+++ b/hgext/transplant.py	Tue Sep 28 19:36:05 2010 +0200
@@ -17,6 +17,7 @@
 import os, tempfile
 from mercurial import bundlerepo, changegroup, cmdutil, hg, merge, match
 from mercurial import patch, revlog, util, error, discovery
+from mercurial import revset, help
 
 class transplantentry(object):
     def __init__(self, lnode, rnode):
@@ -603,6 +604,30 @@
             source.close()
             os.unlink(bundle)
 
+def revsettransplanted(repo, subset, x):
+    if x:
+      s = revset.getset(repo, subset, x)
+    else:
+      s = subset
+    cs = set()
+    for r in xrange(0, len(repo)):
+      if repo[r].extra().get('transplant_source'):
+        cs.add(r)
+    return [r for r in s if r in cs]
+
+def revsetdoc():
+    doc = help.loaddoc('revsets')()
+    doc += _('\nAdded by the transplant extension:\n\n'
+           '``transplanted(set)``\n'
+           '  Transplanted changesets in set.\n')
+    return doc
+
+def uisetup(ui):
+    'Add the transplanted revset predicate'
+    for i in (i for i, x in enumerate(help.helptable) if x[0] == ['revsets']):
+        help.helptable[i] = (['revsets'], _("Specifying Revision Sets"), revsetdoc)
+    revset.symbols['transplanted'] = revsettransplanted
+
 cmdtable = {
     "transplant":
         (transplant,



More information about the Mercurial-devel mailing list