diff options
author | Eric Wong <e@80x24.org> | 2019-04-17 10:49:15 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2019-04-18 06:07:24 +0000 |
commit | 7973bc101755b13a1381579c5ee60a716da6ffe1 (patch) | |
tree | ce11296f73d80e27726e012bcc1dabed53059532 | |
parent | ca5467dff19e404f7b2d263ce32357edbda1f795 (diff) | |
download | public-inbox-7973bc101755b13a1381579c5ee60a716da6ffe1.tar.gz |
This will be used for generating an HTML listing for v1 inboxes, at least. The logic for this follows that of grokmirror, and we may dynamically generate manifest.js.gz natively...
-rw-r--r-- | lib/PublicInbox/Git.pm | 18 | ||||
-rw-r--r-- | t/git.fast-import-data | 2 | ||||
-rw-r--r-- | t/git.t | 5 |
3 files changed, 24 insertions, 1 deletions
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index 8a96e10c..236f70c1 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -312,6 +312,24 @@ sub commit_title ($$) { ($$buf =~ /\r?\n\r?\n([^\r\n]+)\r?\n?/)[0] } +# returns the modified time of a git repo, same as the "modified" field +# of a grokmirror manifest +sub modified ($) { + my ($self) = @_; + my $modified = 0; + my $fh = popen($self, qw(rev-parse --branches)); + defined $fh or return $modified; + local $/ = "\n"; + foreach my $oid (<$fh>) { + chomp $oid; + my $buf = cat_file($self, $oid) or next; + $$buf =~ /^committer .*?> (\d+) [\+\-]?\d+/sm or next; + my $cmt_time = $1; + $modified = $cmt_time if $cmt_time > $modified; + } + $modified || time; +} + 1; __END__ =pod diff --git a/t/git.fast-import-data b/t/git.fast-import-data index 4a105ee7..6d5159dd 100644 --- a/t/git.fast-import-data +++ b/t/git.fast-import-data @@ -90,7 +90,7 @@ data 78 commit refs/heads/master mark :13 author AU Thor <e@example.com> 0 +0000 -committer AU Thor <e@example.com> 0 +0000 +committer AU Thor <e@example.com> 749520000 +0000 data 18 add git submodule from :11 @@ -23,6 +23,7 @@ use_ok 'PublicInbox::Git'; { my $gcf = PublicInbox::Git->new($dir); + is($gcf->modified, 749520000, 'modified time detected from commit'); my $f = 'HEAD:foo.txt'; my @x = $gcf->check($f); is(scalar @x, 3, 'returned 3 element array for existing file'); @@ -146,6 +147,10 @@ if ('alternates reloaded') { ok($gcf->cleanup(time - 30), 'cleanup did not expire'); ok(!$gcf->cleanup(time + 30), 'cleanup can expire'); ok(!$gcf->cleanup, 'cleanup idempotent'); + + my $t = $gcf->modified; + ok($t <= time, 'repo not modified in the future'); + isnt($t, 0, 'repo not modified in 1970') } use_ok 'PublicInbox::Git', qw(git_unquote git_quote); |