about summary refs log tree commit homepage
path: root/lib/PublicInbox/LeiLsMailSync.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/LeiLsMailSync.pm')
-rw-r--r--lib/PublicInbox/LeiLsMailSync.pm10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/PublicInbox/LeiLsMailSync.pm b/lib/PublicInbox/LeiLsMailSync.pm
index 2b167b1d..1400d488 100644
--- a/lib/PublicInbox/LeiLsMailSync.pm
+++ b/lib/PublicInbox/LeiLsMailSync.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
 # front-end for the "lei ls-mail-sync" sub-command
@@ -6,13 +6,17 @@ package PublicInbox::LeiLsMailSync;
 use strict;
 use v5.10.1;
 use PublicInbox::LeiMailSync;
+use PublicInbox::Config qw(glob2re);
 
 sub lei_ls_mail_sync {
         my ($lei, $filter) = @_;
         my $lms = $lei->lms or return;
         my $opt = $lei->{opt};
-        my $re = $opt->{globoff} ? undef : $lei->glob2re($filter // '*');
-        $re //= qr/\Q$filter\E/;
+        my $re = $opt->{globoff} ? undef : glob2re($filter // '*');
+        $re .= '/?\\z' if defined $re;
+        $re //= index($filter, '/') < 0 ?
+                        qr!/\Q$filter\E/?\z! : # exact basename match
+                        qr/\Q$filter\E/; # grep -F semantics
         my @f = $lms->folders;
         @f = $opt->{'invert-match'} ? grep(!/$re/, @f) : grep(/$re/, @f);
         if ($opt->{'local'} && !$opt->{remote}) {