From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 5185E20248 for ; Wed, 17 Apr 2019 11:39:46 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] git: calculate modified time of repository Date: Wed, 17 Apr 2019 11:39:46 +0000 Message-Id: <20190417113946.2363-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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... --- lib/PublicInbox/Git.pm | 18 ++++++++++++++++++ t/git.fast-import-data | 2 +- t/git.t | 5 +++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index 8a96e10..236f70c 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -312,6 +312,24 @@ ($$) ($$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 4a105ee..6d5159d 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 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 d637e63..5b612b8 100644 --- a/t/git.t +++ b/t/git.t @@ -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); -- EW