hgext/evolve.py
changeset 211 69a37d56c7fb
parent 196 dea67dae27a4
child 219 cfdab01ca8a0
--- a/hgext/evolve.py	Mon Apr 23 18:53:26 2012 +0200
+++ b/hgext/evolve.py	Mon Apr 23 18:54:17 2012 +0200
@@ -31,18 +31,26 @@
     return map(repo.changelog.node,
                scmutil.revrange(repo, revsets))
 
+
+
+def warnunstable(orig, ui, repo, *args, **kwargs):
+    """display warning is the command resulted in more instable changeset"""
+    priorunstables = len(repo.revs('unstable()'))
+    #print orig, priorunstables
+    #print len(repo.revs('secret() - obsolete()'))
+    try:
+        return orig(ui, repo, *args, **kwargs)
+    finally:
+        newunstables = len(repo.revs('unstable()')) - priorunstables
+        #print orig, newunstables
+        #print len(repo.revs('secret() - obsolete()'))
+        if newunstables > 0:
+            ui.warn(_('%i new unstables changesets\n') % newunstables)
+
+
 ### extension check
 #############################
 
-def extsetup(ui):
-    try:
-        obsolete = extensions.find('obsolete')
-    except KeyError:
-        raise error.Abort(_('evolution extension require obsolete extension.'))
-    try:
-        rebase = extensions.find('rebase')
-    except KeyError:
-        raise error.Abort(_('evolution extension require rebase extension.'))
 
 ### changeset rewriting logic
 #############################
@@ -374,13 +382,6 @@
             if not old.phase():
                 raise util.Abort(_("can not rewrite immutable changeset %s") % old)
 
-            # store the amount of unstable prior update
-            if old.children():
-                priorunstables = len(repo.revs('unstable()'))
-            else:
-                #no children mean no change for unstable changeset
-                priorunstables = None
-
             # commit current changes as update
             # code copied from commands.commit to avoid noisy messages
             ciopts = dict(opts)
@@ -420,15 +421,14 @@
             phases.retractboundary(repo, old.phase(), [newid])
             repo.dirstate.setparents(newid, node.nullid)
 
-            if priorunstables is not None:
-                newunstables = len(repo.revs('unstable()')) - priorunstables
-                if newunstables > 0:
-                    ui.warn(_('%i new unstables changesets\n') % newunstables)
         finally:
             wlock.release()
     finally:
         lock.release()
 
+
+
+
 def commitwrapper(orig, ui, repo, *arg, **kwargs):
     lock = repo.lock()
     try:
@@ -472,8 +472,27 @@
         lock.release()
 
 def extsetup(ui):
+    try:
+        obsolete = extensions.find('obsolete')
+    except KeyError:
+        raise error.Abort(_('evolution extension require obsolete extension.'))
+    try:
+        rebase = extensions.find('rebase')
+    except KeyError:
+        rebase = None
+        raise error.Abort(_('evolution extension require rebase extension.'))
+
     entry = extensions.wrapcommand(commands.table, 'commit', commitwrapper)
     entry[1].append(('o', 'obsolete', [], _("this commit obsolet this revision")))
     entry = extensions.wrapcommand(commands.table, 'graft', graftwrapper)
     entry[1].append(('o', 'obsolete', [], _("this graft obsolet this revision")))
     entry[1].append(('O', 'old-obsolete', False, _("graft result obsolete graft source")))
+
+    # warning about more obsolete
+    for cmd in ['commit', 'push', 'pull', 'graft']:
+        entry = extensions.wrapcommand(commands.table, cmd, warnunstable)
+    for cmd in ['kill', 'amend']:
+        entry = extensions.wrapcommand(cmdtable, cmd, warnunstable)
+
+    if rebase is not None:
+        entry = extensions.wrapcommand(rebase.cmdtable, 'rebase', warnunstable)