git-read-tree --index-output=<file>
This corrects the interface mistake of the previous one, and gives a command line parameter to the only plumbing command that currently needs it: "git-read-tree". We can add the calls to set_alternate_index_output() to other plumbing commands that update the index if/when needed. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
30ca07a249
commit
5e7f56ac33
@ -8,7 +8,7 @@ git-read-tree - Reads tree information into the index
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-read-tree' (<tree-ish> | [[-m [--aggressive] | --reset | --prefix=<prefix>] [-u | -i]] [--exclude-per-directory=<gitignore>] <tree-ish1> [<tree-ish2> [<tree-ish3>]])
|
||||
'git-read-tree' (<tree-ish> | [[-m [--aggressive] | --reset | --prefix=<prefix>] [-u | -i]] [--exclude-per-directory=<gitignore>] [--index-output=<file>] <tree-ish1> [<tree-ish2> [<tree-ish3>]])
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
@ -86,6 +86,18 @@ OPTIONS
|
||||
file (usually '.gitignore') and allows such an untracked
|
||||
but explicitly ignored file to be overwritten.
|
||||
|
||||
--index-output=<file>::
|
||||
Instead of writing the results out to `$GIT_INDEX_FILE`,
|
||||
write the resulting index in the named file. While the
|
||||
command is operating, the original index file is locked
|
||||
with the same mechanism as usual. The file must allow
|
||||
to be rename(2)ed into from a temporary file that is
|
||||
created next to the usual index file; typically this
|
||||
means it needs to be on the same filesystem as the index
|
||||
file itself, and you need write permission to the
|
||||
directories the index file and index output file are
|
||||
located in.
|
||||
|
||||
<tree-ish#>::
|
||||
The id of the tree object(s) to be read/merged.
|
||||
|
||||
|
@ -315,14 +315,6 @@ 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 `$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.
|
||||
|
||||
'GIT_OBJECT_DIRECTORY'::
|
||||
If the object storage directory is specified via this
|
||||
environment variable then the sha1 directories are created
|
||||
|
@ -84,7 +84,7 @@ static void prime_cache_tree(void)
|
||||
|
||||
}
|
||||
|
||||
static const char read_tree_usage[] = "git-read-tree (<sha> | [[-m [--aggressive] | --reset | --prefix=<prefix>] [-u | -i]] [--exclude-per-directory=<gitignore>] <sha1> [<sha2> [<sha3>]])";
|
||||
static const char read_tree_usage[] = "git-read-tree (<sha> | [[-m [--aggressive] | --reset | --prefix=<prefix>] [-u | -i]] [--exclude-per-directory=<gitignore>] [--index-output=<file>] <sha1> [<sha2> [<sha3>]])";
|
||||
|
||||
static struct lock_file lock_file;
|
||||
|
||||
@ -128,6 +128,11 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!prefixcmp(arg, "--index-output=")) {
|
||||
set_alternate_index_output(arg + 15);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* "--prefix=<subdirectory>/" means keep the current index
|
||||
* entries and put the entries from the tree under the
|
||||
* given subdirectory.
|
||||
|
2
cache.h
2
cache.h
@ -147,7 +147,6 @@ enum object_type {
|
||||
#define DEFAULT_GIT_DIR_ENVIRONMENT ".git"
|
||||
#define DB_ENVIRONMENT "GIT_OBJECT_DIRECTORY"
|
||||
#define INDEX_ENVIRONMENT "GIT_INDEX_FILE"
|
||||
#define INDEX_OUTPUT_ENVIRONMENT "_GIT_INDEX_OUTPUT"
|
||||
#define GRAFT_ENVIRONMENT "GIT_GRAFT_FILE"
|
||||
#define TEMPLATE_DIR_ENVIRONMENT "GIT_TEMPLATE_DIR"
|
||||
#define CONFIG_ENVIRONMENT "GIT_CONFIG"
|
||||
@ -216,6 +215,7 @@ extern int commit_lock_file(struct lock_file *);
|
||||
|
||||
extern int hold_locked_index(struct lock_file *, int);
|
||||
extern int commit_locked_index(struct lock_file *);
|
||||
extern void set_alternate_index_output(const char *);
|
||||
|
||||
extern void rollback_lock_file(struct lock_file *);
|
||||
extern int delete_ref(const char *, unsigned char *sha1);
|
||||
|
@ -370,8 +370,8 @@ t,)
|
||||
# the same way.
|
||||
if test -z "$initial_commit"
|
||||
then
|
||||
_GIT_INDEX_OUTPUT="$TMP_INDEX" \
|
||||
GIT_INDEX_FILE="$THIS_INDEX" git-read-tree -i -m HEAD
|
||||
GIT_INDEX_FILE="$THIS_INDEX" \
|
||||
git-read-tree --index-output="$TMP_INDEX" -i -m HEAD
|
||||
else
|
||||
rm -f "$TMP_INDEX"
|
||||
fi || exit
|
||||
|
11
lockfile.c
11
lockfile.c
@ -4,6 +4,7 @@
|
||||
#include "cache.h"
|
||||
|
||||
static struct lock_file *lock_file_list;
|
||||
static const char *alternate_index_output;
|
||||
|
||||
static void remove_lock_file(void)
|
||||
{
|
||||
@ -70,11 +71,15 @@ int hold_locked_index(struct lock_file *lk, int die_on_error)
|
||||
return hold_lock_file_for_update(lk, get_index_file(), die_on_error);
|
||||
}
|
||||
|
||||
void set_alternate_index_output(const char *name)
|
||||
{
|
||||
alternate_index_output = name;
|
||||
}
|
||||
|
||||
int commit_locked_index(struct lock_file *lk)
|
||||
{
|
||||
char *output = getenv(INDEX_OUTPUT_ENVIRONMENT);
|
||||
if (output && *output) {
|
||||
int result = rename(lk->filename, output);
|
||||
if (alternate_index_output) {
|
||||
int result = rename(lk->filename, alternate_index_output);
|
||||
lk->filename[0] = 0;
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user