Browse Source

git: better algorithm to decide what's the main branch

Fixes #9103

Co-authored-by: Yufan You <ouuansteve@gmail.com>
Marc Cornellà 3 years ago
parent
commit
55a98fc06d
1 changed files with 22 additions and 5 deletions
  1. 22 5
      plugins/git/git.plugin.zsh

+ 22 - 5
plugins/git/git.plugin.zsh

@@ -25,13 +25,30 @@ function work_in_progress() {
   fi
 }
 
-# Check if main exists and use instead of master
+# Get the default 'main' branch
+# Marc(2020-07-11): I hope to be able to remove this someday
 function git_main_branch() {
-  if [[ -n "$(git branch --list master)" ]]; then
-    echo master
-  else
-    echo main
+  # Get default branch from the origin remote
+  local branch
+  branch="${$(command git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null)#refs/remotes/origin/}"
+
+  if [[ -n "$branch" ]]; then
+    echo "$branch"
+    return
   fi
+
+  # Look up list of local branches and return the first one that exists
+  local -a branches
+  branches=(${(@f)"$(command git for-each-ref --format='%(refname:short)' refs/heads 2>/dev/null)"})
+  for branch in master main; do
+    if (( ${branches[(Ie)$branch]} )); then
+      echo "$branch"
+      return
+    fi
+  done
+
+  echo master
+  return 1
 }
 
 #