diff options
-rw-r--r-- | lib/PublicInbox/LeiSavedSearch.pm | 9 | ||||
-rw-r--r-- | t/lei-q-save.t | 9 |
2 files changed, 17 insertions, 1 deletions
diff --git a/lib/PublicInbox/LeiSavedSearch.pm b/lib/PublicInbox/LeiSavedSearch.pm index cfbf68c3..2a0e9321 100644 --- a/lib/PublicInbox/LeiSavedSearch.pm +++ b/lib/PublicInbox/LeiSavedSearch.pm @@ -115,9 +115,16 @@ sub up { # updating existing saved search via "lei up" sub new { # new saved search "lei q --save" my ($cls, $lei) = @_; my $self = bless { ale => $lei->ale }, $cls; + require File::Path; my $dst = $lei->{ovv}->{dst}; + + # canonicalize away relative paths into the config + if ($lei->{ovv}->{fmt} eq 'maildir' && + $dst =~ m!(?:/*|\A)\.\.(?:/*|\z)! && !-d $dst) { + File::Path::make_path($dst); + $lei->{ovv}->{dst} = $dst = $lei->abs_path($dst); + } my $dir = lss_dir_for($lei, \$dst); - require File::Path; File::Path::make_path($dir); # raises on error $self->{-cfg} = {}; my $f = $self->{'-f'} = "$dir/lei.saved-search"; diff --git a/t/lei-q-save.t b/t/lei-q-save.t index b1ca4e92..eada2dd4 100644 --- a/t/lei-q-save.t +++ b/t/lei-q-save.t @@ -202,5 +202,14 @@ test_lei(sub { lei_ok([qw(edit-search), $v2s], { VISUAL => 'cat', EDITOR => 'cat' }); like($lei_out, qr/^\[lei/sm, 'edit-search can cat'); + + lei_ok('-C', "$home/v2s", + qw(q -q --save -o ../s m:testmessage@example.com)); + lei_ok qw(ls-search); + unlike $lei_out, qr{/\.\./s$}sm, 'relative path not in ls-search'; + like $lei_out, qr{^\Q$home\E/s$}sm, + 'absolute path appears in ls-search'; + lei_ok qw(up ../s -C), "$home/v2s", \'relative lei up'; + lei_ok qw(up), "$home/s", \'absolute lei up'; }); done_testing; |