Fail git status if .git not in cwd or parent directory

This commit is contained in:
Nathan Broadbent
2012-09-19 21:30:07 +12:00
parent dc2d93453b
commit 197dcfc74f
3 changed files with 16 additions and 2 deletions

8
lib/git/helpers.sh Normal file
View File

@@ -0,0 +1,8 @@
function find_in_cwd_or_parent() {
local slashes=${PWD//[^\/]/}; local directory=$PWD;
for (( n=${#slashes}; n>0; --n )); do
test -e "$directory/$1" && echo "$directory/$1" && return 0
directory="$directory/.."
done
return 1
}

View File

@@ -17,6 +17,11 @@
# 1 || staged, 2 || unmerged, 3 || unstaged, 4 || untracked # 1 || staged, 2 || unmerged, 3 || unstaged, 4 || untracked
# -------------------------------------------------------------------- # --------------------------------------------------------------------
git_status_shortcuts() { git_status_shortcuts() {
# Fail if not a git repo
if ! find_in_cwd_or_parent ".git" > /dev/null; then
echo -e "\e[31mNot a git repository (or any of the parent directories)\e[0m"
return 1
fi
zsh_compat # Ensure shwordsplit is on for zsh zsh_compat # Ensure shwordsplit is on for zsh
git_clear_vars git_clear_vars
# Run ruby script, store output # Run ruby script, store output
@@ -120,7 +125,7 @@ scmb_expand_args() {
if [ "$first" -eq 1 ]; then first=0; else printf '\t'; fi if [ "$first" -eq 1 ]; then first=0; else printf '\t'; fi
eval printf '%s' "\"\$$git_env_char$arg\"" eval printf '%s' "\"\$$git_env_char$arg\""
elif [[ "$arg" =~ ^[0-9]+-[0-9]+$ ]]; then # Expand ranges into $e{*} variables elif [[ "$arg" =~ ^[0-9]+-[0-9]+$ ]]; then # Expand ranges into $e{*} variables
for i in $(eval echo {${arg/-/..}}); do for i in $(eval echo {${arg/-/..}}); do
if [ "$first" -eq 1 ]; then first=0; else printf '\t'; fi if [ "$first" -eq 1 ]; then first=0; else printf '\t'; fi
eval printf '%s' "\"\$$git_env_char$i\"" eval printf '%s' "\"\$$git_env_char$i\""
@@ -148,7 +153,7 @@ git_clear_vars() {
# Shortcuts for resolving merge conflicts. # Shortcuts for resolving merge conflicts.
_git_resolve_merge_conflict() { _git_resolve_merge_conflict() {
if [ -n "$2" ]; then if [ -n "$2" ]; then
# Expand args and process resulting set of files. # Expand args and process resulting set of files.
IFS=$'\t' IFS=$'\t'

View File

@@ -17,6 +17,7 @@ export scmbDir="$(dirname ${BASH_SOURCE:-$0})"
if [[ -s "$HOME/.git.scmbrc" ]]; then if [[ -s "$HOME/.git.scmbrc" ]]; then
# Load git config # Load git config
. "$HOME/.git.scmbrc" . "$HOME/.git.scmbrc"
. "$scmbDir/lib/git/helpers.sh"
. "$scmbDir/lib/git/aliases.sh" . "$scmbDir/lib/git/aliases.sh"
. "$scmbDir/lib/git/keybindings.sh" . "$scmbDir/lib/git/keybindings.sh"
. "$scmbDir/lib/git/status_shortcuts.sh" . "$scmbDir/lib/git/status_shortcuts.sh"