1
0
mirror of https://github.com/git/git.git synced 2024-10-19 12:58:13 +02:00

Merge branch 'js/bundle-tags'

* js/bundle-tags:
  bundle: allow rev-list options to exclude annotated tags
This commit is contained in:
Junio C Hamano 2009-01-13 23:09:50 -08:00
commit 9735a44440
2 changed files with 65 additions and 0 deletions

@ -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

@ -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