mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
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:
commit
8abc61880d
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
|
Loading…
Reference in New Issue
Block a user