git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] bash completion: Support "unpushed commits" warnings in __git_ps1

From
ASAndrew Sayers <andrew-git@pileofstuff.org>
Date
Jun 6, 2010, 00:05 UTC
Message-ID
<4C0AE640.3040503@pileofstuff.org>

People working in small teams sometimes forget to push their changes, causing general confusion. A gentle reminder in the command prompt should help.

Users migrating from centralised version control systems are especially likely to forget, so I've included git-svn support as a special case. Only SVN is supported because it's the only centralised version control system I have any experience with. The code is designed to make adding other version control systems easy for anyone that's interested.

Signed-off-by: Andrew Sayers <andrew-git@pileofstuff.org>
---
 contrib/completion/git-completion.bash |   33 ++++++++++++++++++++++++++++++-
 1 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index d3fec32..4bb0fee 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -48,6 +48,12 @@
 #       set GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're
 #       untracked files, then a '%' will be shown next to the branch name.
 #
+#       If you would like to see if there're unpushed commits, then
+#       you can set GIT_PS1_SHOWUNPUSHED to a nonempty value. If
+#       there're unpushed commits, then a '!' will be shown next to
+#       the branch name.  Setting GIT_PS1_SHOWUNPUSHED=svn will look
+#       for unpushed git-svn commits.
+#
 # To submit patches:
 #
 #    *) Read Documentation/SubmittingPatches
@@ -138,6 +144,7 @@ __git_ps1 ()
 		local s
 		local u
 		local c
+		local p
 
 		if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
 			if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
@@ -167,12 +174,34 @@ __git_ps1 ()
 			      u="%"
 			   fi
 			fi
+
+			if [ -n "${GIT_PS1_SHOWUNPUSHED-}" ]; then
+			   local head
+			   local upstream
+			   if [ "${GIT_PS1_SHOWUNPUSHED-}" = "svn" ]; then # git-svn upstream checking
+			      local remote_branch=$( git config --get svn-remote.svn.url | sed 's/\//\\\//g' )
+			      upstream=$( git log | sed -ne "/^    git-svn-id: / { s/^    git-svn-id: $remote_branch\/\([^@]*\).*/\1/p ; q }" )
+			   else # git upstream checking
+			      upstream="@{upstream}"
+			   fi
+
+			   if git rev-parse --quiet "$upstream" HEAD 2>/dev/null | {
+			      read upstream
+			      read head
+			      [ -n "$head" -a -n "$upstream" -a "$head" != "$upstream" ]
+			   }; then
+			       p='!'
+			   else
+			       p=
+			   fi
+			fi
+
 		fi
 
 		if [ -n "${1-}" ]; then
-			printf "$1" "$c${b##refs/heads/}$w$i$s$u$r"
+			printf "$1" "$c${b##refs/heads/}$w$i$s$u$r$p"
 		else
-			printf " (%s)" "$c${b##refs/heads/}$w$i$s$u$r"
+			printf " (%s)" "$c${b##refs/heads/}$w$i$s$u$r$p"
 		fi
 	fi
 }
Next: Thomas Rast
Message 1 of 20 in “bash completion: Support "unpushed commits" warnings in __git_ps1”
  1. bash completion: Support "unpushed commits" warnings in __git_ps1Andrew Sayers, Jun 6, 2010
  2. Thomas RastJun 6, 2010
  3. Andrew SayersJun 6, 2010
  4. Jakub NarebskiJun 6, 2010
  5. Andrew SayersJun 6, 2010
  6. Thomas RastJun 7, 2010
  7. [RFC/PATCHv2] bash completion: Support "divergence from upstream" warnings in __git_ps1Andrew Sayers, Jun 8, 2010
  8. Peter KjellerstedtJun 9, 2010
  9. John TapsellJun 9, 2010
  10. Steven MichalskeJun 9, 2010
  11. Michael J GruberJun 9, 2010
  12. Michael J GruberJun 9, 2010
  13. Michael J GruberJun 9, 2010
  14. 0/2 bash completion: Support "divergence from upstream" warnings in __git_ps1Thomas Rast, Jun 10, 2010
  15. 1/2 rev-list: introduce --count optionThomas Rast, Jun 10, 2010
  16. 2/2 bash completion: Support "divergence from upstream" warnings in __git_ps1Thomas Rast, Jun 10, 2010
  17. SZEDER GáborJun 12, 2010
  18. Michael J GruberJun 10, 2010
  19. Thomas RastJun 10, 2010
  20. Thomas RastJun 6, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.