--- 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)