Skip to content

Commit

Permalink
Merge branch 'js/bundle-tags'
Browse files Browse the repository at this point in the history
* js/bundle-tags:
  bundle: allow rev-list options to exclude annotated tags
  • Loading branch information
Junio C Hamano committed Jan 14, 2009
2 parents 132d04b + c9a42c4 commit 9735a44
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
32 changes: 32 additions & 0 deletions bundle.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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
Expand Down
33 changes: 33 additions & 0 deletions t/t5704-bundle.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 9735a44

Please sign in to comment.