git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] bash prompt: add option to disable for a repository

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Nov 23, 2013, 16:35 UTC
Message-ID
<20131123163559.GB13824@goldbirke>
In-Reply-To
<1385212703-9611-1-git-send-email-hoxu@users.sf.net>
Hi,
On Sat, Nov 23, 2013 at 03:18:23PM +0200, Heikki Hokkanen wrote:
Show 6 quoted lines
> If bash.prompt is set to false, disable the prompt. This is useful
> for huge repositories like the home directory.
> 
> Signed-off-by: Heikki Hokkanen <hoxu@users.sf.net>
> ---
> git-prompt.sh performance seems to be quite bad for big repositories,

Hm, strange. I wonder what can cause performance problems in big repositories.

Sure, there are status indicators that can be expensive, in particular the indicators for dirty index/worktree, untracked files, and divergence from upstream. However, these must be enabled globally by environment variables and even then can already be disabled on a per-repo basis by configuration variables. And the rest of the prompt code should perform pretty much independently from the repository size.

Show 8 quoted lines
> so
> without a way to disable it selectively for repositories, it becomes unusable
> for people who have their homedir under git. This patch generalizes the problem
> a bit by allowing the prompt to be disabled by setting bash.prompt to false in
> any repository.
> 
>  contrib/completion/git-prompt.sh | 8 ++++++++
>  1 file changed, 8 insertions(+)
No tests.
Show 19 quoted lines
> diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
> index 7b732d2..c982fde 100644
> --- a/contrib/completion/git-prompt.sh
> +++ b/contrib/completion/git-prompt.sh
> @@ -84,6 +84,8 @@
>  # GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
>  # the colored output of "git status -sb" and are available only when
>  # using __git_ps1 for PROMPT_COMMAND or precmd.
> +#
> +# To disable prompt for a repository, run "git config bash.prompt false"
>  
>  # check whether printf supports -v
>  __git_printf_supports_v=
> @@ -304,6 +306,12 @@ __git_ps1 ()
>  		return
>  	fi
>  
> +	local prompt_setting
> +	prompt_setting=$(git config --bool bash.prompt)

I spent quite some time eliminating fork()s and exec()s from the prompt, so a fork() for the command substitution's subshell and a fork()+exec() for running a git command in the main code path saddens me deeply ;)

> +	if [ -n "$prompt_setting" ] && [ "$prompt_setting" == "false" ]; then

If $prompt_setting must be false, then checking its non-emptyness is superfluous.

> +		return

You can't just return from __git_ps1(), you must update PS1 in prompt command mode. See the few lines just above this hunk.

Show 8 quoted lines
> +	fi
> +
>  	local short_sha
>  	if [ "$rev_parse_exit_code" = "0" ]; then
>  		short_sha="${repo_info##*$'\n'}"
> -- 
> 1.8.4
> 
Previous: Thomas RastNext: Heikki Hokkanen
Message 8 of 9 in “bash prompt: add option to disable for a repository”
  1. bash prompt: add option to disable for a repositoryHeikki Hokkanen, Nov 23, 2013
  2. Johannes SixtNov 23, 2013
  3. Heikki HokkanenNov 23, 2013
  4. Jonathan NiederNov 25, 2013
  5. SZEDER GáborNov 26, 2013
  6. Johannes SixtNov 26, 2013
  7. Thomas RastNov 26, 2013
  8. SZEDER GáborNov 23, 2013
  9. Heikki HokkanenNov 25, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.