Merge branch 'js/maint-all-implies-HEAD' into maint
* js/maint-all-implies-HEAD: bundle: allow the same ref to be given more than once revision walker: include a detached HEAD in --all
This commit is contained in:
		
							
								
								
									
										2
									
								
								bundle.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								bundle.c
									
									
									
									
									
								
							| @ -240,6 +240,8 @@ int create_bundle(struct bundle_header *header, const char *path, | ||||
| 		return error("unrecognized argument: %s'", argv[i]); | ||||
| 	} | ||||
|  | ||||
| 	object_array_remove_duplicates(&revs.pending); | ||||
|  | ||||
| 	for (i = 0; i < revs.pending.nr; i++) { | ||||
| 		struct object_array_entry *e = revs.pending.objects + i; | ||||
| 		unsigned char sha1[20]; | ||||
|  | ||||
							
								
								
									
										19
									
								
								object.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								object.c
									
									
									
									
									
								
							| @ -268,3 +268,22 @@ void add_object_array_with_mode(struct object *obj, const char *name, struct obj | ||||
| 	objects[nr].mode = mode; | ||||
| 	array->nr = ++nr; | ||||
| } | ||||
|  | ||||
| void object_array_remove_duplicates(struct object_array *array) | ||||
| { | ||||
| 	int ref, src, dst; | ||||
| 	struct object_array_entry *objects = array->objects; | ||||
|  | ||||
| 	for (ref = 0; ref < array->nr - 1; ref++) { | ||||
| 		for (src = ref + 1, dst = src; | ||||
| 		     src < array->nr; | ||||
| 		     src++) { | ||||
| 			if (!strcmp(objects[ref].name, objects[src].name)) | ||||
| 				continue; | ||||
| 			if (src != dst) | ||||
| 				objects[dst] = objects[src]; | ||||
| 			dst++; | ||||
| 		} | ||||
| 		array->nr = dst; | ||||
| 	} | ||||
| } | ||||
|  | ||||
							
								
								
									
										1
									
								
								object.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								object.h
									
									
									
									
									
								
							| @ -82,5 +82,6 @@ int object_list_contains(struct object_list *list, struct object *obj); | ||||
| /* Object array handling .. */ | ||||
| void add_object_array(struct object *obj, const char *name, struct object_array *array); | ||||
| void add_object_array_with_mode(struct object *obj, const char *name, struct object_array *array, unsigned mode); | ||||
| void object_array_remove_duplicates(struct object_array *); | ||||
|  | ||||
| #endif /* OBJECT_H */ | ||||
|  | ||||
| @ -1263,6 +1263,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch | ||||
|  | ||||
| 			if (!strcmp(arg, "--all")) { | ||||
| 				handle_refs(revs, flags, for_each_ref); | ||||
| 				handle_refs(revs, flags, head_ref); | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (!strcmp(arg, "--branches")) { | ||||
|  | ||||
| @ -11,8 +11,8 @@ test_expect_success 'preparing origin repository' ' | ||||
| 	git clone --bare . x && | ||||
| 	test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true && | ||||
| 	test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true | ||||
| 	git bundle create b1.bundle --all HEAD && | ||||
| 	git bundle create b2.bundle --all && | ||||
| 	git bundle create b1.bundle --all && | ||||
| 	git bundle create b2.bundle master && | ||||
| 	mkdir dir && | ||||
| 	cp b1.bundle dir/b3 | ||||
| 	cp b1.bundle b4 | ||||
|  | ||||
							
								
								
									
										38
									
								
								t/t6014-rev-list-all.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								t/t6014-rev-list-all.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,38 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| test_description='--all includes detached HEADs' | ||||
|  | ||||
| . ./test-lib.sh | ||||
|  | ||||
|  | ||||
| commit () { | ||||
| 	test_tick && | ||||
| 	echo $1 > foo && | ||||
| 	git add foo && | ||||
| 	git commit -m "$1" | ||||
| } | ||||
|  | ||||
| test_expect_success 'setup' ' | ||||
|  | ||||
| 	commit one && | ||||
| 	commit two && | ||||
| 	git checkout HEAD^ && | ||||
| 	commit detached | ||||
|  | ||||
| ' | ||||
|  | ||||
| test_expect_success 'rev-list --all lists detached HEAD' ' | ||||
|  | ||||
| 	test 3 = $(git rev-list --all | wc -l) | ||||
|  | ||||
| ' | ||||
|  | ||||
| test_expect_success 'repack does not lose detached HEAD' ' | ||||
|  | ||||
| 	git gc && | ||||
| 	git prune --expire=now && | ||||
| 	git show HEAD | ||||
|  | ||||
| ' | ||||
|  | ||||
| test_done | ||||
		Reference in New Issue
	
	Block a user
	 Junio C Hamano
					Junio C Hamano