# [PATCH] Wrap completions in `type git' conditional statement.

5 messages from 2009-11-12 to 2009-12-29. Participants: Sung Pae, Nanako Shiraishi, Shawn O. Pearce, Junio C Hamano.
Thread: https://gitlist.dev/t/21589

## Sung Pae, 2009-11-12 09:56

Subject: [PATCH] Wrap completions in `type git' conditional statement.
Message-ID: <44A6FDEB-71B6-42E1-99E3-D6A595FF1B58@metablu.com>
URL: https://gitlist.dev/e/44A6FDEB-71B6-42E1-99E3-D6A595FF1B58%40metablu.com

```
Hello,

I don't know if this has come up before (I didn't notice in a casual grep of git log), but attached is a little patch to wrap the bash completion script in a `type git' check.

From the patch header:
--
The onus for checking if a command exists before loading its completions
properly falls on individual completion files since they are normally
sourced from a completions directory (e.g. source /etc/bash_completion.d/*),
or perhaps from a single file concatenated from other completion files.

Also, this is standard practice with other bash-completion scripts.
--


Cheers,
Sung Pae


From 5e9d29fa1938554903631a4b560e08211b8efab3 Mon Sep 17 00:00:00 2001
From: Sung Pae <sung@metablu.com>
Date: Thu, 12 Nov 2009 02:55:28 -0600
Subject: [PATCH] completion: Wrap completions in `type git' conditional statement

The onus for checking if a command exists before loading its completions
properly falls on the individual completion files since they are normally
sourced from a completions directory (e.g. source /etc/bash_completion.d/*), or
perhaps from a single file concatenated from other completion files.

Also, this is standard practice with other bash-completion scripts.
---
 contrib/completion/git-completion.bash |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index e3ddecc..f1f9fb8 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -18,16 +18,13 @@
 # To use these routines:
 #
 #    1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
-#    2) Added the following line to your .bashrc:
+#    2) Add the following line to your .bashrc:
 #        source ~/.git-completion.sh
 #
-#    3) You may want to make sure the git executable is available
-#       in your PATH before this script is sourced, as some caching
-#       is performed while the script loads.  If git isn't found
-#       at source time then all lookups will be done on demand,
-#       which may be slightly slower.
+#       Note that git must be available in your PATH or as an alias at the
+#       time of sourcing.
 #
-#    4) Consider changing your PS1 to also show the current branch:
+#    3) Consider changing your PS1 to also show the current branch:
 #        PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
 #
 #       The argument to __git_ps1 will be displayed only if you
@@ -60,6 +57,8 @@
 #       git@vger.kernel.org
 #
 
+{ type git || type git.exe; } &>/dev/null && {
+
 case "$COMP_WORDBREAKS" in
 *:*) : great ;;
 *)   COMP_WORDBREAKS="$COMP_WORDBREAKS:"
@@ -2242,3 +2241,5 @@ if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
 complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
 	|| complete -o default -o nospace -F _git git.exe
 fi
+
+} # type git
-- 
1.6.5


```

## Nanako Shiraishi, 2009-12-29 11:05

Subject: Re: [PATCH] Wrap completions in `type git' conditional statement.
Message-ID: <20091229200530.6117@nanako3.lavabit.com>
URL: https://gitlist.dev/e/20091229200530.6117%40nanako3.lavabit.com
In-Reply-To: <44A6FDEB-71B6-42E1-99E3-D6A595FF1B58@metablu.com>

```
Junio, could you tell us what happened to this thread?

The patch avoids failing completion script when git is not there.
No discussion.

```

## Shawn O. Pearce, 2009-12-29 15:02

Subject: Re: [PATCH] Wrap completions in `type git' conditional statement.
Message-ID: <20091229150217.GB6152@spearce.org>
URL: https://gitlist.dev/e/20091229150217.GB6152%40spearce.org
In-Reply-To: <20091229200530.6117@nanako3.lavabit.com>

```
Nanako Shiraishi <nanako3@lavabit.com> wrote:
> Junio, could you tell us what happened to this thread?
> 
> The patch avoids failing completion script when git is not there.
> No discussion.

Actually, that's probably my fault.  I never sent an ack or nak,
or anything else really, on this thread.

Originally this was because the completion was trying to run git
as it loaded.  In 1.6.6 this is no longer true, the completion list
is generated lazily on demand during the first completion attempt.

With the lazy loading, I didn't see a reason to add this ugly block
around the entire script.

-- 
Shawn.

```

## Junio C Hamano, 2009-12-29 16:58

Subject: Re: [PATCH] Wrap completions in `type git' conditional statement.
Message-ID: <7vpr5xg1j8.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vpr5xg1j8.fsf%40alter.siamese.dyndns.org
In-Reply-To: <20091229150217.GB6152@spearce.org>

```
"Shawn O. Pearce" <spearce@spearce.org> writes:

> Nanako Shiraishi <nanako3@lavabit.com> wrote:
>> Junio, could you tell us what happened to this thread?
>> 
>> The patch avoids failing completion script when git is not there.
>> No discussion.
>
> Actually, that's probably my fault.  I never sent an ack or nak,
> or anything else really, on this thread.
>
> Originally this was because the completion was trying to run git
> as it loaded.  In 1.6.6 this is no longer true, the completion list
> is generated lazily on demand during the first completion attempt.
>
> With the lazy loading, I didn't see a reason to add this ugly block
> around the entire script.

Thanks, both.

```

## Nanako Shiraishi, 2009-12-29 21:54

Subject: Re: [PATCH] Wrap completions in `type git' conditional statement.
Message-ID: <20091230065432.6117@nanako3.lavabit.com>
URL: https://gitlist.dev/e/20091230065432.6117%40nanako3.lavabit.com
In-Reply-To: <20091229150217.GB6152@spearce.org>

```
Quoting Shawn O. Pearce <spearce@spearce.org>:

> Nanako Shiraishi <nanako3@lavabit.com> wrote:
>> Junio, could you tell us what happened to this thread?
>> 
>> The patch avoids failing completion script when git is not there.
>> No discussion.
>
> Actually, that's probably my fault.  I never sent an ack or nak,
> or anything else really, on this thread.
>
> Originally this was because the completion was trying to run git
> as it loaded.  In 1.6.6 this is no longer true, the completion list
> is generated lazily on demand during the first completion attempt.
>
> With the lazy loading, I didn't see a reason to add this ugly block
> around the entire script.
>
> -- 
> Shawn.

Thank you for your explanation.

-- 
Nanako Shiraishi
http://ivory.ap.teacup.com/nanako3/

```
