diff -r f47a5f990eb2 -r 6a7dc5ca05b8 hgext/states.py --- a/hgext/states.py Mon Sep 12 23:47:06 2011 +0200 +++ b/hgext/states.py Tue Sep 13 00:45:42 2011 +0200 @@ -250,7 +250,8 @@ Other extensions ................ -:Rebase: can't rewrite unpublished changeset. +:rebase: can't rebase immutable changeset. +:mq: can't qimport immutable changeset. @@ -656,6 +657,18 @@ hint=_('see `hg help --extension states` for details')) return result +def wrapmqqimport(orig, queue, repo, *args, **kwargs): + if 'rev' in kwargs: + # we can take the min as non linear import wil break + base = min(scmutil.revrange(repo, kwargs['rev'])) + basenode = repo.changelog.node(base) + state = repo.nodestate(basenode) + if not state.properties & _MUTABLE: + raise util.Abort(_('can not qimport published changeset %s') + % node.short(basenode), + hint=_('see `hg help --extension states` for details')) + return orig(queue, repo, *args, **kwargs) + def uisetup(ui): """ @@ -679,12 +692,20 @@ for state in STATES: if state.trackheads: revset.symbols[state.headssymbol] = state._revsetheads + # wrap rebase try: rebase = extensions.find('rebase') if rebase: extensions.wrapfunction(rebase, 'buildstate', wraprebasebuildstate) except KeyError: pass # rebase not found + # wrap mq + try: + mq = extensions.find('mq') + if mq: + extensions.wrapfunction(mq.queue, 'qimport', wrapmqqimport) + except KeyError: + pass # mq not found