in_merge_bases(): omit unnecessary redundant common ancestor reduction
The function get_merge_bases() needs to postprocess the result from merge_bases_many() in order to make sure none of the commit is a true ancestor of another commit, which is expensive. However, when checking if a commit is an ancestor of another commit, we only need to see if the commit is a common ancestor between the two, and do not have to care if other common ancestors merge_bases_many() finds are true merge bases or an ancestor of another merge base. Signed-off-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		 Thomas Rast
					Thomas Rast
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							6571225137
						
					
				
				
					commit
					b0f9e9eeef
				
			
							
								
								
									
										5
									
								
								commit.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								commit.c
									
									
									
									
									
								
							| @ -780,7 +780,10 @@ int in_merge_bases(struct commit *commit, struct commit *reference) | ||||
| 	struct commit_list *bases, *b; | ||||
| 	int ret = 0; | ||||
|  | ||||
| 	bases = get_merge_bases(commit, reference, 1); | ||||
| 	bases = merge_bases_many(commit, 1, &reference); | ||||
| 	clear_commit_marks(commit, all_flags); | ||||
| 	clear_commit_marks(reference, all_flags); | ||||
|  | ||||
| 	for (b = bases; b; b = b->next) { | ||||
| 		if (!hashcmp(commit->object.sha1, b->item->object.sha1)) { | ||||
| 			ret = 1; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user