about summary refs log tree commit diff
path: root/Functions
diff options
context:
space:
mode:
authorbrian m. carlson <sandals@crustytoothpaste.net>2020-02-16 20:54:12 +0000
committerDaniel Shahaf <danielsh@apache.org>2020-02-17 10:03:08 +0000
commit51260963703bbc91944434648ae71a05addbcb05 (patch)
tree7005f997f133449bdeb5465ff93ca55aef664531 /Functions
parentbacad965238158b9ae6ff438ba923725ec128020 (diff)
downloadzsh-51260963703bbc91944434648ae71a05addbcb05.tar.gz
zsh-51260963703bbc91944434648ae71a05addbcb05.tar.xz
zsh-51260963703bbc91944434648ae71a05addbcb05.zip
github #48/0002: vcs_info git: properly detect bare repositories
We currently detect Git repositories by finding the top level of the
working tree, and if we fail to detect it, assume that we're not in a
repository.  However, there's a case we don't consider: a bare
repository.

Let's detect if the user is in a bare repository by checking if gitdir
is set, and if so, using that if there is no working tree.  We now
detect bare Git repositories with vcs_info, as expected.
Diffstat (limited to 'Functions')
-rw-r--r--Functions/VCS_Info/Backends/VCS_INFO_get_data_git4
1 files changed, 4 insertions, 0 deletions
diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
index 0128c0981..5ddce72a6 100644
--- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
+++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
@@ -139,6 +139,10 @@ VCS_INFO_git_handle_patches () {
 gitdir=${vcs_comm[gitdir]}
 VCS_INFO_git_getbranch ${gitdir}
 gitbase=$( ${vcs_comm[cmd]} rev-parse --show-toplevel 2> /dev/null )
+if [[ -z ${gitbase} ]]; then
+    # Bare repository
+    gitbase=${gitdir:P}
+fi
 rrn=${gitbase:t}
 if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" get-revision ; then
     gitsha1=$(${vcs_comm[cmd]} rev-parse --quiet --verify HEAD)