mirror of
https://github.com/git/git.git
synced 2025-03-22 13:36:39 +00:00
Merge branch 'js/bundle-tags'
* js/bundle-tags: bundle: allow rev-list options to exclude annotated tags
This commit is contained in:
commit
9735a44440
32
bundle.c
32
bundle.c
@ -167,6 +167,32 @@ int list_bundle_refs(struct bundle_header *header, int argc, const char **argv)
|
||||
return list_refs(&header->references, argc, argv);
|
||||
}
|
||||
|
||||
static int is_tag_in_date_range(struct object *tag, struct rev_info *revs)
|
||||
{
|
||||
unsigned long size;
|
||||
enum object_type type;
|
||||
char *buf, *line, *lineend;
|
||||
unsigned long date;
|
||||
|
||||
if (revs->max_age == -1 && revs->min_age == -1)
|
||||
return 1;
|
||||
|
||||
buf = read_sha1_file(tag->sha1, &type, &size);
|
||||
if (!buf)
|
||||
return 1;
|
||||
line = memmem(buf, size, "\ntagger ", 8);
|
||||
if (!line++)
|
||||
return 1;
|
||||
lineend = memchr(line, buf + size - line, '\n');
|
||||
line = memchr(line, lineend ? lineend - line : buf + size - line, '>');
|
||||
if (!line++)
|
||||
return 1;
|
||||
date = strtoul(line, NULL, 10);
|
||||
free(buf);
|
||||
return (revs->max_age == -1 || revs->max_age < date) &&
|
||||
(revs->min_age == -1 || revs->min_age > date);
|
||||
}
|
||||
|
||||
int create_bundle(struct bundle_header *header, const char *path,
|
||||
int argc, const char **argv)
|
||||
{
|
||||
@ -255,6 +281,12 @@ int create_bundle(struct bundle_header *header, const char *path,
|
||||
flag = 0;
|
||||
display_ref = (flag & REF_ISSYMREF) ? e->name : ref;
|
||||
|
||||
if (e->item->type == OBJ_TAG &&
|
||||
!is_tag_in_date_range(e->item, &revs)) {
|
||||
e->item->flags |= UNINTERESTING;
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure the refs we wrote out is correct; --max-count and
|
||||
* other limiting options could have prevented all the tips
|
||||
|
33
t/t5704-bundle.sh
Executable file
33
t/t5704-bundle.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='some bundle related tests'
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'setup' '
|
||||
|
||||
: > file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m initial &&
|
||||
test_tick &&
|
||||
git tag -m tag tag &&
|
||||
: > file2 &&
|
||||
git add file2 &&
|
||||
: > file3 &&
|
||||
test_tick &&
|
||||
git commit -m second &&
|
||||
git add file3 &&
|
||||
test_tick &&
|
||||
git commit -m third
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'tags can be excluded by rev-list options' '
|
||||
|
||||
git bundle create bundle --all --since=7.Apr.2005.15:16:00.-0700 &&
|
||||
git ls-remote bundle > output &&
|
||||
! grep tag output
|
||||
|
||||
'
|
||||
|
||||
test_done
|
Loading…
x
Reference in New Issue
Block a user