]> Sergey Matveev's repositories - public-inbox.git/commitdiff
imap_tracker: prepare for use with lei
authorEric Wong <e@80x24.org>
Thu, 22 Apr 2021 09:08:20 +0000 (07:08 -0200)
committerEric Wong <e@80x24.org>
Thu, 22 Apr 2021 21:05:47 +0000 (17:05 -0400)
We'll support nodatacow as we do in other SQLite DBs

lib/PublicInbox/IMAPTracker.pm

index 6d4fb22748e90e399f7370f603e1d3712e73f78c..bcf7af2e11b5de2e63a5a30bd13dfc7fb159bda8 100644 (file)
@@ -62,21 +62,27 @@ VALUES (?, ?, ?)
 }
 
 sub new {
-       my ($class, $url) = @_;
+       my ($class, $url, $dbname) = @_;
 
-       # original name for compatibility with old setups:
-       my $dbname = PublicInbox::Config->config_dir() . "/imap.sqlite3";
+       unless (defined($dbname)) {
+               # original name for compatibility with old setups:
+               $dbname = PublicInbox::Config->config_dir() . '/imap.sqlite3';
 
-       # use the new XDG-compliant name for new setups:
-       if (!-f $dbname) {
-               $dbname = ($ENV{XDG_DATA_HOME} //
-                       (($ENV{HOME} // '/nonexistent').'/.local/share')) .
-                       '/public-inbox/imap.sqlite3';
+               # use the new XDG-compliant name for new setups:
+               if (!-f $dbname) {
+                       $dbname = ($ENV{XDG_DATA_HOME} //
+                                       (($ENV{HOME} // '/nonexistent').
+                                        '/.local/share')) .
+                               '/public-inbox/imap.sqlite3';
+               }
        }
        if (!-f $dbname) {
                require File::Path;
                require File::Basename;
+               require PublicInbox::Spawn;
                File::Path::mkpath(File::Basename::dirname($dbname));
+               open my $fh, '+>>', $dbname or die "failed to open $dbname: $!";
+               PublicInbox::Spawn::nodatacow_fd(fileno($fh));
        }
        my $self = bless { lock_path => "$dbname.lock", url => $url }, $class;
        $self->lock_acquire;