Skip to content

Commit

Permalink
bundle: allow the same ref to be given more than once
Browse files Browse the repository at this point in the history
"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>
  • Loading branch information
gitster committed Jan 18, 2009
1 parent f0298cf commit b2a6d1c
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 1 deletion.
2 changes: 2 additions & 0 deletions bundle.c
Expand Up @@ -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];
Expand Down
19 changes: 19 additions & 0 deletions object.c
Expand Up @@ -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 change: 1 addition & 0 deletions object.h
Expand Up @@ -71,5 +71,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 */
2 changes: 1 addition & 1 deletion t/t5701-clone-local.sh
Expand Up @@ -11,7 +11,7 @@ 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 master HEAD &&
git bundle create b1.bundle --all &&
git bundle create b2.bundle master &&
mkdir dir &&
cp b1.bundle dir/b3
Expand Down

0 comments on commit b2a6d1c

Please sign in to comment.