From: Junio C Hamano Date: Mon, 08 Sep 2014 17:37:37 GMT Subject: Re: [PATCH v3 2/8] merge-recursive: internal flag to avoid touching the worktree Message-ID: In-Reply-To: <5bd5960659d85943477d2a5fbca3dd5ccd0da686.1409860234.git.tr@thomasrast.ch> Thomas Rast writes: > From: Thomas Rast > > o->call_depth has a double function: a nonzero call_depth means we > want to construct virtual merge bases, but it also means we want to > avoid touching the worktree. Introduce a new flag o->no_worktree to > trigger only the latter. > > Signed-off-by: Thomas Rast > Signed-off-by: Junio C Hamano > --- I notice that many hits from $ git grep -e '->call_depth' --and --not -e '->no_worktree' are about how the progress is reported during recursive operations or setting up ll_opts suitable for ancestor merges (both of which are perfectly fine not to pay any attention to no_worktree), but some others look iffy. For example, function remove_file() decides to update the in-core index only when call_depth is set (i.e. we are doing a virtual parent) or clean (clean merge at the content level, i.e. "both removed"), and decides to update the working tree only at the top-level of the recursion and no_wd is passed. - As to "update_cache", if you do not update it while you are operating in the cache-only mode (aka ->no_worktree), I wonder where the result goes. Shouldn't it be done for in-core merge as well? - As to "update_working_tree", there are few places where the function is called with no_wd that is not true, even when ->no_worktree is set. Do you want to allow working tree to be modified in such a call?