about summary refs log tree commit diff
diff options
context:
space:
mode:
authorManuel Jacob <me@manueljacob.de>2020-06-22 00:22:30 +0200
committerDaniel Shahaf <d.s@daniel.shahaf.name>2020-06-22 08:18:38 +0000
commitae0129b49f9f1b624fb4b067f6f1ef6757a24fd2 (patch)
tree2e4dfc8d12844bf844fdb6150ece4bf0929c0bd8
parent8bd46bf2a241e0e3a32a24ce2333095214b3b77a (diff)
downloadzsh-ae0129b49f9f1b624fb4b067f6f1ef6757a24fd2.tar.gz
zsh-ae0129b49f9f1b624fb4b067f6f1ef6757a24fd2.tar.xz
zsh-ae0129b49f9f1b624fb4b067f6f1ef6757a24fd2.zip
46091: Add code to Mercurial VCS backend to show topic if there is any.
"Topics" is an experimental concept in Mercurial that augments the
current branching concept (called "named branches").

For more information, see the not always up-to-date Mercurial Wiki page
https://www.mercurial-scm.org/wiki/TopicPlan.
-rw-r--r--ChangeLog6
-rw-r--r--Doc/Zsh/contrib.yo3
-rw-r--r--Functions/VCS_Info/Backends/VCS_INFO_get_data_hg11
3 files changed, 18 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 79fa9c085..bf139ed0c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2020-06-22  Manuel Jacob  <me@manueljacob.de>
+
+	* 46091: Doc/Zsh/contrib.yo,
+	Functions/VCS_Info/Backends/VCS_INFO_get_data_hg: Add code to
+	Mercurial VCS backend to show topic if there is any.
+
 2020-06-19  Daniel Shahaf  <d.s@daniel.shahaf.name>
 
 	* 46044 (tweaked per Matthew): Completion/Unix/Command/_units:
diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo
index 0909cd4f5..b9f48e8af 100644
--- a/Doc/Zsh/contrib.yo
+++ b/Doc/Zsh/contrib.yo
@@ -1328,7 +1328,8 @@ enditem()
 In tt(branchformat) these replacements are done:
 
 startsitem()
-sitem(tt(%b))(The branch name.)
+sitem(tt(%b))(The branch name. For tt(hg), the branch name can include a
+topic name.)
 sitem(tt(%r))(The current revision number or the tt(hgrevformat) style for
 tt(hg).)
 endsitem()
diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_hg b/Functions/VCS_Info/Backends/VCS_INFO_get_data_hg
index cd5ef321d..9f61aeaf4 100644
--- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_hg
+++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_hg
@@ -5,7 +5,7 @@
 
 setopt localoptions extendedglob NO_shwordsplit
 
-local hgbase bmfile branchfile rebasefile dirstatefile mqseriesfile \
+local hgbase bmfile branchfile topicfile rebasefile dirstatefile mqseriesfile \
     curbmfile curbm \
     mqstatusfile mqguardsfile patchdir mergedir \
     r_csetid r_lrev r_branch i_bmhash i_bmname \
@@ -27,6 +27,7 @@ mergedir="${hgbase}/.hg/merge/"
 bmfile="${hgbase}/.hg/bookmarks"
 curbmfile="${hgbase}/.hg/bookmarks.current"
 branchfile="${hgbase}/.hg/branch"
+topicfile="${hgbase}/.hg/topic"
 rebasefile="${hgbase}/.hg/rebasestate"
 dirstatefile="${hgbase}/.hg/dirstate"
 mqstatusfile="${patchdir}/status" # currently applied patches
@@ -69,6 +70,14 @@ fi
 # If we still don't know the branch it's safe to assume default
 [[ -n ${r_branch} ]] || r_branch="default"
 
+# Show topic if there is any (the UI for this experimental concept is not yet
+# final, but for a long time the convention has been to join the branch name
+# and the topic name by a colon)
+if [[ -f ${topicfile} && -r ${topicfile} && -s ${topicfile} ]] ; then
+    IFS= read -r REPLY < ${topicfile}
+    r_branch=${r_branch}:${REPLY}
+fi
+
 # The working dir has uncommitted-changes if the revision ends with a +
 if [[ $r_lrev[-1] == + ]] ; then
     hgchanges=1