# HG changeset patch # User Aurélien Campéas # Date 1506091297 -7200 # Node ID 4746b92cc1f881df1079dc0758e630028605c174 # Parent f63c97c01f92d484674c5c810a60ed7f73fc0fa1 topics/ui: signal when an operation entails voiding a topic Typical situations may include: * publish * push (to publishing server) * pull * fold diff -r f63c97c01f92 -r 4746b92cc1f8 hgext3rd/topic/__init__.py --- a/hgext3rd/topic/__init__.py Tue Sep 26 12:29:15 2017 +0200 +++ b/hgext3rd/topic/__init__.py Fri Sep 22 16:41:37 2017 +0200 @@ -54,6 +54,7 @@ import re import time +import weakref from mercurial.i18n import _ from mercurial import ( @@ -311,6 +312,24 @@ peer.__class__ = topicpeer return peer + def transaction(self, *a, **k): + tr = super(topicrepo, self).transaction(*a, **k) + + reporef = weakref.ref(self) + + def currenttopicempty(tr): + # check active topic emptyness + ct = self.currenttopic + if not ct: + return + repo = reporef() + empty = stack.stackdata(repo, topic=ct)['changesetcount'] == 0 + if empty: + ui.status('active topic %r is now empty\n' % ct) + + tr.addpostclose('signalcurrenttopicempty', currenttopicempty) + return tr + repo.__class__ = topicrepo repo._topics = None if util.safehasattr(repo, 'names'): diff -r f63c97c01f92 -r 4746b92cc1f8 tests/test-topic-fold.t --- a/tests/test-topic-fold.t Tue Sep 26 12:29:15 2017 +0200 +++ b/tests/test-topic-fold.t Fri Sep 22 16:41:37 2017 +0200 @@ -90,6 +90,7 @@ o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 topics: $ hg fold --exact -r "(tip~1)::" -m "folded 2" + active topic 'myotherfeature' is now empty 2 changesets folded clearing empty topic "myotherfeature" 0 files updated, 0 files merged, 0 files removed, 0 files unresolved diff -r f63c97c01f92 -r 4746b92cc1f8 tests/test-topic-stack.t --- a/tests/test-topic-stack.t Tue Sep 26 12:29:15 2017 +0200 +++ b/tests/test-topic-stack.t Fri Sep 22 16:41:37 2017 +0200 @@ -59,6 +59,7 @@ t2@ c_b (current) t1: c_a $ hg phase --public 'topic("other")' + active topic 'other' is now empty After changing the phase of all the changesets in "other" to public, the topic should still be active, but is empty. We should be better at informating the user about it and displaying good data in this case. diff -r f63c97c01f92 -r 4746b92cc1f8 tests/test-topic-tutorial.t --- a/tests/test-topic-tutorial.t Tue Sep 26 12:29:15 2017 +0200 +++ b/tests/test-topic-tutorial.t Fri Sep 22 16:41:37 2017 +0200 @@ -584,6 +584,7 @@ adding file changes added 2 changesets with 2 changes to 1 files 2 new obsolescence markers + active topic 'food' is now empty $ hg topics * food diff -r f63c97c01f92 -r 4746b92cc1f8 tests/test-topic.t --- a/tests/test-topic.t Tue Sep 26 12:29:15 2017 +0200 +++ b/tests/test-topic.t Fri Sep 22 16:41:37 2017 +0200 @@ -401,6 +401,7 @@ query tip $ hg phase --public narf + active topic 'narf' is now empty POSSIBLE BUG: narf topic stays alive even though we just made all narf commits public: @@ -461,6 +462,7 @@ adding manifests adding file changes added 3 changesets with 3 changes to 1 files + active topic 'query' is now empty (run 'hg update' to get a working copy) $ hg topics * query @@ -474,6 +476,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) + active topic 'query' is now empty (run 'hg heads' to see heads) $ hg topics fran