[prev in list] [next in list] [prev in thread] [next in thread]
List: git
Subject: [PATCH v2 2/6] stash: remove the second index in stash_working_tree()
From: Alban Gruin <alban.gruin () gmail ! com>
Date: 2020-06-30 15:15:54
Message-ID: 20200630151558.20975-3-alban.gruin () gmail ! com
[Download RAW message or body]
This removes the second index used in stash_working_tree() to simplify
the code.
The calls to set_alternative_index_output() are dropped to extract
`i_tree' to the main index, and `GIT_INDEX_FILE' is no longer set before
starting `update-index'. When it exits, the index has changed, and must
be discarded.
With this commit, reset_tree() does not need to be called at the
beginning of stash_working_tree(), because it is only called by
do_create_stash(), which sets the index at `i_tree', and
save_untracked_files() does not change the main index. But it will
become useful again in a later commit, when save_untracked_file() will
be rewritten to use the "main" index, so I did not remove it.
At the end of the function, the tree is reset to `i_tree'.
Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
---
builtin/stash.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/builtin/stash.c b/builtin/stash.c
index 9baa8b379e..2535335275 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -1059,17 +1059,14 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps
struct rev_info rev;
struct child_process cp_upd_index = CHILD_PROCESS_INIT;
struct strbuf diff_output = STRBUF_INIT;
- struct index_state istate = { NULL };
init_revisions(&rev, NULL);
copy_pathspec(&rev.prune_data, ps);
- set_alternate_index_output(stash_index_path.buf);
if (reset_tree(&info->i_tree, 0, 0)) {
ret = -1;
goto done;
}
- set_alternate_index_output(NULL);
rev.diffopt.output_format = DIFF_FORMAT_CALLBACK;
rev.diffopt.format_callback = add_diff_to_buf;
@@ -1091,8 +1088,6 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps
argv_array_pushl(&cp_upd_index.args, "update-index",
"--ignore-skip-worktree-entries",
"-z", "--add", "--remove", "--stdin", NULL);
- argv_array_pushf(&cp_upd_index.env_array, "GIT_INDEX_FILE=%s",
- stash_index_path.buf);
if (pipe_command(&cp_upd_index, diff_output.buf, diff_output.len,
NULL, 0, NULL, 0)) {
@@ -1100,19 +1095,16 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps
goto done;
}
- if (write_index_as_tree(&info->w_tree, &istate, stash_index_path.buf, 0,
- NULL)) {
+ discard_cache();
+ if (write_cache_as_tree(&info->w_tree, 0, NULL) ||
+ reset_tree(&info->i_tree, 0, 1))
ret = -1;
- goto done;
- }
done:
- discard_index(&istate);
UNLEAK(rev);
object_array_clear(&rev.pending);
clear_pathspec(&rev.prune_data);
strbuf_release(&diff_output);
- remove_path(stash_index_path.buf);
return ret;
}
--
2.20.1
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic