From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.5 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, LOCALPART_IN_SUBJECT shortcircuit=no autolearn=no version=3.3.2 X-Original-To: spew@80x24.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 62B1D1FAC8; Sun, 23 Aug 2015 19:32:19 +0000 (UTC) Date: Sun, 23 Aug 2015 19:32:19 +0000 From: Eric Wong To: spew@80x24.org Subject: spew Message-ID: <20150823193219.GA22263@dcvr.yhbt.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline List-Id: diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 5664c38..fdc4a6f 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -21,18 +21,21 @@ sub new { my $dir = $class->xdir($git_dir); require Search::Xapian::WritableDatabase; my $flag = Search::Xapian::DB_OPEN; + my $self = bless { git_dir => $git_dir }, $class; + my $perm = $self->_git_config_perm; + my $umask = _umask_for($perm); + $self->{umask} = $umask; + open(my $fh, '>>', '/tmp/pi-err.log'); + print $fh sprintf("perm: $perm umask %o\n", $umask); + if ($writable == 1) { require File::Path; - File::Path::mkpath($dir); + $self->with_umask(sub { File::Path::mkpath($dir) }); $flag = Search::Xapian::DB_CREATE_OR_OPEN; } - my $self = bless { git_dir => $git_dir }, $class; - my $umask = _umask_for($self->_git_config_perm); - my $old_umask = umask $umask; - my $db = eval { Search::Xapian::WritableDatabase->new($dir, $flag) }; - my $err = $@; - umask $old_umask; - die $err if $err; + my $db = $self->with_umask(sub { + Search::Xapian::WritableDatabase->new($dir, $flag); + }); $self->{xdb} = $db; $self; } @@ -288,9 +291,14 @@ sub do_cat_mail { $@ ? undef : $mime; } -# indexes all unindexed messages sub index_sync { my ($self, $head) = @_; + $self->with_umask(sub { $self->_index_sync($head) }); +} + +# indexes all unindexed messages +sub _index_sync { + my ($self, $head) = @_; require PublicInbox::GitCatFile; my $db = $self->{xdb}; my $hex = '[a-f0-9]'; @@ -423,4 +431,14 @@ sub _umask_for { (~$rv & 0777); } +sub with_umask { + my ($self, $cb) = @_; + my $old = umask $self->{umask}; + my $rv = eval { $cb->() }; + my $err = $@; + umask $old; + die $err if $@; + $rv; +} + 1; diff --git a/public-inbox-mda b/public-inbox-mda index 8e98d6e..15ec890 100755 --- a/public-inbox-mda +++ b/public-inbox-mda @@ -88,7 +88,12 @@ sub do_spamc { sub search_index_sync { my ($git_dir) = @_; eval { - require PublicInbox::Search; + require PublicInbox::SearchIdx; PublicInbox::SearchIdx->new($git_dir, 2)->index_sync; }; + if ($@) { + my $err = $@; + open(my $fh, '>>', '/tmp/pi-err.log'); + print $fh $err; + } }