Skip to content

Commit

Permalink
lib/omb-prompt-base: Set a timeout on git commands
Browse files Browse the repository at this point in the history
The calculate of git_summary_status can be extremely expensive for large
repos. This results in the shell becoming unresponsive.

We now set a timeout of 0.2 seconds to make sure we always have
a responsive shell.

Fixes ohmybash#172
  • Loading branch information
Erwin Jansen authored and akinomyoga committed Oct 14, 2023
1 parent 07d9382 commit 70602c7
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 additions & 1 deletion lib/omb-prompt-base.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,15 @@ SCM_GIT_SHOW_CURRENT_USER=${SCM_GIT_SHOW_CURRENT_USER:=false}
SCM_GIT_SHOW_MINIMAL_INFO=${SCM_GIT_SHOW_MINIMAL_INFO:=false}

SCM_GIT='git'

SCM_GIT_CHAR='±'
SCM_GIT_DETACHED_CHAR=''
SCM_GIT_AHEAD_CHAR=""
SCM_GIT_BEHIND_CHAR=""
SCM_GIT_UNTRACKED_CHAR="?:"
SCM_GIT_UNSTAGED_CHAR="U:"
SCM_GIT_STAGED_CHAR="S:"
SCM_GIT_TIMEOUT="0.2"

SCM_HG='hg'
SCM_HG_CHAR=''
Expand Down Expand Up @@ -105,7 +107,24 @@ function _omb_prompt_format {
}

function _omb_prompt_git {
command git "$@"
run_with_timeout $SCM_GIT_TIMEOUT command git "$@"
}

function run_with_timeout() {
# Runs the given command with the given timeout
# $1 Timeout in seconds
# $@ Command to be executed.
local TIME=$1
shift
local CMD=$@
local TIMEOUT=
if which timeout &> /dev/null; then
TIMEOUT=timeout
elif which gtimeout &> /dev/null; then
TIMEOUT=gtimeout
fi

$TIMEOUT ${TIME} ${CMD}
}

function scm {
Expand Down

0 comments on commit 70602c7

Please sign in to comment.