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

Re: [PATCH] add simple install replacement

From
JHJan Hudec <bulb@ucw.cz>
Date
Oct 12, 2007, 14:06 UTC
Message-ID
<20071012140647.GC7865@efreet.light.src>
In-Reply-To
<20071011215237.GI20753@schiele.dyndns.org>
On Thu, Oct 11, 2007 at 23:52:37 +0200, Robert Schiele wrote:
> This patch adds a very simple install replacement script to git.
> This allows more easy installation on systems that don't have a
> compatible install.
Do you have a particular case where you need it?
Show 17 quoted lines
> Signed-off-by: Robert Schiele <rschiele@gmail.com>
> ---
>  gitinstall |   35 +++++++++++++++++++++++++++++++++++
>  1 files changed, 35 insertions(+), 0 deletions(-)
>  create mode 100755 gitinstall
> 
> diff --git a/gitinstall b/gitinstall
> new file mode 100755
> index 0000000..8b346d6
> --- /dev/null
> +++ b/gitinstall
> @@ -0,0 +1,35 @@
> +#!/bin/sh
> +
> +MKDIRMODE=0
> +MODE=755
> +while getopts 'dm:' FLAG; do

No such thing here: zsh$ /bin/sh $ which getopts $

Yes, bash and zsh do have that, but my (and I suspect many git users') /bin/sh is neither of those. Git scripts should use just POSIX shell features for portability.

Which is particularly important when you are trying to replace a common utility, because the systems that won't have it are likely to not have bash either.

You may want to have a look at /usr/share/automake-1.9/install-sh (or /usr/share/automake<something>/install-sh). It shows how to portably process options in shell and since it's in fact covered by the MIT/X license (and FSF changes are public domain), git could just use it if necessary.

Show 15 quoted lines
> +    case "$FLAG" in
> +        d) MKDIRMODE=1;;
> +        m) MODE="$OPTARG";;
> +	*) exit 1;;
> +    esac
> +done
> +if test "$OPTIND" != 1; then
> +    shift `expr $OPTIND - 1`
> +fi
> +if test $MKDIRMODE = 1; then
> +    mkdir -p "$@"
> +    chmod "$MODE" "$@"
> +else
> +    if test $# = 2 && ! test -d "$2"; then
> +	rm -rf "$2"

Are you sure reall install would do this? The maual (install(1)) states following usage variants:

    install [OPTION]... [-T] SOURCE DEST
    install [OPTION]... SOURCE... DIRECTORY
    install [OPTION]... -t DIRECTORY SOURCE...
    install [OPTION]... -d DIRECTORY...
Now however there is nothing saying that SOURCE... is at least two, so is
    install git /usr/bin

a case of the first or second usage? I would say the second, but your code would:

    rm -rf /usr/bin
    cp git /usr/bin
Show 9 quoted lines
> +	cp "$1" "$2"
> +	chmod "$MODE" "$2"
> +    else
> +	FILES=
> +	while test $# != 1; do
> +	    FILES="$FILES $1"
> +	    shift
> +	done
> +	for i in $FILES; do
    touch "foo*bar" "a b c"
    ./gitinstall "b*c" "a b c" /tmp

... will copy a lot of files to /tmp (presuming we are in git source directory, where tons of files are called builtin-<something>.c) and complain that there is no 'a', no 'b' and no 'c'.

Show 6 quoted lines
> +	    rm -rf "$1/"`basename "$i"`
> +	    cp "$i" "$1"
> +	    chmod "$MODE" "$1/"`basename "$i"`
> +	done
> +    fi
> +fi
-- 
						 Jan 'Bulb' Hudec <bulb@ucw.cz>
Previous: Robert SchieleNext: Robert Schiele
Message 2 of 3 in “add simple install replacement”
  1. add simple install replacementRobert Schiele, Oct 11, 2007
  2. Jan HudecOct 12, 2007
  3. Robert SchieleOct 12, 2007

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.