apply.c: remove implicit dependency on the_index
Use apply_state->repo->index instead of the_index (in most cases, unless we need to use a temporary index in some functions). Let the callers (am and apply) tell us what to use, instead of always assuming to operate on the_index. 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:
parent
82ea77eca7
commit
1b5c6c1e53
46
apply.c
46
apply.c
@ -3385,7 +3385,8 @@ static int verify_index_match(struct apply_state *state,
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
return ce_match_stat(ce, st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE);
|
||||
return ie_match_stat(state->repo->index, ce, st,
|
||||
CE_MATCH_IGNORE_VALID | CE_MATCH_IGNORE_SKIP_WORKTREE);
|
||||
}
|
||||
|
||||
#define SUBMODULE_PATCH_WITHOUT_INDEX 1
|
||||
@ -3518,14 +3519,14 @@ static int load_current(struct apply_state *state,
|
||||
if (!patch->is_new)
|
||||
BUG("patch to %s is not a creation", patch->old_name);
|
||||
|
||||
pos = cache_name_pos(name, strlen(name));
|
||||
pos = index_name_pos(state->repo->index, name, strlen(name));
|
||||
if (pos < 0)
|
||||
return error(_("%s: does not exist in index"), name);
|
||||
ce = active_cache[pos];
|
||||
ce = state->repo->index->cache[pos];
|
||||
if (lstat(name, &st)) {
|
||||
if (errno != ENOENT)
|
||||
return error_errno("%s", name);
|
||||
if (checkout_target(&the_index, ce, &st))
|
||||
if (checkout_target(state->repo->index, ce, &st))
|
||||
return -1;
|
||||
}
|
||||
if (verify_index_match(state, ce, &st))
|
||||
@ -3687,15 +3688,16 @@ static int check_preimage(struct apply_state *state,
|
||||
}
|
||||
|
||||
if (state->check_index && !previous) {
|
||||
int pos = cache_name_pos(old_name, strlen(old_name));
|
||||
int pos = index_name_pos(state->repo->index, old_name,
|
||||
strlen(old_name));
|
||||
if (pos < 0) {
|
||||
if (patch->is_new < 0)
|
||||
goto is_new;
|
||||
return error(_("%s: does not exist in index"), old_name);
|
||||
}
|
||||
*ce = active_cache[pos];
|
||||
*ce = state->repo->index->cache[pos];
|
||||
if (stat_ret < 0) {
|
||||
if (checkout_target(&the_index, *ce, st))
|
||||
if (checkout_target(state->repo->index, *ce, st))
|
||||
return -1;
|
||||
}
|
||||
if (!state->cached && verify_index_match(state, *ce, st))
|
||||
@ -3742,7 +3744,7 @@ static int check_to_create(struct apply_state *state,
|
||||
struct stat nst;
|
||||
|
||||
if (state->check_index &&
|
||||
cache_name_pos(new_name, strlen(new_name)) >= 0 &&
|
||||
index_name_pos(state->repo->index, new_name, strlen(new_name)) >= 0 &&
|
||||
!ok_if_exists)
|
||||
return EXISTS_IN_INDEX;
|
||||
if (state->cached)
|
||||
@ -3831,7 +3833,8 @@ static int path_is_beyond_symlink_1(struct apply_state *state, struct strbuf *na
|
||||
if (state->check_index) {
|
||||
struct cache_entry *ce;
|
||||
|
||||
ce = cache_file_exists(name->buf, name->len, ignore_case);
|
||||
ce = index_file_exists(state->repo->index, name->buf,
|
||||
name->len, ignore_case);
|
||||
if (ce && S_ISLNK(ce->ce_mode))
|
||||
return 1;
|
||||
} else {
|
||||
@ -4006,9 +4009,10 @@ static int check_patch_list(struct apply_state *state, struct patch *patch)
|
||||
static int read_apply_cache(struct apply_state *state)
|
||||
{
|
||||
if (state->index_file)
|
||||
return read_cache_from(state->index_file);
|
||||
return read_index_from(state->repo->index, state->index_file,
|
||||
get_git_dir());
|
||||
else
|
||||
return read_cache();
|
||||
return read_index(state->repo->index);
|
||||
}
|
||||
|
||||
/* This function tries to read the object name from the current index */
|
||||
@ -4019,10 +4023,10 @@ static int get_current_oid(struct apply_state *state, const char *path,
|
||||
|
||||
if (read_apply_cache(state) < 0)
|
||||
return -1;
|
||||
pos = cache_name_pos(path, strlen(path));
|
||||
pos = index_name_pos(state->repo->index, path, strlen(path));
|
||||
if (pos < 0)
|
||||
return -1;
|
||||
oidcpy(oid, &active_cache[pos]->oid);
|
||||
oidcpy(oid, &state->repo->index->cache[pos]->oid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -4250,7 +4254,7 @@ static void patch_stats(struct apply_state *state, struct patch *patch)
|
||||
static int remove_file(struct apply_state *state, struct patch *patch, int rmdir_empty)
|
||||
{
|
||||
if (state->update_index && !state->ita_only) {
|
||||
if (remove_file_from_cache(patch->old_name) < 0)
|
||||
if (remove_file_from_index(state->repo->index, patch->old_name) < 0)
|
||||
return error(_("unable to remove %s from index"), patch->old_name);
|
||||
}
|
||||
if (!state->cached) {
|
||||
@ -4271,7 +4275,7 @@ static int add_index_file(struct apply_state *state,
|
||||
struct cache_entry *ce;
|
||||
int namelen = strlen(path);
|
||||
|
||||
ce = make_empty_cache_entry(&the_index, namelen);
|
||||
ce = make_empty_cache_entry(state->repo->index, namelen);
|
||||
memcpy(ce->name, path, namelen);
|
||||
ce->ce_mode = create_ce_mode(mode);
|
||||
ce->ce_flags = create_ce_flags(0);
|
||||
@ -4303,7 +4307,7 @@ static int add_index_file(struct apply_state *state,
|
||||
"for newly created file %s"), path);
|
||||
}
|
||||
}
|
||||
if (add_cache_entry(ce, ADD_CACHE_OK_TO_ADD) < 0) {
|
||||
if (add_index_entry(state->repo->index, ce, ADD_CACHE_OK_TO_ADD) < 0) {
|
||||
discard_cache_entry(ce);
|
||||
return error(_("unable to add cache entry for %s"), path);
|
||||
}
|
||||
@ -4341,7 +4345,7 @@ static int try_create_file(struct apply_state *state, const char *path,
|
||||
if (fd < 0)
|
||||
return 1;
|
||||
|
||||
if (convert_to_working_tree(&the_index, path, buf, size, &nbuf)) {
|
||||
if (convert_to_working_tree(state->repo->index, path, buf, size, &nbuf)) {
|
||||
size = nbuf.len;
|
||||
buf = nbuf.buf;
|
||||
}
|
||||
@ -4438,17 +4442,17 @@ static int add_conflicted_stages_file(struct apply_state *state,
|
||||
namelen = strlen(patch->new_name);
|
||||
mode = patch->new_mode ? patch->new_mode : (S_IFREG | 0644);
|
||||
|
||||
remove_file_from_cache(patch->new_name);
|
||||
remove_file_from_index(state->repo->index, patch->new_name);
|
||||
for (stage = 1; stage < 4; stage++) {
|
||||
if (is_null_oid(&patch->threeway_stage[stage - 1]))
|
||||
continue;
|
||||
ce = make_empty_cache_entry(&the_index, namelen);
|
||||
ce = make_empty_cache_entry(state->repo->index, namelen);
|
||||
memcpy(ce->name, patch->new_name, namelen);
|
||||
ce->ce_mode = create_ce_mode(mode);
|
||||
ce->ce_flags = create_ce_flags(stage);
|
||||
ce->ce_namelen = namelen;
|
||||
oidcpy(&ce->oid, &patch->threeway_stage[stage - 1]);
|
||||
if (add_cache_entry(ce, ADD_CACHE_OK_TO_ADD) < 0) {
|
||||
if (add_index_entry(state->repo->index, ce, ADD_CACHE_OK_TO_ADD) < 0) {
|
||||
discard_cache_entry(ce);
|
||||
return error(_("unable to add cache entry for %s"),
|
||||
patch->new_name);
|
||||
@ -4897,7 +4901,7 @@ int apply_all_patches(struct apply_state *state,
|
||||
}
|
||||
|
||||
if (state->update_index) {
|
||||
res = write_locked_index(&the_index, &state->lock_file, COMMIT_LOCK);
|
||||
res = write_locked_index(state->repo->index, &state->lock_file, COMMIT_LOCK);
|
||||
if (res) {
|
||||
error(_("Unable to write new index file"));
|
||||
res = -128;
|
||||
|
Loading…
Reference in New Issue
Block a user