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

[PATCH 0/2] Alternate index output file

From
Junio C Hamano <junkio@cox.net>
Date
Apr 1, 2007, 06:27 UTC
Message-ID
<7v4po04nit.fsf_-_@assigned-by-dhcp.cox.net>
In-Reply-To
<Pine.LNX.4.64.0703280759230.6730@woody.linux-foundation.org>
Linus Torvalds <torvalds@linux-foundation.org> writes:
Show 5 quoted lines
> (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.

Previous: Junio C HamanoNext: Junio C Hamano
Message 4 of 7 in “Sanity checking request”
  1. Junio C HamanoMar 28, 2007
  2. Linus TorvaldsMar 28, 2007
  3. Junio C HamanoMar 28, 2007
  4. 0/2 Alternate index output fileJunio C Hamano, Apr 1, 2007
  5. 1/2 _GIT_INDEX_OUTPUT: allow plumbing to output to an alternative index file.Junio C Hamano, Apr 1, 2007
  6. 2/2 git-read-tree --index-output=<file>Junio C Hamano, Apr 1, 2007
  7. Linus TorvaldsApr 1, 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.