revert some changes per upstream; use dirname/basename

- use realpath comparison in __bobthefish_ignore
- git display is opt-out in __bobthefish_git_project_dir
- avoid slowness of `hg identify` in __bobthefish_hg_project_dir
- use dirname rather than __bobthefish_dirname since not same
This commit is contained in:
Luca Filipozzi 2019-11-03 10:30:25 -08:00
parent e0fe91ce0f
commit d4033cf60a

View File

@ -52,14 +52,6 @@
# Helper methods # Helper methods
# ============================== # ==============================
function __bobthefish_basename -d 'basically basename, but faster'
string replace -r '^.*/' '' -- $argv
end
function __bobthefish_dirname -d 'basically dirname, but faster'
string replace -r '/[^/]+/?$' '' -- $argv
end
function __bobthefish_git_branch -S -d 'Get the current git branch (or commitish)' function __bobthefish_git_branch -S -d 'Get the current git branch (or commitish)'
set -l ref (command git symbolic-ref HEAD 2>/dev/null) set -l ref (command git symbolic-ref HEAD 2>/dev/null)
and begin and begin
@ -96,7 +88,7 @@ function __bobthefish_pretty_parent -S -a child_dir -d 'Print a parent directory
# Replace $HOME with ~ # Replace $HOME with ~
set -l real_home ~ set -l real_home ~
set -l parent_dir (string replace -r '^'"$real_home"'($|/)' '~$1' (__bobthefish_dirname $child_dir)) set -l parent_dir (string replace -r '^'"$real_home"'($|/)' '~$1' (dirname "$child_dir"))
# Must check whether `$parent_dir = /` if using native dirname # Must check whether `$parent_dir = /` if using native dirname
if [ -z "$parent_dir" ] if [ -z "$parent_dir" ]
@ -113,9 +105,11 @@ function __bobthefish_pretty_parent -S -a child_dir -d 'Print a parent directory
end end
function __bobthefish_ignore_vcs_dir -d 'Check whether the current directory should be ignored as a VCS segment' function __bobthefish_ignore_vcs_dir -d 'Check whether the current directory should be ignored as a VCS segment'
set -l real_pwd = (realpath $PWD)
for ignore_path in $theme_vcs_ignore_paths for ignore_path in $theme_vcs_ignore_paths
switch $PWD/ set -l real_ignore_path = (realpath $ignore_path)
case $ignore_path/\* switch $real_pwd/
case $real_ignore_path/\*
echo 1 echo 1
return return
end end
@ -123,8 +117,8 @@ function __bobthefish_ignore_vcs_dir -d 'Check whether the current directory sho
end end
function __bobthefish_git_project_dir -S -d 'Print the current git project base directory' function __bobthefish_git_project_dir -S -d 'Print the current git project base directory'
[ "$theme_display_git" = 'yes' ] [ "$theme_display_git" = 'no' ]
or return and return
set -q theme_vcs_ignore_paths set -q theme_vcs_ignore_paths
and [ (__bobthefish_ignore_vcs_dir) ] and [ (__bobthefish_ignore_vcs_dir) ]
@ -151,10 +145,14 @@ function __bobthefish_hg_project_dir -S -d 'Print the current hg project base di
and [ (__bobthefish_ignore_vcs_dir) ] and [ (__bobthefish_ignore_vcs_dir) ]
and return and return
[ (command hg identify 2>/dev/null) ] set -l d $PWD
or return # we are not in an hg repo while not [ -z "$d" ]
[ -e "$d/.hg" ]; and break
[ "$d" = '/' ]; and return
set d (dirname $d)
end
set -l projdir (command hg root --cwd $PWD 2>/dev/null) set -l projdir (command hg root --cwd $PWD)
set -l workdir (string replace $projdir/ '' (pwd -P)) set -l workdir (string replace $projdir/ '' (pwd -P))
set projdir (string replace -r "/$workdir\$" '' $PWD) set projdir (string replace -r "/$workdir\$" '' $PWD)
[ -z "$projdir" ]; and set projdir '/' # handle edge case where projdir is / [ -z "$projdir" ]; and set projdir '/' # handle edge case where projdir is /
@ -298,7 +296,7 @@ function __bobthefish_path_segment -S -a segment_dir -d 'Display a shortened for
set directory '~' set directory '~'
case '*' case '*'
set parent (__bobthefish_pretty_parent "$segment_dir") set parent (__bobthefish_pretty_parent "$segment_dir")
set directory (__bobthefish_basename "$segment_dir") set directory (basename "$segment_dir")
end end
echo -n $parent echo -n $parent