@@ -61,6 +61,12 @@ k () {
61
61
fi
62
62
}
63
63
64
+ # Set if we're in a repo or not
65
+ typeset -i INSIDE_WORK_TREE=0
66
+ if [[ $( command git rev-parse --is-inside-work-tree 2> /dev/null) == true ]]; then
67
+ INSIDE_WORK_TREE=1
68
+ fi
69
+
64
70
# Setup array of directories to print
65
71
typeset -a base_dirs
66
72
@@ -380,23 +386,33 @@ k () {
380
386
# --------------------------------------------------------------------------
381
387
if [[ " $o_no_vcs " != " " ]]; then
382
388
REPOMARKER=" "
383
- else
384
- # Check for git repo
385
- if (( IS_GIT_REPO != 0 )) ; then
389
+ elif (( IS_GIT_REPO != 0 )) ; then
390
+ # If we're not in a repo, still check each directory if it's a repo, and
391
+ # then mark appropriately
392
+ if (( INSIDE_WORK_TREE == 0 )) ; then
386
393
if (( IS_DIRECTORY )) ; then
387
394
if command git --git-dir=" $GIT_TOPLEVEL /.git" --work-tree=" ${NAME} " diff --quiet --ignore-submodules HEAD & > /dev/null # if dirty
388
- then REPOMARKER=$' \e [38;5;46m|\e [0m' # Show a green vertical bar for dirty
389
- else REPOMARKER=$' \e [0;31m| \e [0m' # Show a red vertical bar if clean
395
+ then REPOMARKER=$' \e [38;5;46m|\e [0m' # Show a green vertical bar for clean
396
+ else REPOMARKER=$' \e [0;31m+ \e [0m' # Show a red vertical bar if dirty
390
397
fi
391
- else
392
- STATUS=$( git --git-dir=$GIT_TOPLEVEL /.git --work-tree=$GIT_TOPLEVEL status --porcelain --ignored --untracked-files=normal ${${${NAME: a} ## $GIT_TOPLEVEL } #*/ } )
393
- STATUS=${STATUS[1,2]}
394
- if [[ $STATUS == ' M' ]]; then REPOMARKER=$' \e [0;31m|\e [0m' ; # Modified
395
- elif [[ $STATUS == ' ??' ]]; then REPOMARKER=$' \e [38;5;214m|\e [0m' ; # Untracked
396
- elif [[ $STATUS == ' !!' ]]; then REPOMARKER=$' \e [38;5;238m|\e [0m' ; # Ignored
397
- elif [[ $STATUS == ' A ' ]]; then REPOMARKER=$' \e [38;5;093m|\e [0m' ; # Added
398
- else REPOMARKER=$' \e [38;5;082m|\e [0m' ; # Good
398
+ fi
399
+ else
400
+ if (( IS_DIRECTORY )) ; then
401
+ # If the directory is ignored, skip it
402
+ if command git check-ignore --quiet ${NAME} 2> /dev/null
403
+ then STATUS=' !!'
404
+ else STATUS=$( git --git-dir=$GIT_TOPLEVEL /.git --work-tree=$GIT_TOPLEVEL status --porcelain --untracked-files=normal ${${${NAME: a} ## $GIT_TOPLEVEL } #*/ } )
399
405
fi
406
+ else
407
+ STATUS=$( git status --porcelain --ignored --untracked-files=normal $NAME )
408
+ fi
409
+ STATUS=${STATUS[1,2]}
410
+ if [[ $STATUS == ' M' ]]; then REPOMARKER=$' \e [0;31m+\e [0m' ; # Tracked & Dirty
411
+ elif [[ $STATUS == ' M ' ]]; then REPOMARKER=$' \e [38;5;082m+\e [0m' ; # Tracked & Dirty & Added
412
+ elif [[ $STATUS == ' ??' ]]; then REPOMARKER=$' \e [38;5;214m+\e [0m' ; # Untracked
413
+ elif [[ $STATUS == ' !!' ]]; then REPOMARKER=$' \e [38;5;238m|\e [0m' ; # Ignored
414
+ elif [[ $STATUS == ' A ' ]]; then REPOMARKER=$' \e [38;5;082m+\e [0m' ; # Added
415
+ else REPOMARKER=$' \e [38;5;082m|\e [0m' ; # Good
400
416
fi
401
417
fi
402
418
fi
0 commit comments