On Tue, May 5, 2020 at 12:56 PM Alban Gruin <alban.gruin@xxxxxxxxx> wrote: > > This removes the second index used in stash_patch(). > > This function starts by resetting the index (which is set at `i_tree') > to HEAD, which has been stored in `b_commit' by do_create_stash(), and > the call to `read-tree' is replaced by reset_tree(). The index is > discarded after run_add_interactive(), but not `diff-tree' as this > command should not change it. > > Since the index has been changed, and subsequent code might be sensitive > to this, it is reset to `i_tree' at the end of the function. [...] > /* State of the working tree. */ > - if (write_index_as_tree(&info->w_tree, &istate, stash_index_path.buf, 0, > - NULL)) { > - ret = -1; > - goto done; > - } > + discard_cache(); > + if (write_cache_as_tree(&info->w_tree, 0, NULL)) > + return -1; In the previous patch you use the following: + if (write_cache_as_tree(&info->w_tree, 0, NULL) || + reset_tree(&info->i_tree, 0, 1)) Here the reset_tree(&info->i_tree, 0, 1) call is in the "done:" part of the code. Is there a reason for that? Can't reset_tree(&info->i_tree, 0, 1) be tried here before returning an error? Or was the previous patch wrong? I guess the reason why the reset_tree(&info->i_tree, 0, 1) call here is in the "done:" part of the call is because it should be after the diff tree command is launched. I see that the commit message tries to explain this a bit, but it is still not very clear to me.