Git development
 help / color / mirror / Atom feed
From: "SZEDER Gábor" <szeder@ira.uka.de>
To: Heikki Hokkanen <hoxu@users.sf.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] bash prompt: add option to disable for a repository
Date: Sat, 23 Nov 2013 17:35:59 +0100	[thread overview]
Message-ID: <20131123163559.GB13824@goldbirke> (raw)
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:
> 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.

> 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.

> 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.

> +	fi
> +
>  	local short_sha
>  	if [ "$rev_parse_exit_code" = "0" ]; then
>  		short_sha="${repo_info##*$'\n'}"
> -- 
> 1.8.4
> 

  parent reply	other threads:[~2013-11-23 16:36 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-23 13:18 [PATCH] bash prompt: add option to disable for a repository Heikki Hokkanen
2013-11-23 14:42 ` Johannes Sixt
2013-11-23 16:31   ` Heikki Hokkanen
2013-11-25 23:43     ` Jonathan Nieder
2013-11-26  0:26       ` SZEDER Gábor
2013-11-26  7:01       ` Johannes Sixt
2013-11-26  8:40     ` Thomas Rast
2013-11-23 16:35 ` SZEDER Gábor [this message]
2013-11-25 16:38   ` Heikki Hokkanen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131123163559.GB13824@goldbirke \
    --to=szeder@ira.uka.de \
    --cc=git@vger.kernel.org \
    --cc=hoxu@users.sf.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox