X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiMailSync.pm;h=2e74e433d09cd1f7506f876607bc44ca54d88dd4;hb=40f3f2a2c805fc37c7ed35a60948856bd962b493;hp=2ce189fa46cf9075fba373b2353567b7150ab7d7;hpb=4481b372ba150c669b2fefe2d6ec5dccb5da1d40;p=public-inbox.git diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm index 2ce189fa..2e74e433 100644 --- a/lib/PublicInbox/LeiMailSync.pm +++ b/lib/PublicInbox/LeiMailSync.pm @@ -6,6 +6,7 @@ package PublicInbox::LeiMailSync; use strict; use v5.10.1; use DBI; +use PublicInbox::ContentHash qw(git_sha); sub dbh_new { my ($self, $rw) = @_; @@ -208,4 +209,30 @@ sub folders { map { $_->[0] } @{$dbh->selectall_arrayref($sql, undef, @pfx)}; } +sub local_blob { + my ($self, $oidhex, $vrfy) = @_; + my $dbh = $self->{dbh} //= dbh_new($self); + my $b2n = $dbh->prepare(<<''); +SELECT f.loc,b.name FROM blob2name b +LEFT JOIN folders f ON b.fid = f.fid +WHERE b.oidbin = ? + + $b2n->execute(pack('H*', $oidhex)); + while (my ($d, $n) = $b2n->fetchrow_array) { + substr($d, 0, length('maildir:')) = ''; + my $f = "$d/" . ($n =~ /:2,[a-zA-Z]*\z/ ? "cur/$n" : "new/$n"); + open my $fh, '<', $f or next; + if (-s $fh) { + local $/; + my $raw = <$fh>; + if ($vrfy && git_sha(1, \$raw)->hexdigest ne $oidhex) { + warn "$f changed $oidhex\n"; + next; + } + return \$raw; + } + } + undef; +} + 1;