]> Sergey Matveev's repositories - public-inbox.git/commitdiff
inboxwritable: delay umask_prepare calls
authorEric Wong <e@80x24.org>
Thu, 24 Dec 2020 10:09:18 +0000 (10:09 +0000)
committerEric Wong <e@80x24.org>
Fri, 25 Dec 2020 08:56:48 +0000 (08:56 +0000)
This simplifies all ->with_umask callers and opens the
door for further optimizations to delay/elide process spawning.

lib/PublicInbox/ExtSearchIdx.pm
lib/PublicInbox/InboxWritable.pm
lib/PublicInbox/SearchIdx.pm
lib/PublicInbox/V2Writable.pm
lib/PublicInbox/Xapcmd.pm
script/public-inbox-convert

index fb62708934efc95de249fe1e6fc6a7517c4f7f83..c43a6c5e9fdca46342d5306ed48c14d95d309a0e 100644 (file)
@@ -934,7 +934,6 @@ sub idx_init { # similar to V2Writable
                PublicInbox::V2Writable::write_alternates($info_dir, $mode, $o);
        }
        $self->parallel_init($self->{indexlevel});
-       $self->umask_prepare;
        $self->with_umask(\&_idx_init, $self, $opt);
        $self->{oidx}->begin_lazy;
        $self->{oidx}->eidx_prep;
@@ -943,7 +942,6 @@ sub idx_init { # similar to V2Writable
 
 no warnings 'once';
 *done = \&PublicInbox::V2Writable::done;
-*umask_prepare = \&PublicInbox::InboxWritable::umask_prepare;
 *with_umask = \&PublicInbox::InboxWritable::with_umask;
 *parallel_init = \&PublicInbox::V2Writable::parallel_init;
 *nproc_shards = \&PublicInbox::V2Writable::nproc_shards;
index 69275bb04a54b9c476089b2f27e1a47bbb561385..31eb3f15a94821e6725cbc8816c73b9066b37f4e 100644 (file)
@@ -65,7 +65,6 @@ sub init_inbox {
        if ($self->version == 1) {
                my $dir = assert_usable_dir($self);
                PublicInbox::Import::init_bare($dir);
-               $self->umask_prepare;
                $self->with_umask(\&_init_v1, $self, $skip_artnum);
        } else {
                my $v2w = importer($self);
@@ -260,7 +259,7 @@ sub _umask_for {
 
 sub with_umask {
        my ($self, $cb, @arg) = @_;
-       my $old = umask $self->{umask};
+       my $old = umask($self->{umask} //= umask_prepare($self));
        my $rv = eval { $cb->(@arg) };
        my $err = $@;
        umask $old;
@@ -271,8 +270,7 @@ sub with_umask {
 sub umask_prepare {
        my ($self) = @_;
        my $perm = _git_config_perm($self);
-       my $umask = _umask_for($perm);
-       $self->{umask} = $umask;
+       _umask_for($perm);
 }
 
 sub cleanup ($) {
index d1b0c724461271724f673d67e4bfa830a8034b08..c8e309fc445622ee53ac30dce2c5d394cefc8f07 100644 (file)
@@ -67,7 +67,6 @@ sub new {
                $self->{-set_skip_docdata_once} = 1;
                $self->{-skip_docdata} = 1;
        }
-       $ibx->umask_prepare;
        if ($version == 1) {
                $self->{lock_path} = "$inboxdir/ssoma.lock";
                my $dir = $self->xdir;
index 3e3b275f995f44e6a1403bdc382e71cbae213451..531a72b28abd5d8bb101839662c352d27fa3d548 100644 (file)
@@ -97,8 +97,6 @@ sub new {
                        die "$dir does not exist\n";
                }
        }
-       $v2ibx->umask_prepare;
-
        my $xpfx = "$dir/xap" . PublicInbox::Search::SCHEMA_VERSION;
        my $self = {
                ibx => $v2ibx,
@@ -320,7 +318,6 @@ sub idx_init {
        $ibx->git->cleanup;
 
        parallel_init($self, $ibx->{indexlevel});
-       $ibx->umask_prepare;
        $ibx->with_umask(\&_idx_init, $self, $opt);
 }
 
index 4f77ef25333abe91eacb256f0cf7d41f15f1f031..ca2345f764386b9438e81c3666a8de5d259e1549 100644 (file)
@@ -270,7 +270,6 @@ sub run {
 
        local %SIG = %SIG;
        setup_signals();
-       $ibx->umask_prepare;
        $ibx->with_umask(\&_run, $ibx, $cb, $opt);
 }
 
index 800c364cea4999352494249ce71691ccf023cc3b..e6ee65296f0bdf27998856a06bf7c8d5b07ff626 100755 (executable)
@@ -80,7 +80,6 @@ $new->{version} = 2;
 $new = PublicInbox::InboxWritable->new($new, { nproc => $opt->{jobs} });
 $new->{-no_fsync} = 1 if !$opt->{fsync};
 my $v2w;
-$old->umask_prepare;
 
 sub link_or_copy ($$) {
        my ($src, $dst) = @_;