Thread (2 messages) flat view 2 messages, 2 authors, 2016-06-15
DORMANTno replies

[PATCH 0/2] Alternate index output file

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:02

Linus Torvalds [off-list ref] writes:
(Looking at git-commit.sh, the thing I *really* think we should do is to 
have a "GIT_INDEX_FILE_OUTPUT" environment variable that does locking on 
the input file, but writes the result to another file: rigth now 
git-commit.sh (a) wastes time copying the old index file by hand and (b) 
as a result doesn't even honor any locking on it.
I've done this with an environment variable, and it passes all
the tests, but I think for this application an environment is
really a mistake.  As expected, the change to git-commit.sh
looks like:

        diff --git a/git-commit.sh b/git-commit.sh
        index 292cf96..20c0dc8 100755
        --- a/git-commit.sh
        +++ b/git-commit.sh
        @@ -370,8 +370,8 @@ t,)
                        # the same way.
                        if test -z "$initial_commit"
                        then
        -			cp "$THIS_INDEX" "$TMP_INDEX"
        -			GIT_INDEX_FILE="$TMP_INDEX" git-read-tree -i -m HEAD
        +			_GIT_INDEX_OUTPUT="$TMP_INDEX" \
        +			GIT_INDEX_FILE="$THIS_INDEX" git-read-tree -i -m HEAD
                        else
                                rm -f "$TMP_INDEX"
                        fi || exit

However, I had to say something like this in the documentation:

        diff --git a/Documentation/git.txt b/Documentation/git.txt
        index dceacfa..bc025d6 100644
        --- a/Documentation/git.txt
        +++ b/Documentation/git.txt
        @@ -311,6 +311,15 @@ git so take care if using Cogito etc.
                index file. If not specified, the default of `$GIT_DIR/index`
                is used.

        +'_GIT_INDEX_OUTPUT'::
        +	When this environment is defined, plumbing level
        +	commands that update the index writes the resulting
        +	index to this file, instead of the usual
        +	`GIT_INDEX_FILE` (or its default `$GIT_DIR/index`).
        +	This is solely meant to be used by Porcelain to drive
        +	low-level plumbing.  Defining this in user's environment
        +	is always an error.  Do not use it.
        +
         'GIT_OBJECT_DIRECTORY'::
                If the object storage directory is specified via this
                environment variable then the sha1 directories are created

If a curious user has the environment variable set to something
other than the file GIT_INDEX_FILE points at, almost everything
will break.  This should instead be a command line parameter to
tell these plumbing commands to write the result in the named
file, to prevent stupid mistakes.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help