X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiMailSync.pm;h=d8242de381c0441dc510b5e1a30e00a0bf9a2c14;hb=473b069c61b3d4936e2c5ed46fd7d348c9f6d1b7;hp=2e74e433d09cd1f7506f876607bc44ca54d88dd4;hpb=aa6ad348fea8a7affb1ecf025c297983d0e061cd;p=public-inbox.git diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm index 2e74e433..d8242de3 100644 --- a/lib/PublicInbox/LeiMailSync.pm +++ b/lib/PublicInbox/LeiMailSync.pm @@ -72,15 +72,34 @@ CREATE TABLE IF NOT EXISTS blob2name ( sub _fid_for { my ($self, $folder, $rw) = @_; my $dbh = $self->{dbh}; - my ($row) = $dbh->selectrow_array(<<'', undef, $folder); -SELECT fid FROM folders WHERE loc = ? LIMIT 1 + my $sel = 'SELECT fid FROM folders WHERE loc = ? LIMIT 1'; + my ($fid) = $dbh->selectrow_array($sel, undef, $folder); + return $fid if defined $fid; - return $row if defined $row; + if ($folder =~ s!\A((?:maildir|mh):.*?)/+\z!$1!i) { + warn "folder: $folder/ had trailing slash in arg\n"; + ($fid) = $dbh->selectrow_array($sel, undef, $folder); + if (defined $fid) { + $dbh->do(<selectrow_array($sel, undef, "$folder/"); + if (defined $fid) { + $dbh->do(<selectrow_array('SELECT MAX(fid) FROM folders'); + ($fid) = $dbh->selectrow_array('SELECT MAX(fid) FROM folders'); - my $fid = ($row // 0) + 1; + $fid += 1; # in case we're reusing, clobber existing stale refs: $dbh->do('DELETE FROM blob2name WHERE fid = ?', undef, $fid); $dbh->do('DELETE FROM blob2num WHERE fid = ?', undef, $fid);