# Re: Slight enhancement of GIT wrapper

5 messages from 2005-04-13 to 2005-05-27. Participants: Petr Baudis, Johannes Schindelin, Pavel Pisa.
Thread: https://gitlist.dev/t/5

## Petr Baudis, 2005-04-13 22:55

Subject: Re: Slight enhancement of GIT wrapper
Message-ID: <20050413225509.GL25711@pasky.ji.cz>
URL: https://gitlist.dev/e/20050413225509.GL25711%40pasky.ji.cz
In-Reply-To: <200504132249.16848.pisa@cmp.felk.cvut.cz>

```
Dear diary, on Wed, Apr 13, 2005 at 10:49:16PM CEST, I got a letter
where Pavel Pisa <pisa@cmp.felk.cvut.cz> told me that...
> Ahoj Petre,

Hi,

cc'ing git@vger.kernel.org so that we hopefully get less of duplicated
work (and maybe even some more insights).

> Index: commit-id
> ===================================================================
> Index: git
> ===================================================================
> --- 6c355da7a316f50742eeffa49405a15e75526012/git  (mode:100755 sha1:f766a87adff6e17d24cd97417d7303f2cdab6f3c)
> +++ 85f2d458ffebf52569e777af222accc1268afdf9/git  (mode:100755 sha1:c179a65c3955e39bda18dc8a314b061bc0fb5de7)
> @@ -9,6 +9,7 @@
>  # This command mostly only multiplexes to the individual script based
>  # on the first argument.
>  
> +
>  error () {
>  	echo git: $@ >&2
>  }
> @@ -17,6 +18,25 @@
>  	exit 1
>  }
>  
> +cwd="`pwd 2> /dev/null`"

Please use $() instead of ``.

Why do you silence stderr?

> +
> +if [ -h "$0" ]; then
> +  GIT_DIR=`ls -l "$0" | sed 's/^.*-> *\(.*\) *$/\1/'`

Well, I don't like this much, but I'm not sure how to do better.

> +  GIT_DIR=`dirname "$GIT_DIR"`
> +else
> +  GIT_DIR=`dirname "$0"`
> +fi

We use tabs for indentation.

> +cd "$GIT_DIR"
> +GIT_DIR="`pwd 2> /dev/null`"

Why do you silence stderr?

> +cd "$cwd" 2> /dev/null
> +if [ $? -gt 0 ] ; then
> +  die "Cannot return back to the CWD $cwd"
> +fi

I'd personally just cd "$cwd" || exit 1

> +
> +export PATH=$GIT_DIR:$PATH

You should add $GIT_DIR to $PATH only when it is not there already. This
way you can still override some of the git tools by stuffing your
overrides to $PATH.

> +
> +#echo GIT_DIR=$GIT_DIR
> +#echo PATH=$PATH

?

>  
>  help () {
>  	cat <<__END__

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor

```

## Johannes Schindelin, 2005-04-13 23:07

Subject: Re: Slight enhancement of GIT wrapper
Message-ID: <Pine.LNX.4.58.0504140106470.15139@wgmdd8.biozentrum.uni-wuerzburg.de>
URL: https://gitlist.dev/e/Pine.LNX.4.58.0504140106470.15139%40wgmdd8.biozentrum.uni-wuerzburg.de
In-Reply-To: <20050413225509.GL25711@pasky.ji.cz>

```
Hi,

On Thu, 14 Apr 2005, Petr Baudis wrote:

> Dear diary, on Wed, Apr 13, 2005 at 10:49:16PM CEST, I got a letter
> where Pavel Pisa <pisa@cmp.felk.cvut.cz> told me that...
>
> > +
> > +if [ -h "$0" ]; then
> > +  GIT_DIR=`ls -l "$0" | sed 's/^.*-> *\(.*\) *$/\1/'`
>
> Well, I don't like this much, but I'm not sure how to do better.

How about

	GIT_DIR=$(ls -L "$0")

Ciao,
Dscho

```

## Johannes Schindelin, 2005-04-13 23:10

Subject: Re: Slight enhancement of GIT wrapper
Message-ID: <Pine.LNX.4.58.0504140110340.15139@wgmdd8.biozentrum.uni-wuerzburg.de>
URL: https://gitlist.dev/e/Pine.LNX.4.58.0504140110340.15139%40wgmdd8.biozentrum.uni-wuerzburg.de
In-Reply-To: <20050413225509.GL25711@pasky.ji.cz>

```
Hi,

please ignore the mail I just sent.

Ciao,
Dscho


```

## Pavel Pisa, 2005-05-27 16:24

Subject: GIT and COGITO individual scripts hidding from PATH
Message-ID: <200505271824.05105.pisa@cmp.felk.cvut.cz>
URL: https://gitlist.dev/e/200505271824.05105.pisa%40cmp.felk.cvut.cz
In-Reply-To: <20050524111333.GA11223@pasky.ji.cz>

```
Hello All,

I prefer to have as small number of executables in /usr/bin
and /user/local/bin as possible. I have tried to push original
Peter's git script to this direction for my strange personal taste.
COGITO has taken different direction than. I have hidden cogito and git
under wrapper to make me happy again. I thing that it is against good
opensource habits to keep changes secret even if I do not expect
interrest in this version. But may it be, that it can make
happy somebody with same taste as I have.

The "cgt" is wrapper for all cogito programs. If cogito is
build and installed to any prefix directory (/opt/git-cogito in my case)
and script is copied to bin subdirectory (/opt/git-cogito/bin),
then only single symbolic link from some searchable directory on PATH
is enough to call all cogito commands
  cgt pull
  cgt update
so usage is more convenient for my fingers learned to type cvs up, etc.
I think, that addition of intelligent bash completion could be done easier
if number of the first level commands to cover is smaller.

Best wishes

        Pavel Pisa

"cgt" script
--------------------------------------------------------------------------------
#!/usr/bin/env bash
#
# The GIT scripted toolkit.
# Copyright (c) Petr Baudis, 2005
#
# Script to automatically wrap individual GIT commands under one script
# for those, who prefer only one or two links in /usr/local/bin
# This script added by Pavel Pisa <pisa@cmp.felk.cvut.cz>
#
# This command mostly only multiplexes to the individual scripts based
# on the first argument.

error () {
	echo cgt: $@ >&2
}
die () {
	error $@
	exit 1
}

if [ -z "$GIT_TOOLS_DIR" ] ; then
	GIT_MUXBINARY_DIR="$(dirname "$0")"
	if [ -h "$0" ]; then
		#GIT_TOOLS_DIR="$(ls -l "$0" | sed 's/^.*-> *\(.*\) *$/\1/')"
		GIT_TOOLS_DIR="$(readlink -f -n $0)"
	        GIT_TOOLS_DIR="$(dirname "$GIT_TOOLS_DIR")"
		GIT_TOOLS_DIR="$(cd "$GIT_MUXBINARY_DIR" ; cd "$GIT_TOOLS_DIR" ; pwd )"
	else
		GIT_TOOLS_DIR="$(cd "$GIT_MUXBINARY_DIR" ; pwd )"
	fi

	if [ -z "$(echo :$PATH: | sed -n -e 's#:'"$GIT_TOOLS_DIR"':#yes#p' )" ] ; 
then
		export PATH="$GIT_TOOLS_DIR:$PATH"
	fi

	export GIT_TOOLS_DIR
fi

#echo =$GIT_TOOLS_DIR
#echo PATH=$PATH
#echo CWD=$(pwd)
#exit 

help () {
	echo "cgt recognizes next commands:" >&2 
	(cd $GIT_TOOLS_DIR ; ls cg-* ) | sed -n -e 's/\<cg-\([^ ]*\)\>/\1/pg' >&2 
}


cmd=$1; shift

if [ ! "$cmd" ]; then
	error "missing command"
	help
	exit 1
fi

cgt_cmd_exe="${GIT_TOOLS_DIR}/cg-$cmd"

if [ ! -e "$cgt_cmd_exe" ]; then
	error "unrecognized command ${cmd}"
	help
	exit 1
fi

"$cgt_cmd_exe" "$@"
--------------------------------------------------------------------------------

"git" script
--------------------------------------------------------------------------------
#!/usr/bin/env bash
#
# The GIT scripted toolkit.
# Copyright (c) Petr Baudis, 2005
#
# Script to automatically wrap individual GIT commands under one script
# for those, who prefer only one or two links in /usr/local/bin
# This script added by Pavel Pisa <pisa@cmp.felk.cvut.cz>
#
# This command mostly only multiplexes to the individual scripts based
# on the first argument.

error () {
	echo git: $@ >&2
}
die () {
	error $@
	exit 1
}

if [ -z "$GIT_TOOLS_DIR" ] ; then
	GIT_MUXBINARY_DIR="$(dirname "$0")"
	if [ -h "$0" ]; then
		#GIT_TOOLS_DIR="$(ls -l "$0" | sed 's/^.*-> *\(.*\) *$/\1/')"
		GIT_TOOLS_DIR="$(readlink -f -n $0)"
	        GIT_TOOLS_DIR="$(dirname "$GIT_TOOLS_DIR")"
		GIT_TOOLS_DIR="$(cd "$GIT_MUXBINARY_DIR" ; cd "$GIT_TOOLS_DIR" ; pwd )"
	else
		GIT_TOOLS_DIR="$(cd "$GIT_MUXBINARY_DIR" ; pwd )"
	fi

	if [ -z "$(echo :$PATH: | sed -n -e 's#:'"$GIT_TOOLS_DIR"':#yes#p' )" ] ; 
then
		export PATH="$GIT_TOOLS_DIR:$PATH"
	fi

	export GIT_TOOLS_DIR
fi

#echo =$GIT_TOOLS_DIR
#echo PATH=$PATH
#echo CWD=$(pwd)
#exit 

help () {
	echo "git recognizes next commands:" >&2 
	(cd $GIT_TOOLS_DIR ; ls git-* ) | sed -n -e 's/\<git-\([^ ]*\)\>/\1/pg' >&2 
}


cmd=$1; shift

if [ ! "$cmd" ]; then
	error "missing command"
	help
	exit 1
fi

git_cmd_exe="${GIT_TOOLS_DIR}/git-$cmd"

if [ ! -e "$git_cmd_exe" ]; then
	error "unrecognized command ${cmd}"
	help
	exit 1
fi

"$git_cmd_exe" "$@"
--------------------------------------------------------------------------------


```

## Pavel Pisa, 2005-05-27 16:29

Subject: Re: GIT and COGITO individual scripts hidding from PATH
Message-ID: <200505271829.43511.pisa@cmp.felk.cvut.cz>
URL: https://gitlist.dev/e/200505271829.43511.pisa%40cmp.felk.cvut.cz
In-Reply-To: <200505271824.05105.pisa@cmp.felk.cvut.cz>

```
Excuse me for resending of e-mail again, but I have forget
to disable wrapping of lines. Sending as attachmet would be
more secure, but I do not know, if it is convenient
on the git list.

The "cgt" is wrapper for all cogito programs. If cogito is
build and installed to any prefix directory (/opt/git-cogito in my case)
and script is copied to bin subdirectory (/opt/git-cogito/bin),
then only single symbolic link from some searchable directory on PATH
is enough to call all cogito commands
  cgt pull
  cgt update
so usage is more convenient for my fingers learned to type cvs up, etc.
I think, that addition of intelligent bash completion could be done easier
if number of the first level commands to cover is smaller.

"cgt" script
---------------------------------------------------------------------------
#!/usr/bin/env bash
#
# The GIT scripted toolkit.
# Copyright (c) Petr Baudis, 2005
#
# Script to automatically wrap individual GIT commands under one script
# for those, who prefer only one or two links in /usr/local/bin
# This script added by Pavel Pisa <pisa@cmp.felk.cvut.cz>
#
# This command mostly only multiplexes to the individual scripts based
# on the first argument.

error () {
	echo cgt: $@ >&2
}
die () {
	error $@
	exit 1
}

if [ -z "$GIT_TOOLS_DIR" ] ; then
	GIT_MUXBINARY_DIR="$(dirname "$0")"
	if [ -h "$0" ]; then
		#GIT_TOOLS_DIR="$(ls -l "$0" | sed 's/^.*-> *\(.*\) *$/\1/')"
		GIT_TOOLS_DIR="$(readlink -f -n $0)"
	        GIT_TOOLS_DIR="$(dirname "$GIT_TOOLS_DIR")"
		GIT_TOOLS_DIR="$(cd "$GIT_MUXBINARY_DIR" ; cd "$GIT_TOOLS_DIR" ; pwd )"
	else
		GIT_TOOLS_DIR="$(cd "$GIT_MUXBINARY_DIR" ; pwd )"
	fi

	if [ -z "$(echo :$PATH: | sed -n -e 's#:'"$GIT_TOOLS_DIR"':#yes#p' )" ] ; then
		export PATH="$GIT_TOOLS_DIR:$PATH"
	fi

	export GIT_TOOLS_DIR
fi

#echo =$GIT_TOOLS_DIR
#echo PATH=$PATH
#echo CWD=$(pwd)
#exit 

help () {
	echo "cgt recognizes next commands:" >&2 
	(cd $GIT_TOOLS_DIR ; ls cg-* ) | sed -n -e 's/\<cg-\([^ ]*\)\>/\1/pg' >&2 
}


cmd=$1; shift

if [ ! "$cmd" ]; then
	error "missing command"
	help
	exit 1
fi

cgt_cmd_exe="${GIT_TOOLS_DIR}/cg-$cmd"

if [ ! -e "$cgt_cmd_exe" ]; then
	error "unrecognized command ${cmd}"
	help
	exit 1
fi

"$cgt_cmd_exe" "$@"
---------------------------------------------------------------------------

"git" script
---------------------------------------------------------------------------
#!/usr/bin/env bash
#
# The GIT scripted toolkit.
# Copyright (c) Petr Baudis, 2005
#
# Script to automatically wrap individual GIT commands under one script
# for those, who prefer only one or two links in /usr/local/bin
# This script added by Pavel Pisa <pisa@cmp.felk.cvut.cz>
#
# This command mostly only multiplexes to the individual scripts based
# on the first argument.

error () {
	echo git: $@ >&2
}
die () {
	error $@
	exit 1
}

if [ -z "$GIT_TOOLS_DIR" ] ; then
	GIT_MUXBINARY_DIR="$(dirname "$0")"
	if [ -h "$0" ]; then
		#GIT_TOOLS_DIR="$(ls -l "$0" | sed 's/^.*-> *\(.*\) *$/\1/')"
		GIT_TOOLS_DIR="$(readlink -f -n $0)"
	        GIT_TOOLS_DIR="$(dirname "$GIT_TOOLS_DIR")"
		GIT_TOOLS_DIR="$(cd "$GIT_MUXBINARY_DIR" ; cd "$GIT_TOOLS_DIR" ; pwd )"
	else
		GIT_TOOLS_DIR="$(cd "$GIT_MUXBINARY_DIR" ; pwd )"
	fi

	if [ -z "$(echo :$PATH: | sed -n -e 's#:'"$GIT_TOOLS_DIR"':#yes#p' )" ] ; then
		export PATH="$GIT_TOOLS_DIR:$PATH"
	fi

	export GIT_TOOLS_DIR
fi

#echo =$GIT_TOOLS_DIR
#echo PATH=$PATH
#echo CWD=$(pwd)
#exit 

help () {
	echo "git recognizes next commands:" >&2 
	(cd $GIT_TOOLS_DIR ; ls git-* ) | sed -n -e 's/\<git-\([^ ]*\)\>/\1/pg' >&2 
}


cmd=$1; shift

if [ ! "$cmd" ]; then
	error "missing command"
	help
	exit 1
fi

git_cmd_exe="${GIT_TOOLS_DIR}/git-$cmd"

if [ ! -e "$git_cmd_exe" ]; then
	error "unrecognized command ${cmd}"
	help
	exit 1
fi

"$git_cmd_exe" "$@"
---------------------------------------------------------------------------

```
