comparison hgext3rd/topic/__init__.py @ 2984:30f6030dca8f

topics: signal to the end user when a topic has been forgotten Situation is: * we're updating outside an empty topic. * we've cleared topics
author Aurélien Campéas
date Tue, 26 Sep 2017 12:27:43 +0200
parents c0de0010ec30
children f63c97c01f92
comparison
equal deleted inserted replaced
2983:c0de0010ec30 2984:30f6030dca8f
436 lockmod.release(txn, l, wl) 436 lockmod.release(txn, l, wl)
437 repo.invalidate() 437 repo.invalidate()
438 return 438 return
439 439
440 if clear: 440 if clear:
441 ct = repo.currenttopic
442 empty = stack.stackdata(repo, topic=ct)['changesetcount'] == 0
443 if empty:
444 if ct:
445 ui.status(_('clearing empty topic "%s"\n') % ct)
441 return _changecurrenttopic(repo, None) 446 return _changecurrenttopic(repo, None)
442 447
443 if topic: 448 if topic:
444 return _changecurrenttopic(repo, topic) 449 return _changecurrenttopic(repo, topic)
445 450
850 # The mergeupdatewrap function makes the destination's topic as the 855 # The mergeupdatewrap function makes the destination's topic as the
851 # current topic. This is right for merge but wrong for rebase. We check 856 # current topic. This is right for merge but wrong for rebase. We check
852 # if rebase is running and update the currenttopic to topic of new 857 # if rebase is running and update the currenttopic to topic of new
853 # rebased commit. We have explicitly stored in config if rebase is 858 # rebased commit. We have explicitly stored in config if rebase is
854 # running. 859 # running.
860 ot = repo.currenttopic
861 empty = stack.stackdata(repo, topic=ot)['changesetcount'] == 0
855 if repo.ui.hasconfig('experimental', 'topicrebase'): 862 if repo.ui.hasconfig('experimental', 'topicrebase'):
856 isrebase = True 863 isrebase = True
857 if repo.ui.configbool('_internal', 'keep-topic'): 864 if repo.ui.configbool('_internal', 'keep-topic'):
858 ist0 = True 865 ist0 = True
859 if ((not partial and not branchmerge) or isrebase) and not ist0: 866 if ((not partial and not branchmerge) or isrebase) and not ist0:
860 ot = repo.currenttopic
861 t = '' 867 t = ''
862 pctx = repo[node] 868 pctx = repo[node]
863 if pctx.phase() > phases.public: 869 if pctx.phase() > phases.public:
864 t = pctx.topic() 870 t = pctx.topic()
865 with repo.vfs.open('topic', 'w') as f: 871 with repo.vfs.open('topic', 'w') as f:
866 f.write(t) 872 f.write(t)
867 if t and t != ot: 873 if t and t != ot:
868 repo.ui.status(_("switching to topic %s\n") % t) 874 repo.ui.status(_("switching to topic %s\n") % t)
875 if ot and not t and empty:
876 repo.ui.status(_('clearing empty topic "%s"\n') % ot)
869 elif ist0: 877 elif ist0:
870 repo.ui.status(_("preserving the current topic '%s'\n") % 878 repo.ui.status(_("preserving the current topic '%s'\n") % ot)
871 repo.currenttopic)
872 return ret 879 return ret
873 finally: 880 finally:
874 wlock.release() 881 wlock.release()
875 882
876 def checkt0(orig, ui, repo, node=None, rev=None, *args, **kwargs): 883 def checkt0(orig, ui, repo, node=None, rev=None, *args, **kwargs):