]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei up: further improve Maildir canonicalization
authorEric Wong <e@80x24.org>
Sat, 17 Apr 2021 19:00:53 +0000 (19:00 +0000)
committerEric Wong <e@80x24.org>
Sat, 17 Apr 2021 20:16:46 +0000 (20:16 +0000)
We want to be able to use "lei up ." when inside a Maildir.
We'll also relax Maildir/mbox basenames to be any non-'/'
character after converting relative paths to absolute.  The
old restriction on allowed characters was unnecessary and made
it impossible to reliably map "." when used as the sole argument
for "lei up".

lib/PublicInbox/LeiSavedSearch.pm
t/lei-q-save.t

index 0f632d9378aacfb2b8625b66185fce131d6d44d4..e44779eea1ae9aaf3f6379acdacd837a66719da6 100644 (file)
@@ -24,9 +24,10 @@ sub lss_dir_for ($$) {
                $$dstref = $$uri;
                @n = ($uri->mailbox);
        } else { # basename
-               @n = ($$dstref =~ m{([\w\-\.]+)/*\z});
                $$dstref = $lei->rel2abs($$dstref);
                $$dstref .= '/' if -d $$dstref;
+               $$dstref =~ tr!/!/!s;
+               @n = ($$dstref =~ m{([^/]+)/*\z});
        }
        push @n, sha256_hex($$dstref);
        $lei->share_path . '/saved-searches/' . join('-', @n);
@@ -40,7 +41,8 @@ sub new {
                my $f;
                $dir = $dst;
                output2lssdir($self, $lei, \$dir, \$f) or
-                       return $lei->fail("--save was not used with $dst");
+                       return $lei->fail("--save was not used with $dst cwd=".
+                                               $lei->rel2abs('.'));
                $self->{-cfg} //= PublicInbox::Config::git_config_dump($f);
                $self->{'-f'} = $f;
        } else { # new saved search "lei q --save"
index 6389825f46d260e353769d0c266739638bf6bb22..a8eda41ebc0479a525a0fc3db585c1f7b7c8bb1a 100644 (file)
@@ -29,6 +29,8 @@ test_lei(sub {
        lei_ok [qw(import -q -F eml -)], undef, { 0 => \$in, %$lei_opt };
        opendir my $dh, '.' or xbail "opendir .: $!";
        lei_ok qw(up -q md -C), $home;
+       lei_ok qw(up -q . -C), "$home/md";
+       lei_ok qw(up -q), "/$home/md";
        chdir($dh) or xbail "fchdir . $!";
        my %after = map { $_ => 1 } glob("$home/md/cur/*");
        is(delete $after{(keys(%before))[0]}, 1, 'original message kept');
@@ -51,5 +53,7 @@ test_lei(sub {
        lei_ok [qw(import -q -F eml -)], undef, { 0 => \$in, %$lei_opt };
        lei_ok([qw(up mbcl2)], undef, { -C => $home, %$lei_opt });
        ok(-s "$home/mbcl2" > $size, 'size increased after up');
+
+       ok(!lei(qw(up -q), $home), 'up fails w/o --save');
 });
 done_testing;