diff -r a91115687a7e -r db19b1dc5c45 hgext/evolve.py --- a/hgext/evolve.py Thu Mar 17 10:04:30 2016 -0700 +++ b/hgext/evolve.py Thu Mar 17 11:25:01 2016 -0700 @@ -2079,6 +2079,7 @@ [('B', 'move-bookmark', False, _('move active bookmark after update')), ('', 'merge', False, _('bring uncommitted change along')), + ('', 'no-topic', False, _('ignore topic and move topologically')), ('n', 'dry-run', False, _('do not perform actions, just print what would be done'))], '[OPTION]...') @@ -2160,6 +2161,12 @@ raise children = [ctx for ctx in wparents[0].children() if not ctx.obsolete()] + topic = getattr(repo, 'currenttopic', '') + filtered = [] + if topic and not opts.get("no_topic", False): + filtered = [ctx for ctx in children if ctx.topic() != topic] + # XXX N-square membership on children + children = [ctx for ctx in children if ctx not in filtered] displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) if len(children) == 1: c = children[0] @@ -2195,8 +2202,17 @@ result = 1 else: aspchildren = _aspiringchildren(repo, [repo['.'].rev()]) + if topic: + filtered.extend(repo[c] for c in children + if repo[c].topic() != topic) + # XXX N-square membership on children + aspchildren = [ctx for ctx in aspchildren if ctx not in filtered] if not opts['evolve'] or not aspchildren: - ui.warn(_('no children\n')) + if filtered: + ui.warn(_('no children on topic "%s"\n') % topic) + ui.warn(_('do you want --no-topic\n')) + else: + ui.warn(_('no children\n')) if aspchildren: msg = _('(%i unstable changesets to be evolved here, ' 'do you want --evolve?)\n')