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 <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									6c3d818154
								
							
						
					
					
						commit
						be489d02d2
					
				
							
								
								
									
										21
									
								
								revision.c
								
								
								
								
							
							
						
						
									
										21
									
								
								revision.c
								
								
								
								
							|  | @ -19,6 +19,7 @@ | ||||||
| #include "dir.h" | #include "dir.h" | ||||||
| #include "cache-tree.h" | #include "cache-tree.h" | ||||||
| #include "bisect.h" | #include "bisect.h" | ||||||
|  | #include "worktree.h" | ||||||
|  |  | ||||||
| volatile show_early_output_fn_t show_early_output; | 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) | void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags) | ||||||
| { | { | ||||||
|  | 	struct worktree **worktrees, **p; | ||||||
|  |  | ||||||
| 	read_cache(); | 	read_cache(); | ||||||
| 	do_add_index_objects_to_pending(revs, &the_index); | 	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, | static int add_parents_only(struct rev_info *revs, const char *arg_, int flags, | ||||||
|  |  | ||||||
|  | @ -283,4 +283,13 @@ test_expect_success 'prune: handle alternate object database' ' | ||||||
| 	git -C B prune | 	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 | test_done | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Nguyễn Thái Ngọc Duy
						Nguyễn Thái Ngọc Duy