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]); | 		return error("unrecognized argument: %s'", argv[i]); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	object_array_remove_duplicates(&revs.pending); | ||||||
|  |  | ||||||
| 	for (i = 0; i < revs.pending.nr; i++) { | 	for (i = 0; i < revs.pending.nr; i++) { | ||||||
| 		struct object_array_entry *e = revs.pending.objects + i; | 		struct object_array_entry *e = revs.pending.objects + i; | ||||||
| 		unsigned char sha1[20]; | 		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; | 	objects[nr].mode = mode; | ||||||
| 	array->nr = ++nr; | 	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 .. */ | /* Object array handling .. */ | ||||||
| void add_object_array(struct object *obj, const char *name, struct object_array *array); | 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 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 */ | #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")) { | 			if (!strcmp(arg, "--all")) { | ||||||
| 				handle_refs(revs, flags, for_each_ref); | 				handle_refs(revs, flags, for_each_ref); | ||||||
|  | 				handle_refs(revs, flags, head_ref); | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| 			if (!strcmp(arg, "--branches")) { | 			if (!strcmp(arg, "--branches")) { | ||||||
|  | |||||||
| @ -11,8 +11,8 @@ test_expect_success 'preparing origin repository' ' | |||||||
| 	git clone --bare . x && | 	git clone --bare . x && | ||||||
| 	test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true && | 	test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true && | ||||||
| 	test "$(GIT_CONFIG=x/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 b1.bundle --all && | ||||||
| 	git bundle create b2.bundle --all && | 	git bundle create b2.bundle master && | ||||||
| 	mkdir dir && | 	mkdir dir && | ||||||
| 	cp b1.bundle dir/b3 | 	cp b1.bundle dir/b3 | ||||||
| 	cp b1.bundle b4 | 	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