lib/PublicInbox/Git.pm | 18 ++++++++++++++++++ t/git.fast-import-data | 2 +- t/git.t | 5 +++++ diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index 8a96e10c1139be7d4d1b44e959e1ea9e3d676f38..236f70c165af6a275ab0898486cb7992700bae09 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -312,6 +312,24 @@ utf8::decode($$buf); ($$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 4a105ee74a9bda233e40f51bce29c84f1f9de3b5..6d5159dda473c9b436d7b34f47e3b66396783faf 100644 --- a/t/git.fast-import-data +++ b/t/git.fast-import-data @@ -90,7 +90,7 @@ commit refs/heads/master mark :13 author AU Thor 0 +0000 -committer AU Thor 0 +0000 +committer AU Thor 749520000 +0000 data 18 add git submodule from :11 diff --git a/t/git.t b/t/git.t index d637e63ba8d49381941431e4966d3abd5d125823..5b612b8e42d9cab7792e84774579b55cbbd8615d 100644 --- a/t/git.t +++ b/t/git.t @@ -23,6 +23,7 @@ } { 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 @@ 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);