зеркало из https://github.com/microsoft/git.git
read-cache: new API write_locked_index instead of write_index/write_cache
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
33c297aacc
Коммит
03b8664772
|
@ -299,7 +299,6 @@ static int add_files(struct dir_struct *dir, int flags)
|
|||
int cmd_add(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int exit_status = 0;
|
||||
int newfd;
|
||||
struct pathspec pathspec;
|
||||
struct dir_struct dir;
|
||||
int flags;
|
||||
|
@ -345,7 +344,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
|||
add_new_files = !take_worktree_changes && !refresh_only;
|
||||
require_pathspec = !take_worktree_changes;
|
||||
|
||||
newfd = hold_locked_index(&lock_file, 1);
|
||||
hold_locked_index(&lock_file, 1);
|
||||
|
||||
flags = ((verbose ? ADD_CACHE_VERBOSE : 0) |
|
||||
(show_only ? ADD_CACHE_PRETEND : 0) |
|
||||
|
@ -443,8 +442,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
|||
|
||||
finish:
|
||||
if (active_cache_changed) {
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(&lock_file))
|
||||
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
|
||||
die(_("Unable to write new index file"));
|
||||
}
|
||||
|
||||
|
|
|
@ -3644,7 +3644,7 @@ static void build_fake_ancestor(struct patch *list, const char *filename)
|
|||
{
|
||||
struct patch *patch;
|
||||
struct index_state result = { NULL };
|
||||
int fd;
|
||||
static struct lock_file lock;
|
||||
|
||||
/* Once we start supporting the reverse patch, it may be
|
||||
* worth showing the new sha1 prefix, but until then...
|
||||
|
@ -3682,8 +3682,8 @@ static void build_fake_ancestor(struct patch *list, const char *filename)
|
|||
die ("Could not add %s to temporary index", name);
|
||||
}
|
||||
|
||||
fd = open(filename, O_WRONLY | O_CREAT, 0666);
|
||||
if (fd < 0 || write_index(&result, fd) || close(fd))
|
||||
hold_lock_file_for_update(&lock, filename, LOCK_DIE_ON_ERROR);
|
||||
if (write_locked_index(&result, &lock, COMMIT_LOCK))
|
||||
die ("Could not write temporary index to %s", filename);
|
||||
|
||||
discard_index(&result);
|
||||
|
@ -4501,8 +4501,7 @@ int cmd_apply(int argc, const char **argv, const char *prefix_)
|
|||
}
|
||||
|
||||
if (update_index) {
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(&lock_file))
|
||||
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
|
||||
die(_("Unable to write new index file"));
|
||||
}
|
||||
|
||||
|
|
|
@ -279,8 +279,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
|
|||
checkout_all(prefix, prefix_length);
|
||||
|
||||
if (0 <= newfd &&
|
||||
(write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(&lock_file)))
|
||||
write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
|
||||
die("Unable to write new index file");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -225,7 +225,6 @@ static int checkout_paths(const struct checkout_opts *opts,
|
|||
int flag;
|
||||
struct commit *head;
|
||||
int errs = 0;
|
||||
int newfd;
|
||||
struct lock_file *lock_file;
|
||||
|
||||
if (opts->track != BRANCH_TRACK_UNSPECIFIED)
|
||||
|
@ -256,7 +255,7 @@ static int checkout_paths(const struct checkout_opts *opts,
|
|||
|
||||
lock_file = xcalloc(1, sizeof(struct lock_file));
|
||||
|
||||
newfd = hold_locked_index(lock_file, 1);
|
||||
hold_locked_index(lock_file, 1);
|
||||
if (read_cache_preload(&opts->pathspec) < 0)
|
||||
return error(_("corrupt index file"));
|
||||
|
||||
|
@ -352,8 +351,7 @@ static int checkout_paths(const struct checkout_opts *opts,
|
|||
}
|
||||
}
|
||||
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock_file))
|
||||
if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
|
||||
die(_("unable to write new index file"));
|
||||
|
||||
read_ref_full("HEAD", rev, 0, &flag);
|
||||
|
@ -444,8 +442,8 @@ static int merge_working_tree(const struct checkout_opts *opts,
|
|||
{
|
||||
int ret;
|
||||
struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
|
||||
int newfd = hold_locked_index(lock_file, 1);
|
||||
|
||||
hold_locked_index(lock_file, 1);
|
||||
if (read_cache_preload(NULL) < 0)
|
||||
return error(_("corrupt index file"));
|
||||
|
||||
|
@ -553,8 +551,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
|
|||
}
|
||||
}
|
||||
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock_file))
|
||||
if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
|
||||
die(_("unable to write new index file"));
|
||||
|
||||
if (!opts->force && !opts->quiet)
|
||||
|
|
|
@ -616,7 +616,7 @@ static int checkout(void)
|
|||
struct unpack_trees_options opts;
|
||||
struct tree *tree;
|
||||
struct tree_desc t;
|
||||
int err = 0, fd;
|
||||
int err = 0;
|
||||
|
||||
if (option_no_checkout)
|
||||
return 0;
|
||||
|
@ -640,7 +640,7 @@ static int checkout(void)
|
|||
setup_work_tree();
|
||||
|
||||
lock_file = xcalloc(1, sizeof(struct lock_file));
|
||||
fd = hold_locked_index(lock_file, 1);
|
||||
hold_locked_index(lock_file, 1);
|
||||
|
||||
memset(&opts, 0, sizeof opts);
|
||||
opts.update = 1;
|
||||
|
@ -656,8 +656,7 @@ static int checkout(void)
|
|||
if (unpack_trees(1, &t, &opts) < 0)
|
||||
die(_("unable to checkout working tree"));
|
||||
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock_file))
|
||||
if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
|
||||
die(_("unable to write new index file"));
|
||||
|
||||
err |= run_hook_le(NULL, "post-checkout", sha1_to_hex(null_sha1),
|
||||
|
|
|
@ -305,7 +305,6 @@ static void refresh_cache_or_die(int refresh_flags)
|
|||
static char *prepare_index(int argc, const char **argv, const char *prefix,
|
||||
const struct commit *current_head, int is_status)
|
||||
{
|
||||
int fd;
|
||||
struct string_list partial;
|
||||
struct pathspec pathspec;
|
||||
int refresh_flags = REFRESH_QUIET;
|
||||
|
@ -321,12 +320,11 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
|
|||
|
||||
if (interactive) {
|
||||
char *old_index_env = NULL;
|
||||
fd = hold_locked_index(&index_lock, 1);
|
||||
hold_locked_index(&index_lock, 1);
|
||||
|
||||
refresh_cache_or_die(refresh_flags);
|
||||
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close_lock_file(&index_lock))
|
||||
if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
|
||||
die(_("unable to create temporary index"));
|
||||
|
||||
old_index_env = getenv(INDEX_ENVIRONMENT);
|
||||
|
@ -360,12 +358,11 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
|
|||
* (B) on failure, rollback the real index.
|
||||
*/
|
||||
if (all || (also && pathspec.nr)) {
|
||||
fd = hold_locked_index(&index_lock, 1);
|
||||
hold_locked_index(&index_lock, 1);
|
||||
add_files_to_cache(also ? prefix : NULL, &pathspec, 0);
|
||||
refresh_cache_or_die(refresh_flags);
|
||||
update_main_cache_tree(WRITE_TREE_SILENT);
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close_lock_file(&index_lock))
|
||||
if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
|
||||
die(_("unable to write new_index file"));
|
||||
commit_style = COMMIT_NORMAL;
|
||||
return index_lock.filename;
|
||||
|
@ -381,12 +378,12 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
|
|||
* We still need to refresh the index here.
|
||||
*/
|
||||
if (!only && !pathspec.nr) {
|
||||
fd = hold_locked_index(&index_lock, 1);
|
||||
hold_locked_index(&index_lock, 1);
|
||||
refresh_cache_or_die(refresh_flags);
|
||||
if (active_cache_changed) {
|
||||
update_main_cache_tree(WRITE_TREE_SILENT);
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
commit_locked_index(&index_lock))
|
||||
if (write_locked_index(&the_index, &index_lock,
|
||||
COMMIT_LOCK))
|
||||
die(_("unable to write new_index file"));
|
||||
} else {
|
||||
rollback_lock_file(&index_lock);
|
||||
|
@ -432,14 +429,13 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
|
|||
if (read_cache() < 0)
|
||||
die(_("cannot read the index"));
|
||||
|
||||
fd = hold_locked_index(&index_lock, 1);
|
||||
hold_locked_index(&index_lock, 1);
|
||||
add_remove_files(&partial);
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close_lock_file(&index_lock))
|
||||
if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
|
||||
die(_("unable to write new_index file"));
|
||||
|
||||
fd = hold_lock_file_for_update(&false_lock,
|
||||
hold_lock_file_for_update(&false_lock,
|
||||
git_path("next-index-%"PRIuMAX,
|
||||
(uintmax_t) getpid()),
|
||||
LOCK_DIE_ON_ERROR);
|
||||
|
@ -448,8 +444,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
|
|||
add_remove_files(&partial);
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close_lock_file(&false_lock))
|
||||
if (write_locked_index(&the_index, &false_lock, CLOSE_LOCK))
|
||||
die(_("unable to write temporary index file"));
|
||||
|
||||
discard_cache();
|
||||
|
|
|
@ -657,14 +657,12 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
|
|||
struct commit_list *remoteheads,
|
||||
struct commit *head, const char *head_arg)
|
||||
{
|
||||
int index_fd;
|
||||
struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
|
||||
|
||||
index_fd = hold_locked_index(lock, 1);
|
||||
hold_locked_index(lock, 1);
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
if (active_cache_changed &&
|
||||
(write_cache(index_fd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock)))
|
||||
write_locked_index(&the_index, lock, COMMIT_LOCK))
|
||||
return error(_("Unable to write index."));
|
||||
rollback_lock_file(lock);
|
||||
|
||||
|
@ -672,7 +670,6 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
|
|||
int clean, x;
|
||||
struct commit *result;
|
||||
struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
|
||||
int index_fd;
|
||||
struct commit_list *reversed = NULL;
|
||||
struct merge_options o;
|
||||
struct commit_list *j;
|
||||
|
@ -700,12 +697,11 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
|
|||
for (j = common; j; j = j->next)
|
||||
commit_list_insert(j->item, &reversed);
|
||||
|
||||
index_fd = hold_locked_index(lock, 1);
|
||||
hold_locked_index(lock, 1);
|
||||
clean = merge_recursive(&o, head,
|
||||
remoteheads->item, reversed, &result);
|
||||
if (active_cache_changed &&
|
||||
(write_cache(index_fd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock)))
|
||||
write_locked_index(&the_index, lock, COMMIT_LOCK))
|
||||
die (_("unable to write %s"), get_index_file());
|
||||
rollback_lock_file(lock);
|
||||
return clean ? 0 : 1;
|
||||
|
|
|
@ -63,7 +63,7 @@ static struct lock_file lock_file;
|
|||
|
||||
int cmd_mv(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int i, newfd, gitmodules_modified = 0;
|
||||
int i, gitmodules_modified = 0;
|
||||
int verbose = 0, show_only = 0, force = 0, ignore_errors = 0;
|
||||
struct option builtin_mv_options[] = {
|
||||
OPT__VERBOSE(&verbose, N_("be verbose")),
|
||||
|
@ -85,7 +85,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
|
|||
if (--argc < 1)
|
||||
usage_with_options(builtin_mv_usage, builtin_mv_options);
|
||||
|
||||
newfd = hold_locked_index(&lock_file, 1);
|
||||
hold_locked_index(&lock_file, 1);
|
||||
if (read_cache() < 0)
|
||||
die(_("index file corrupt"));
|
||||
|
||||
|
@ -275,8 +275,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
|
|||
stage_updated_gitmodules();
|
||||
|
||||
if (active_cache_changed) {
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(&lock_file))
|
||||
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
|
||||
die(_("Unable to write new index file"));
|
||||
}
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ static struct lock_file lock_file;
|
|||
|
||||
int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
||||
{
|
||||
int i, newfd, stage = 0;
|
||||
int i, stage = 0;
|
||||
unsigned char sha1[20];
|
||||
struct tree_desc t[MAX_UNPACK_TREES];
|
||||
struct unpack_trees_options opts;
|
||||
|
@ -149,7 +149,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
|||
argc = parse_options(argc, argv, unused_prefix, read_tree_options,
|
||||
read_tree_usage, 0);
|
||||
|
||||
newfd = hold_locked_index(&lock_file, 1);
|
||||
hold_locked_index(&lock_file, 1);
|
||||
|
||||
prefix_set = opts.prefix ? 1 : 0;
|
||||
if (1 < opts.merge + opts.reset + prefix_set)
|
||||
|
@ -233,8 +233,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
|||
if (nr_trees == 1 && !opts.prefix)
|
||||
prime_cache_tree(&active_cache_tree, trees[0]);
|
||||
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(&lock_file))
|
||||
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
|
||||
die("unable to write new index file");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -351,7 +351,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||
|
||||
if (reset_type != SOFT) {
|
||||
struct lock_file *lock = xcalloc(1, sizeof(*lock));
|
||||
int newfd = hold_locked_index(lock, 1);
|
||||
hold_locked_index(lock, 1);
|
||||
if (reset_type == MIXED) {
|
||||
int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN;
|
||||
if (read_from_tree(&pathspec, sha1, intent_to_add))
|
||||
|
@ -367,8 +367,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||
die(_("Could not reset index file to revision '%s'."), rev);
|
||||
}
|
||||
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock))
|
||||
if (write_locked_index(&the_index, lock, COMMIT_LOCK))
|
||||
die(_("Could not write new index file."));
|
||||
}
|
||||
|
||||
|
|
|
@ -278,7 +278,7 @@ static struct option builtin_rm_options[] = {
|
|||
|
||||
int cmd_rm(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int i, newfd;
|
||||
int i;
|
||||
struct pathspec pathspec;
|
||||
char *seen;
|
||||
|
||||
|
@ -293,7 +293,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
|
|||
if (!index_only)
|
||||
setup_work_tree();
|
||||
|
||||
newfd = hold_locked_index(&lock_file, 1);
|
||||
hold_locked_index(&lock_file, 1);
|
||||
|
||||
if (read_cache() < 0)
|
||||
die(_("index file corrupt"));
|
||||
|
@ -427,8 +427,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
|
|||
}
|
||||
|
||||
if (active_cache_changed) {
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(&lock_file))
|
||||
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
|
||||
die(_("Unable to write new index file"));
|
||||
}
|
||||
|
||||
|
|
|
@ -921,8 +921,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
|
|||
exit(128);
|
||||
unable_to_lock_index_die(get_index_file(), lock_error);
|
||||
}
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock_file))
|
||||
if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
|
||||
die("Unable to write new index file");
|
||||
}
|
||||
|
||||
|
|
|
@ -595,8 +595,7 @@ int write_cache_as_tree(unsigned char *sha1, int flags, const char *prefix)
|
|||
active_nr, flags) < 0)
|
||||
return WRITE_TREE_UNMERGED_INDEX;
|
||||
if (0 <= newfd) {
|
||||
if (!write_cache(newfd, active_cache, active_nr) &&
|
||||
!commit_lock_file(lock_file))
|
||||
if (!write_locked_index(&the_index, lock_file, COMMIT_LOCK))
|
||||
newfd = -1;
|
||||
}
|
||||
/* Not being able to write is fine -- we are only interested
|
||||
|
|
6
cache.h
6
cache.h
|
@ -301,7 +301,6 @@ extern void free_name_hash(struct index_state *istate);
|
|||
#define read_cache_preload(pathspec) read_index_preload(&the_index, (pathspec))
|
||||
#define is_cache_unborn() is_index_unborn(&the_index)
|
||||
#define read_cache_unmerged() read_index_unmerged(&the_index)
|
||||
#define write_cache(newfd, cache, entries) write_index(&the_index, (newfd))
|
||||
#define discard_cache() discard_index(&the_index)
|
||||
#define unmerged_cache() unmerged_index(&the_index)
|
||||
#define cache_name_pos(name, namelen) index_name_pos(&the_index,(name),(namelen))
|
||||
|
@ -456,12 +455,15 @@ extern int daemonize(void);
|
|||
} while (0)
|
||||
|
||||
/* Initialize and use the cache information */
|
||||
struct lock_file;
|
||||
extern int read_index(struct index_state *);
|
||||
extern int read_index_preload(struct index_state *, const struct pathspec *pathspec);
|
||||
extern int read_index_from(struct index_state *, const char *path);
|
||||
extern int is_index_unborn(struct index_state *);
|
||||
extern int read_index_unmerged(struct index_state *);
|
||||
extern int write_index(struct index_state *, int newfd);
|
||||
#define COMMIT_LOCK (1 << 0)
|
||||
#define CLOSE_LOCK (1 << 1)
|
||||
extern int write_locked_index(struct index_state *, struct lock_file *lock, unsigned flags);
|
||||
extern int discard_index(struct index_state *);
|
||||
extern int unmerged_index(const struct index_state *);
|
||||
extern int verify_path(const char *path);
|
||||
|
|
|
@ -1986,7 +1986,7 @@ int merge_recursive_generic(struct merge_options *o,
|
|||
const unsigned char **base_list,
|
||||
struct commit **result)
|
||||
{
|
||||
int clean, index_fd;
|
||||
int clean;
|
||||
struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
|
||||
struct commit *head_commit = get_ref(head, o->branch1);
|
||||
struct commit *next_commit = get_ref(merge, o->branch2);
|
||||
|
@ -2003,12 +2003,11 @@ int merge_recursive_generic(struct merge_options *o,
|
|||
}
|
||||
}
|
||||
|
||||
index_fd = hold_locked_index(lock, 1);
|
||||
hold_locked_index(lock, 1);
|
||||
clean = merge_recursive(o, head_commit, next_commit, ca,
|
||||
result);
|
||||
if (active_cache_changed &&
|
||||
(write_cache(index_fd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock)))
|
||||
write_locked_index(&the_index, lock, COMMIT_LOCK))
|
||||
return error(_("Unable to write index."));
|
||||
|
||||
return clean ? 0 : 1;
|
||||
|
|
7
merge.c
7
merge.c
|
@ -66,13 +66,13 @@ int checkout_fast_forward(const unsigned char *head,
|
|||
struct tree *trees[MAX_UNPACK_TREES];
|
||||
struct unpack_trees_options opts;
|
||||
struct tree_desc t[MAX_UNPACK_TREES];
|
||||
int i, fd, nr_trees = 0;
|
||||
int i, nr_trees = 0;
|
||||
struct dir_struct dir;
|
||||
struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
|
||||
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
|
||||
fd = hold_locked_index(lock_file, 1);
|
||||
hold_locked_index(lock_file, 1);
|
||||
|
||||
memset(&trees, 0, sizeof(trees));
|
||||
memset(&opts, 0, sizeof(opts));
|
||||
|
@ -105,8 +105,7 @@ int checkout_fast_forward(const unsigned char *head,
|
|||
}
|
||||
if (unpack_trees(nr_trees, t, &opts))
|
||||
return -1;
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock_file))
|
||||
if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
|
||||
die(_("unable to write new index file"));
|
||||
return 0;
|
||||
}
|
||||
|
|
28
read-cache.c
28
read-cache.c
|
@ -1779,13 +1779,11 @@ static int has_racy_timestamp(struct index_state *istate)
|
|||
void update_index_if_able(struct index_state *istate, struct lock_file *lockfile)
|
||||
{
|
||||
if ((istate->cache_changed || has_racy_timestamp(istate)) &&
|
||||
!write_index(istate, lockfile->fd))
|
||||
commit_locked_index(lockfile);
|
||||
else
|
||||
write_locked_index(istate, lockfile, COMMIT_LOCK))
|
||||
rollback_lock_file(lockfile);
|
||||
}
|
||||
|
||||
int write_index(struct index_state *istate, int newfd)
|
||||
static int do_write_index(struct index_state *istate, int newfd)
|
||||
{
|
||||
git_SHA_CTX c;
|
||||
struct cache_header hdr;
|
||||
|
@ -1877,6 +1875,28 @@ int write_index(struct index_state *istate, int newfd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int do_write_locked_index(struct index_state *istate, struct lock_file *lock,
|
||||
unsigned flags)
|
||||
{
|
||||
int ret = do_write_index(istate, lock->fd);
|
||||
if (ret)
|
||||
return ret;
|
||||
assert((flags & (COMMIT_LOCK | CLOSE_LOCK)) !=
|
||||
(COMMIT_LOCK | CLOSE_LOCK));
|
||||
if (flags & COMMIT_LOCK)
|
||||
return commit_locked_index(lock);
|
||||
else if (flags & CLOSE_LOCK)
|
||||
return close_lock_file(lock);
|
||||
else
|
||||
return ret;
|
||||
}
|
||||
|
||||
int write_locked_index(struct index_state *istate, struct lock_file *lock,
|
||||
unsigned flags)
|
||||
{
|
||||
return do_write_locked_index(istate, lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the index file that is potentially unmerged into given
|
||||
* index_state, dropping any unmerged entries. Returns true if
|
||||
|
|
3
rerere.c
3
rerere.c
|
@ -492,8 +492,7 @@ static int update_paths(struct string_list *update)
|
|||
}
|
||||
|
||||
if (!status && active_cache_changed) {
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
commit_locked_index(&index_lock))
|
||||
if (write_locked_index(&the_index, &index_lock, COMMIT_LOCK))
|
||||
die("Unable to write new index file");
|
||||
} else if (fd >= 0)
|
||||
rollback_lock_file(&index_lock);
|
||||
|
|
10
sequencer.c
10
sequencer.c
|
@ -294,11 +294,11 @@ static int do_recursive_merge(struct commit *base, struct commit *next,
|
|||
{
|
||||
struct merge_options o;
|
||||
struct tree *result, *next_tree, *base_tree, *head_tree;
|
||||
int clean, index_fd;
|
||||
int clean;
|
||||
const char **xopt;
|
||||
static struct lock_file index_lock;
|
||||
|
||||
index_fd = hold_locked_index(&index_lock, 1);
|
||||
hold_locked_index(&index_lock, 1);
|
||||
|
||||
read_cache();
|
||||
|
||||
|
@ -319,8 +319,7 @@ static int do_recursive_merge(struct commit *base, struct commit *next,
|
|||
next_tree, base_tree, &result);
|
||||
|
||||
if (active_cache_changed &&
|
||||
(write_cache(index_fd, active_cache, active_nr) ||
|
||||
commit_locked_index(&index_lock)))
|
||||
write_locked_index(&the_index, &index_lock, COMMIT_LOCK))
|
||||
/* TRANSLATORS: %s will be "revert" or "cherry-pick" */
|
||||
die(_("%s: Unable to write new index file"), action_name(opts));
|
||||
rollback_lock_file(&index_lock);
|
||||
|
@ -680,8 +679,7 @@ static void read_and_refresh_cache(struct replay_opts *opts)
|
|||
die(_("git %s: failed to read the index"), action_name(opts));
|
||||
refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
|
||||
if (the_index.cache_changed && index_fd >= 0) {
|
||||
if (write_index(&the_index, index_fd) ||
|
||||
commit_locked_index(&index_lock))
|
||||
if (write_locked_index(&the_index, &index_lock, COMMIT_LOCK))
|
||||
die(_("git %s: failed to refresh the index"), action_name(opts));
|
||||
}
|
||||
rollback_lock_file(&index_lock);
|
||||
|
|
|
@ -6,12 +6,11 @@ static struct lock_file index_lock;
|
|||
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
int fd = hold_locked_index(&index_lock, 1);
|
||||
hold_locked_index(&index_lock, 1);
|
||||
if (read_cache() < 0)
|
||||
die("unable to read index file");
|
||||
active_cache_tree = NULL;
|
||||
if (write_cache(fd, active_cache, active_nr)
|
||||
|| commit_lock_file(&index_lock))
|
||||
if (write_locked_index(&the_index, &index_lock, COMMIT_LOCK))
|
||||
die("unable to write index file");
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче