Skip to content

Commit

Permalink
lib/omb-prompt-base: Set a timeout on the git command
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.

* lib/omb-prompt-base: Set a timeout on git commands
* lib/omb-prompt-base: Fix timeout bug
* lib/omb-prompt-base: Rename function "{run_with => _omb_prompt}_timeout"
* lib/omb-prompt-base(_omb_prompt_timeout): Fix coding style
* lib/omb-prompt-base(_omb_prompt_timeout): Check timeout commands on startup

Fixes #172
Co-authored-by: Koichi Murase <[email protected]>
  • Loading branch information
Erwin Jansen authored and akinomyoga committed Oct 14, 2023
1 parent 07d9382 commit 67e0e26
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 @@ -43,6 +43,7 @@ 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,9 +106,27 @@ function _omb_prompt_format {
}

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

## @fn _omb_prompt_timeout
## Runs the given command with the given timeout
## @param $1 Timeout in seconds
## @param $@ Command to be executed.
if _omb_util_command_exists timeout; then
function _omb_prompt_timeout {
timeout "$@"
}
elif _omb_util_command_exists gtimeout; then
function _omb_prompt_timeout {
gtimeout "$@"
}
else
function _omb_prompt_timeout {
"${@:2}"
}
fi

function scm {
if [[ "$SCM_CHECK" = false ]]; then SCM=$SCM_NONE
elif [[ -f .git/HEAD ]]; then SCM=$SCM_GIT
Expand Down

0 comments on commit 67e0e26

Please sign in to comment.