Subject: Re: [PATCH 12/19] bash prompt: use bash builtins to check whether inside git dir

From: Johannes Sixt <[email-masked]>
Date: Wed, 09 May 2012 10:07:21 +0200

Am 5/9/2012 2:44, schrieb SZEDER Gábor:
> __git_ps1() runs the '$(git rev-parse --is-inside-git-dir)' command
> substitution to check whether we are inside a .git directory and the
> bash prompt needs to be adjusted accordingly (i.e. display 'BARE!' or
> 'GIT_DIR!').  This imposes the overhead of fork()ing a subshell and
> fork()+exec()ing a git process.
> 
> Perform this check by comparing the path to the repository and the
> current directory using only bash builtins, thereby sparing all that
> fork()+exec() overhead.

> -	if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
> +	local pwd_p
> +	__git_pwd_p pwd_p
> +	# inside .git dir?
> +	if [ "$__git_dir" = "." -o \
> +			"${pwd_p#$__git_dir}" != "$pwd_p" ]; then

At this point, $__git_dir is c:/dir style, whereas $pwd_p is /c/dir style,
and the intended prefix check does not trigger.

As long as $__git_dir is only used to access files, it does not matter
whether it is Windows style or POSIX style. But if $__git_dir is used in a
comparison, then you must make 100% sure that the involved paths are of
the same vintage.

What would be lost if this patch were dropped?

-- Hannes