[StGIT PATCH] Bash snippet to show branch and patch in bash prompt

Subsystems: the rest

STALE3662d

8 messages, 3 authors, 2016-08-11 · open the first message on its own page

[StGIT PATCH] Bash snippet to show branch and patch in bash prompt

From: Robin Rosenberg <hidden>
Date: 2016-08-11 20:16:10

From: Robin Rosenberg <redacted>

Signed-off-by: Robin Rosenberg <redacted>
---

 contrib/stgbashprompt.sh |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/contrib/stgbashprompt.sh b/contrib/stgbashprompt.sh
new file mode 100755
index 0000000..792da53
--- /dev/null
+++ b/contrib/stgbashprompt.sh
@@ -0,0 +1,16 @@
+# include this in your bashrc or copy to /etc/bash_completions.d
+
+if [ "$PS1" ]; then
+    # trap 'PS1="\u@\h [$(stg top)] \w]\$ "' DEBUG
+    function stgtag
+    {
+	br=$(stg branch 2>/dev/null)
+	top=$(stg top 2>/dev/null)
+	if [[ -n "$br$top" ]];then
+	    echo "[$top@$br]"
+	    return
+	fi
+    }
+    PS1='\u@\h$(stgtag)\w\$ '
+

Re: [PATCH] Bash snippet to show branch and patch in bash prompt

From: Robin Rosenberg <hidden>
Date: 2016-08-11 19:32:46

måndag 30 oktober 2006 11:42 skrev Robin Rosenberg:
From: Robin Rosenberg <redacted>

Signed-off-by: Robin Rosenberg <redacted>
This was a "reply" using stgit, but the reference missed the ange brackets. 

Anyway thanks for the feedback on the prompt.

-- robin

[PATCH] Bash snippet to show branch and patch in bash prompt

From: Robin Rosenberg <hidden>
Date: 2016-08-11 19:37:09

From: Robin Rosenberg <redacted>

Signed-off-by: Robin Rosenberg <redacted>
---

 contrib/stgbashprompt.sh |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/contrib/stgbashprompt.sh b/contrib/stgbashprompt.sh
new file mode 100755
index 0000000..792da53
--- /dev/null
+++ b/contrib/stgbashprompt.sh
@@ -0,0 +1,16 @@
+# include this in your bashrc or copy to /etc/bash_completions.d
+
+if [ "$PS1" ]; then
+    # trap 'PS1="\u@\h [$(stg top)] \w]\$ "' DEBUG
+    function stgtag
+    {
+	br=$(stg branch 2>/dev/null)
+	top=$(stg top 2>/dev/null)
+	if [[ -n "$br$top" ]];then
+	    echo "[$top@$br]"
+	    return
+	fi
+    }
+    PS1='\u@\h$(stgtag)\w\$ '
+

Re: [PATCH] Bash snippet to show branch and patch in bash prompt

From: Robin Rosenberg <hidden>
Date: 2016-08-11 19:58:03

Oops, didn't refresh before sending.. 

Re: [StGIT PATCH] Bash snippet to show branch and patch in bash prompt

From: Eran Tromer <hidden>
Date: 2016-08-11 20:10:10

On 2006-10-30 01:37, Robin Rosenberg wrote:
+# include this in your bashrc or copy to /etc/bash_completions.d
+
+if [ "$PS1" ]; then
+    # trap 'PS1="\u@\h [$(stg top)] \w]\$ "' DEBUG
+    function stgtag
+    {
+	br=$(stg branch 2>/dev/null)
+	top=$(stg top 2>/dev/null)
+	if [[ -n "$br$top" ]];then
+	    echo "[$top@$br]"
+	    return
+	fi
+    }
+    PS1='\u@\h$(stgtag)\w\$ '
+
+fi
That's an annoying 430ms delay at every prompt, on my box. Does StGIT do
something expensive on every invocation?

Ben Clifford'd solution is pretty much instantaneous, and the following
extends it to StGIT (in a less clean but much faster way):

----------------------------------------------
__prompt_githead() {
    __PS_GIT="$(git-symbolic-ref HEAD 2>/dev/null)" || exit
    __PS_GIT="$(basename $__PS_GIT)"
    echo -n " $__PS_GIT"
    __PS_GIT=$(cat "${GIT_DIR:-.git}/patches/$__PS_GIT/current" \
               2>/dev/null) || exit
    echo -n ":$__PS_GIT"
}
PS1='[\u@\h \W$(__prompt_githead)]\$ '
----------------------------------------------

[PATCH] Bash snippet to show branch and patch in bash prompt

From: Robin Rosenberg <hidden>
Date: 2016-08-11 20:31:16

From: Robin Rosenberg <redacted>

Signed-off-by: Robin Rosenberg <redacted>
---

 contrib/stgbashprompt.sh |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/contrib/stgbashprompt.sh b/contrib/stgbashprompt.sh
new file mode 100755
index 0000000..a79561e
--- /dev/null
+++ b/contrib/stgbashprompt.sh
@@ -0,0 +1,18 @@
+# include this in your bashrc or copy to /etc/bash_completions.d
+
+if [ "$PS1" ]; then
+    # trap 'PS1="\u@\h [$(stg top)] \w]\$ "' DEBUG
+    function stgtag
+    {
+	git_dir=$(git-rev-parse --git-dir 2> /dev/null)
+	ref=$(git-symbolic-ref HEAD 2> /dev/null)
+	br=${ref/refs\/heads\//}
+	top=$(cat $git_dir/patches/$br/current 2>/dev/null)
+	if [[ -n "$br$top" ]];then
+	    echo "[$top@$br]"
+	    return
+	fi
+    }
+    PS1='\u@\h$(stgtag)\w\$ '
+

Re: [PATCH] Bash snippet to show branch and patch in bash prompt

From: Eran Tromer <hidden>
Date: 2016-08-11 20:42:51

On 2006-10-30 12:59, Robin Rosenberg wrote:
From: Robin Rosenberg <redacted>
+    function stgtag
+    {
+	git_dir=$(git-rev-parse --git-dir 2> /dev/null)
+	ref=$(git-symbolic-ref HEAD 2> /dev/null)
Abort early if we're not in a git repo:
	git_dir=$(git-rev-parse --git-dir 2> /dev/null) || return
	ref=$(git-symbolic-ref HEAD 2> /dev/null) || return

+	br=${ref/refs\/heads\//}
You want to strip a prefix only, so this is safer:
	br=${ref#refs/heads/}

+	top=$(cat $git_dir/patches/$br/current 2>/dev/null)
All variables should be declared local to avoid polluting the bash
variable namespace. Likewise, the function name deserves a couple of
underscores.

+	if [[ -n "$br$top" ]];then
+	    echo "[$top@$br]"
It seems better to put the StGIT top after the tag, so that stg push/pop
shifts less of the prompt, making it easier to see the change visually.


Corresponding modified version:

-------------------------------------------
if [ "$PS1" ]; then
    function __prompt_git()
    {
        local git_dir ref br top;
	git_dir=$(git-rev-parse --git-dir 2> /dev/null) || return
	ref=$(git-symbolic-ref HEAD 2> /dev/null) || return
	br=${ref#refs/heads/}
	top=$(cat $git_dir/patches/$br/current 2>/dev/null) \
		&& top="#$top"
	echo "[$br$top]"
    }
    PS1='\u@\h$(__prompt_git)\w\$ '
fi
-------------------------------------------

Conditionally prepending the "#" to $top can be done more concisely via
${top:+#$top} but I used the more readable version.

Re: [StGIT PATCH] Bash snippet to show branch and patch in bash prompt

From: Robin Rosenberg <hidden>
Date: 2016-08-11 20:43:56

måndag 30 oktober 2006 10:57 skrev Eran Tromer:
That's an annoying 430ms delay at every prompt, on my box. Does StGIT do
something expensive on every invocation?
I don't type fast enough to notice really and my machine seems faster, ~300 ms 
per prompt.
Ben Clifford'd solution is pretty much instantaneous, and the following
extends it to StGIT (in a less clean but much faster way):

----------------------------------------------
__prompt_githead() {
    __PS_GIT="$(git-symbolic-ref HEAD 2>/dev/null)" || exit
    __PS_GIT="$(basename $__PS_GIT)"
    echo -n " $__PS_GIT"
    __PS_GIT=$(cat "${GIT_DIR:-.git}/patches/$__PS_GIT/current" \
               2>/dev/null) || exit
    echo -n ":$__PS_GIT"
}
PS1='[\u@\h \W$(__prompt_githead)]\$ '
----------------------------------------------
This doesn't work if the branch have a / in the name or if you are in a 
subdirectory, not the top level. Probably not hard to fix though.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help