From: Nguyễn Thái Ngọc Duy Date: Wed, 23 Aug 2017 12:36:52 +0000 (+0700) Subject: revision.c: --indexed-objects add objects from all worktrees X-Git-Tag: v2.15.0-rc0~92^2~12 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=be489d02d2f95b34e8f0fd15b9ec4752a11edd4c;p=git-core%2Fgit.git revision.c: --indexed-objects add objects from all worktrees This is the result of single_worktree flag never being set (no way to up until now). To get objects from current index only, set single_worktree. The other add_index_objects_to_pending's caller is mark_reachable_objects() (e.g. "git prune") which also mark objects from all indexes. Signed-off-by: Nguyễn Thái Ngọc Duy Signed-off-by: Junio C Hamano --- diff --git a/revision.c b/revision.c index 6c46ad6c8..f35cb49af 100644 --- a/revision.c +++ b/revision.c @@ -19,6 +19,7 @@ #include "dir.h" #include "cache-tree.h" #include "bisect.h" +#include "worktree.h" volatile show_early_output_fn_t show_early_output; @@ -1290,8 +1291,28 @@ static void do_add_index_objects_to_pending(struct rev_info *revs, void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags) { + struct worktree **worktrees, **p; + read_cache(); do_add_index_objects_to_pending(revs, &the_index); + + if (revs->single_worktree) + return; + + worktrees = get_worktrees(0); + for (p = worktrees; *p; p++) { + struct worktree *wt = *p; + struct index_state istate = { NULL }; + + if (wt->is_current) + continue; /* current index already taken care of */ + + if (read_index_from(&istate, + worktree_git_path(wt, "index")) > 0) + do_add_index_objects_to_pending(revs, &istate); + discard_index(&istate); + } + free_worktrees(worktrees); } static int add_parents_only(struct rev_info *revs, const char *arg_, int flags, diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh index 133b5842b..cba45c7be 100755 --- a/t/t5304-prune.sh +++ b/t/t5304-prune.sh @@ -283,4 +283,13 @@ test_expect_success 'prune: handle alternate object database' ' git -C B prune ' +test_expect_success 'prune: handle index in multiple worktrees' ' + git worktree add second-worktree && + echo "new blob for second-worktree" >second-worktree/blob && + git -C second-worktree add blob && + git prune --expire=now && + git -C second-worktree show :blob >actual && + test_cmp second-worktree/blob actual +' + test_done