bundle: allow the same ref to be given more than once
"git bundle create x master master" used to create a bundle that lists the same branch (master) twice. Cloning from such a bundle resulted in a needless warning "warning: Duplicated ref: refs/remotes/origin/master". Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f0298cf1c6
commit
b2a6d1c686
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
@ -71,5 +71,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 */
|
||||||
|
@ -11,7 +11,7 @@ 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 master HEAD &&
|
git bundle create b1.bundle --all &&
|
||||||
git bundle create b2.bundle master &&
|
git bundle create b2.bundle master &&
|
||||||
mkdir dir &&
|
mkdir dir &&
|
||||||
cp b1.bundle dir/b3
|
cp b1.bundle dir/b3
|
||||||
|
Loading…
Reference in New Issue
Block a user