* Wrong folder when using imaps://
@ 2021-09-14 17:50 Konstantin Ryabitsev
2021-09-14 19:35 ` [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator Eric Wong
0 siblings, 1 reply; 10+ messages in thread
From: Konstantin Ryabitsev @ 2021-09-14 17:50 UTC (permalink / raw)
To: meta
Hello:
I found an interesting problem using lei with imaps:// folders. I'm trying
things out with migadu, and the folder paths use '/' separators, so a full
IMAPS folder path for a folder "lore/mentions" is
imaps://imap.migadu.com/lore/mentions. However, if I configure lei-q to use
that remote path, everything actually ends up in the folder
imap.migadu.com/lore (not the "mentions" subfolder).
-K
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator
2021-09-14 17:50 Wrong folder when using imaps:// Konstantin Ryabitsev
@ 2021-09-14 19:35 ` Eric Wong
2021-09-14 19:55 ` Konstantin Ryabitsev
0 siblings, 1 reply; 10+ messages in thread
From: Eric Wong @ 2021-09-14 19:35 UTC (permalink / raw)
To: Konstantin Ryabitsev; +Cc: meta
On Tue, 14 Sep 2021 13:50:25 -0400, Konstantin Ryabitsev wrote:
> Hello:
>
> I found an interesting problem using lei with imaps:// folders. I'm trying
> things out with migadu, and the folder paths use '/' separators, so a full
> IMAPS folder path for a folder "lore/mentions" is
> imaps://imap.migadu.com/lore/mentions. However, if I configure lei-q to use
> that remote path, everything actually ends up in the folder
> imap.migadu.com/lore (not the "mentions" subfolder).
Oops, I think the patch below should fix it.
Btw, if you encounter more IMAP problems, I've found adding
"-c imap.debug -c imap.compress=0" to the command-line useful
(Mail::IMAPClient dumps the raw compressed traffic, so I need to
disable compression).
-----------8<-----------
Subject: [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator
Untested at the moment(*), but we were inadvertantly truncating
mailbox names with '/' due to our work-in-progress handling of
"/;UID=$NUM" parameter.
(*) strangely, my dovecot instance doesn't allow '/' by default,
so the change to xt/net_writer-imap.t is untested.
Reported-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Link: https://public-inbox.org/meta/20210914175025.eq7s2shkc323itaf@meerkat.local/
---
lib/PublicInbox/URIimap.pm | 2 +-
t/uri_imap.t | 2 ++
xt/net_writer-imap.t | 3 ++-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/lib/PublicInbox/URIimap.pm b/lib/PublicInbox/URIimap.pm
index a309fde0..6907e32a 100644
--- a/lib/PublicInbox/URIimap.pm
+++ b/lib/PublicInbox/URIimap.pm
@@ -63,7 +63,7 @@ sub path {
my ($self) = @_;
my (undef, undef, $path) = uri_split($$self);
$path =~ s!\A/+!!;
- $path =~ s![/;].*\z!!; # [;UIDVALIDITY=nz-number]/;UID=nz-number
+ $path =~ s!/?;.*\z!!; # [;UIDVALIDITY=nz-number]/;UID=nz-number
$path eq '' ? undef : $path;
}
diff --git a/t/uri_imap.t b/t/uri_imap.t
index 14f0f346..b9e4583d 100644
--- a/t/uri_imap.t
+++ b/t/uri_imap.t
@@ -130,5 +130,7 @@ $uri = PublicInbox::URIimap->new('imap://[::1]:36281/');
my $cred = bless { username => $uri->user, password => $uri->password };
is($cred->{username}, undef, 'user is undef in array context');
is($cred->{password}, undef, 'password is undef in array context');
+$uri = PublicInbox::URIimap->new('imap://u@example.com/slash/separator');
+is($uri->mailbox, 'slash/separator', "`/' separator accepted");
done_testing;
diff --git a/xt/net_writer-imap.t b/xt/net_writer-imap.t
index 0a4cea68..f1228090 100644
--- a/xt/net_writer-imap.t
+++ b/xt/net_writer-imap.t
@@ -19,7 +19,8 @@ require_mods('Mail::IMAPClient');
require_ok 'PublicInbox::NetWriter';
my $host = (split(/\./, hostname))[0];
my ($base) = ($0 =~ m!\b([^/]+)\.[^\.]+\z!);
-my $folder = "INBOX.$base-$host-".strftime('%Y%m%d%H%M%S', gmtime(time)).
+my $SEP = $ENV{IMAP_SEPARATOR} || '.';
+my $folder = "INBOX$SEP$base-$host-".strftime('%Y%m%d%H%M%S', gmtime(time)).
"-$$-".sprintf('%x', int(rand(0xffffffff)));
my $nwr = PublicInbox::NetWriter->new;
chop($imap_url) if substr($imap_url, -1) eq '/';
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator
2021-09-14 19:35 ` [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator Eric Wong
@ 2021-09-14 19:55 ` Konstantin Ryabitsev
2021-09-14 20:12 ` Eric Wong
2021-09-14 21:05 ` Konstantin Ryabitsev
0 siblings, 2 replies; 10+ messages in thread
From: Konstantin Ryabitsev @ 2021-09-14 19:55 UTC (permalink / raw)
To: Eric Wong; +Cc: meta
On Tue, Sep 14, 2021 at 07:35:28PM +0000, Eric Wong wrote:
> > I found an interesting problem using lei with imaps:// folders. I'm trying
> > things out with migadu, and the folder paths use '/' separators, so a full
> > IMAPS folder path for a folder "lore/mentions" is
> > imaps://imap.migadu.com/lore/mentions. However, if I configure lei-q to use
> > that remote path, everything actually ends up in the folder
> > imap.migadu.com/lore (not the "mentions" subfolder).
>
> Oops, I think the patch below should fix it.
Yep, that worked. Thanks!
> Btw, if you encounter more IMAP problems, I've found adding
> "-c imap.debug -c imap.compress=0" to the command-line useful
> (Mail::IMAPClient dumps the raw compressed traffic, so I need to
> disable compression).
Good to know, thanks. Quick follow-up -- documentation says that .netrc should
work, but I've found that even though I have the following entries in
~/.netrc, I still get prompted for credentials:
machine imap.migadu.com
login konstantin.ryabitsev@linux.dev
password [...]
The credential helper works after the initial "lei up" but I'm curious why
.netrc isn't happy. Not a huge deal, seeing as that requires storing passwords
in plaintext.
-K
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator
2021-09-14 19:55 ` Konstantin Ryabitsev
@ 2021-09-14 20:12 ` Eric Wong
2021-09-14 20:19 ` Konstantin Ryabitsev
2021-09-14 21:05 ` Konstantin Ryabitsev
1 sibling, 1 reply; 10+ messages in thread
From: Eric Wong @ 2021-09-14 20:12 UTC (permalink / raw)
To: Konstantin Ryabitsev; +Cc: meta
Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote:
> On Tue, Sep 14, 2021 at 07:35:28PM +0000, Eric Wong wrote:
> > Oops, I think the patch below should fix it.
>
> Yep, that worked. Thanks!
Cool.
> Good to know, thanks. Quick follow-up -- documentation says that .netrc should
> work, but I've found that even though I have the following entries in
> ~/.netrc, I still get prompted for credentials:
>
> machine imap.migadu.com
> login konstantin.ryabitsev@linux.dev
> password [...]
>
> The credential helper works after the initial "lei up" but I'm curious why
> .netrc isn't happy. Not a huge deal, seeing as that requires storing passwords
> in plaintext.
Ah, I forgot to update the docs again :x
My main concern with .netrc was actually inadvertantly sending
FTP auth info to an IMAP server just because they share the same
host.
Not sure if plaintext is a real problem on encrypted block
devices/filesystems. Ordinary users can't mlock(2) to prevent
in-memory passwords from hitting swap (thus I always use
encrypted swap).
-----------8<---------
Subject: [PATCH] doc: update authentication notes for lei
~/.netrc isn't used by default any more, and I'm not sure it's
worthwhile to document the --netrc switch since it's rare for
non-FTP clients to support.
Followup-to: 9d11ed460ce113dd ("lei: do not read ~/.netrc by default")
Reported-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
---
Documentation/lei-convert.pod | 2 +-
Documentation/lei-import.pod | 2 +-
Documentation/lei-q.pod | 2 +-
Documentation/public-inbox-watch.pod | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/Documentation/lei-convert.pod b/Documentation/lei-convert.pod
index 7f372327..750ba54f 100644
--- a/Documentation/lei-convert.pod
+++ b/Documentation/lei-convert.pod
@@ -13,7 +13,7 @@ lei convert [OPTIONS] (--stdin|-)
Convert messages to another format. C<LOCATION> is a source of
messages: a directory (Maildir), a file, or a URL (C<imap://>,
C<imaps://>, C<nntp://>, or C<nntps://>). URLs requiring
-authentication must use L<netrc(5)> and/or L<git-credential(1)> to
+authentication use L<git-credential(1)> to
fill in the username and password.
For a regular file, the location must have a C<E<lt>formatE<gt>:>
diff --git a/Documentation/lei-import.pod b/Documentation/lei-import.pod
index c29a085b..9322dfa8 100644
--- a/Documentation/lei-import.pod
+++ b/Documentation/lei-import.pod
@@ -13,7 +13,7 @@ lei import [OPTIONS] (--stdin|-)
Import messages into the local storage of L<lei(1)>. C<LOCATION> is a
source of messages: a directory (Maildir), a file, or a URL
(C<imap://>, C<imaps://>, C<nntp://>, or C<nntps://>). URLs requiring
-authentication must use L<netrc(5)> and/or L<git-credential(1)> to
+authentication use L<git-credential(1)> to
fill in the username and password.
For a regular file, the location must have a C<E<lt>formatE<gt>:>
diff --git a/Documentation/lei-q.pod b/Documentation/lei-q.pod
index 1d9e66cd..2823ced8 100644
--- a/Documentation/lei-q.pod
+++ b/Documentation/lei-q.pod
@@ -43,7 +43,7 @@ Destination for results (e.g., C</tmp/results-Maildir>,
C<imaps://user@mail.example.com/INBOX.test>, or
C<mboxcl2:/tmp/results-mboxcl2>). The prefix may be a supported protocol:
C<imap://> or C<imaps://>. URLs requiring
-authentication must use L<netrc(5)> and/or L<git-credential(1)> to
+authentication use L<git-credential(1)> to
fill in the username and password.
A prefix can specify the format of the output: C<maildir>,
diff --git a/Documentation/public-inbox-watch.pod b/Documentation/public-inbox-watch.pod
index 5fa966be..e8f97c80 100644
--- a/Documentation/public-inbox-watch.pod
+++ b/Documentation/public-inbox-watch.pod
@@ -82,7 +82,7 @@ C<imap://> and C<imaps://> URLs:
This may be specified multiple times to combine several mailboxes
into a single public-inbox. URLs requiring authentication
-will require L<netrc(5)> and/or L<git-credential(1)> to fill
+will require L<netrc(5)> and/or L<git-credential(1)> (preferred) to fill
in the username and password.
Default: none
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator
2021-09-14 20:12 ` Eric Wong
@ 2021-09-14 20:19 ` Konstantin Ryabitsev
0 siblings, 0 replies; 10+ messages in thread
From: Konstantin Ryabitsev @ 2021-09-14 20:19 UTC (permalink / raw)
To: Eric Wong; +Cc: meta
On Tue, Sep 14, 2021 at 08:12:16PM +0000, Eric Wong wrote:
> Ah, I forgot to update the docs again :x
>
> My main concern with .netrc was actually inadvertantly sending
> FTP auth info to an IMAP server just because they share the same
> host.
No big deal -- folks can always just use the "store" credential helper to
pretty much the same effect.
> Not sure if plaintext is a real problem on encrypted block
> devices/filesystems. Ordinary users can't mlock(2) to prevent
> in-memory passwords from hitting swap (thus I always use
> encrypted swap).
Right, plus most of them probably have their .gitconfig with
sendemail.smtppass configured anyway. :)
-K
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator
2021-09-14 19:55 ` Konstantin Ryabitsev
2021-09-14 20:12 ` Eric Wong
@ 2021-09-14 21:05 ` Konstantin Ryabitsev
2021-09-14 22:10 ` [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator Eric Wong
1 sibling, 1 reply; 10+ messages in thread
From: Konstantin Ryabitsev @ 2021-09-14 21:05 UTC (permalink / raw)
To: Eric Wong; +Cc: meta
On Tue, Sep 14, 2021 at 03:55:10PM -0400, Konstantin Ryabitsev wrote:
> On Tue, Sep 14, 2021 at 07:35:28PM +0000, Eric Wong wrote:
> > > I found an interesting problem using lei with imaps:// folders. I'm trying
> > > things out with migadu, and the folder paths use '/' separators, so a full
> > > IMAPS folder path for a folder "lore/mentions" is
> > > imaps://imap.migadu.com/lore/mentions. However, if I configure lei-q to use
> > > that remote path, everything actually ends up in the folder
> > > imap.migadu.com/lore (not the "mentions" subfolder).
> >
> > Oops, I think the patch below should fix it.
>
> Yep, that worked. Thanks!
I think I found a couple of other bugs while testing this with migadu. E.g.:
$ export MFOLDER=imaps://imap.migadu.com/lore/b4
$ lei q -o $MFOLDER -I https://lore.kernel.org/all/ '(s:b4 OR nq:b4 OR dfn:b4) AND rt:1.week.ago..'
# /usr/bin/curl -Sf -s -d '' https://lore.kernel.org/all/?q=(s%3Ab4+OR+nq%3Ab4+OR+dfn%3Ab4)+AND+rt%3A1631066349..&x=m
# /home/user/.local/share/lei/store 54/54
So far so good, but then:
2021-09-14T20:59:12Z 20428 20428 die: BUG: imaps://imap.migadu.com/lore/b4;UIDVALIDITY=1621977334 has no UIDVALIDITY at /usr/local/share/perl/5.32.1/PublicInbox/LeiStore.pm line 313.
(from nowait set_sync_info)
# https://lore.kernel.org/all/ 19/?
# https://lore.kernel.org/all/ 25/?
# https://lore.kernel.org/all/ 51/?
# https://lore.kernel.org/all/ 54/54
# 54 written to imaps://imap.migadu.com/lore/b4 (108 matches)
However, it doesn't show up in ls-search:
$ lei ls-search
/home/user/work/temp/lei/lockdown
/home/user/work/temp/lei/mentions
That would appear to be due to them being saved in the lore/ subdir:
$ find .local/share/lei/saved-searches/ -type d
.local/share/lei/saved-searches/
.local/share/lei/saved-searches/lockdown-1804cfad691a409f55598a8528566d5f1539b2632e1db7e206cb147396582631
.local/share/lei/saved-searches/mentions-f467d0a01dfdc3e42523b5d0d090773269e199a6a109b0713dc48142f0e30526
.local/share/lei/saved-searches/lore
.local/share/lei/saved-searches/lore/mentions-e9ca065affe84b4e4637620c72b64b09970a02b83171ba75c86afff95489d392
.local/share/lei/saved-searches/lore/b4-4811ca1722c2c2817e8cdc6a8d390f63a3b723c3c991f0267425d380aa1c8add
Cheers,
-K
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator
2021-09-14 21:05 ` Konstantin Ryabitsev
@ 2021-09-14 22:10 ` Eric Wong
2021-09-15 12:33 ` Konstantin Ryabitsev
0 siblings, 1 reply; 10+ messages in thread
From: Eric Wong @ 2021-09-14 22:10 UTC (permalink / raw)
To: Konstantin Ryabitsev; +Cc: meta
Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote:
> 2021-09-14T20:59:12Z 20428 20428 die: BUG: imaps://imap.migadu.com/lore/b4;UIDVALIDITY=1621977334 has no UIDVALIDITY at /usr/local/share/perl/5.32.1/PublicInbox/LeiStore.pm line 313.
> (from nowait set_sync_info)
Same bug, different place :x
--------8<------
Subject: [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator
Again, we were failing to account for '/' use in mailbox names :x
Reported-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Link: https://public-inbox.org/meta/20210914210547.akdp4cqmwaheayp5@meerkat.local/
---
lib/PublicInbox/URIimap.pm | 7 ++++---
t/uri_imap.t | 17 +++++++++++++++++
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/lib/PublicInbox/URIimap.pm b/lib/PublicInbox/URIimap.pm
index 6907e32a..81644914 100644
--- a/lib/PublicInbox/URIimap.pm
+++ b/lib/PublicInbox/URIimap.pm
@@ -86,7 +86,8 @@ sub uidvalidity { # read/write
$$self = uri_join($scheme, $auth, $path, $query, $frag);
}
$path =~ s!\A/+!!;
- $path =~ m!\A[^;/]+;UIDVALIDITY=([1-9][0-9]*)\b!i ? ($1 + 0) : undef;
+ $path =~ m!\A[^;]+;UIDVALIDITY=([1-9][0-9]*)\b!i ?
+ ($1 + 0) : undef;
}
sub uid {
@@ -97,11 +98,11 @@ sub uid {
$path =~ s!/;UID=[^;/]*\b!!i;
} else {
$path =~ s!/;UID=[^;/]*\b!/;UID=$val!i or
- $path .= ";UID=$val";
+ $path .= "/;UID=$val";
}
$$self = uri_join($scheme, $auth, $path, $query);
}
- $path =~ m!\A/[^/;]+(?:;UIDVALIDITY=[^;/]+)?/;UID=([1-9][0-9]*)\b!i ?
+ $path =~ m!\A/[^;]+(?:;UIDVALIDITY=[^;/]+)?/;UID=([1-9][0-9]*)\b!i ?
($1 + 0) : undef;
}
diff --git a/t/uri_imap.t b/t/uri_imap.t
index b9e4583d..7a97f875 100644
--- a/t/uri_imap.t
+++ b/t/uri_imap.t
@@ -132,5 +132,22 @@ is($cred->{username}, undef, 'user is undef in array context');
is($cred->{password}, undef, 'password is undef in array context');
$uri = PublicInbox::URIimap->new('imap://u@example.com/slash/separator');
is($uri->mailbox, 'slash/separator', "`/' separator accepted");
+is($uri->uidvalidity(6), 6, "UIDVALIDITY set with `/' separator");
+is($$uri, 'imap://u@example.com/slash/separator;UIDVALIDITY=6',
+ "URI correct after adding UIDVALIDITY w/ `/' separator");
+
+$uri = PublicInbox::URIimap->new('imap://u@example.com/a/b;UIDVALIDITY=3');
+is($uri->uidvalidity, 3, "UIDVALIDITY w/ `/' separator");
+is($uri->mailbox, 'a/b', "mailbox w/ `/' separator + UIDVALIDITY");
+is($uri->uidvalidity(4), 4, "UIDVALIDITY set w/ `/' separator");
+is($$uri, 'imap://u@example.com/a/b;UIDVALIDITY=4',
+ "URI correct after replacing UIDVALIDITY w/ `/' separator");
+is($uri->uid(5), 5, "set /;UID= w/ `/' separator");
+
+$uri = PublicInbox::URIimap->new('imap://u@example.com/a/b/;UID=9');
+is($uri->uid, 9, "UID read with `/' separator w/o UIDVALIDITY");
+is($uri->uid(8), 8, "UID set with `/' separator w/o UIDVALIDITY");
+is($$uri, 'imap://u@example.com/a/b/;UID=8',
+ "URI correct after replacing UID w/ `/' separator");
done_testing;
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator
2021-09-14 22:10 ` [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator Eric Wong
@ 2021-09-15 12:33 ` Konstantin Ryabitsev
2021-09-15 17:43 ` Eric Wong
0 siblings, 1 reply; 10+ messages in thread
From: Konstantin Ryabitsev @ 2021-09-15 12:33 UTC (permalink / raw)
To: Eric Wong; +Cc: meta
On Tue, Sep 14, 2021 at 10:10:36PM +0000, Eric Wong wrote:
> Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote:
> > 2021-09-14T20:59:12Z 20428 20428 die: BUG: imaps://imap.migadu.com/lore/b4;UIDVALIDITY=1621977334 has no UIDVALIDITY at /usr/local/share/perl/5.32.1/PublicInbox/LeiStore.pm line 313.
> > (from nowait set_sync_info)
>
> Same bug, different place :x
> --------8<------
> Subject: [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator
>
> Again, we were failing to account for '/' use in mailbox names :x
The error is gone, but the saved search still doesn't show up when I run
"lei ls-search". Looking in .local/share/lei/saved-searches, I see that they
still get created as lore/foldername-${checksum}, which is probably why
ls-search doesn't find them?
-K
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator
2021-09-15 12:33 ` Konstantin Ryabitsev
@ 2021-09-15 17:43 ` Eric Wong
2021-09-15 17:57 ` Konstantin Ryabitsev
0 siblings, 1 reply; 10+ messages in thread
From: Eric Wong @ 2021-09-15 17:43 UTC (permalink / raw)
To: Konstantin Ryabitsev; +Cc: meta
Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote:
> On Tue, Sep 14, 2021 at 10:10:36PM +0000, Eric Wong wrote:
> > Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote:
> > > 2021-09-14T20:59:12Z 20428 20428 die: BUG: imaps://imap.migadu.com/lore/b4;UIDVALIDITY=1621977334 has no UIDVALIDITY at /usr/local/share/perl/5.32.1/PublicInbox/LeiStore.pm line 313.
> > > (from nowait set_sync_info)
> >
> > Same bug, different place :x
> > --------8<------
> > Subject: [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator
> >
> > Again, we were failing to account for '/' use in mailbox names :x
>
> The error is gone, but the saved search still doesn't show up when I run
> "lei ls-search". Looking in .local/share/lei/saved-searches, I see that they
> still get created as lore/foldername-${checksum}, which is probably why
> ls-search doesn't find them?
Ah, it's because the "foldername" part was incorrectly parsed
and it should be .local/share/lei/saved-searches/foldername-$checksum
without the "lore/" parent.
Once patched with the below, you should be able to move the
folder up a level and remove the now-empty "lore" dir inside
saved-searches.
Anyways, I think this fixes it:
---------8<---------
Subject: [PATCH] lei_saved_search: fix prefix for IMAP folders w/ slash
We failed to account for IMAP mailboxes containing `/'
characters when creating saved search files for them.
Reported-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Link: https://public-inbox.org/meta/20210915123347.knr4qpaei73tjc5q@meerkat.local/
---
lib/PublicInbox/LeiSavedSearch.pm | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/lib/PublicInbox/LeiSavedSearch.pm b/lib/PublicInbox/LeiSavedSearch.pm
index 8ceaaf01..96ff816e 100644
--- a/lib/PublicInbox/LeiSavedSearch.pm
+++ b/lib/PublicInbox/LeiSavedSearch.pm
@@ -39,21 +39,21 @@ sub cfg_dump ($$) {
sub lss_dir_for ($$;$) {
my ($lei, $dstref, $on_fs) = @_;
- my @n;
+ my $pfx;
if ($$dstref =~ m,\Aimaps?://,i) { # already canonicalized
require PublicInbox::URIimap;
my $uri = PublicInbox::URIimap->new($$dstref)->canonical;
$$dstref = $$uri;
- @n = ($uri->mailbox);
+ $pfx = $uri->mailbox;
} else {
# can't use Cwd::abs_path since dirname($$dstref) may not exist
$$dstref = $lei->rel2abs($$dstref);
$$dstref =~ tr!/!/!s;
- @n = ($$dstref =~ m{([^/]+)/*\z}); # basename
+ $pfx = $$dstref;
}
- push @n, sha256_hex($$dstref);
+ ($pfx) = ($pfx =~ m{([^/]+)/*\z}); # basename
my $lss_dir = $lei->share_path . '/saved-searches/';
- my $d = $lss_dir . join('-', @n);
+ my $d = "$lss_dir$pfx-".sha256_hex($$dstref);
# fall-back to looking up by st_ino + st_dev in case we're in
# a symlinked or bind-mounted path
@@ -61,7 +61,7 @@ sub lss_dir_for ($$;$) {
my @cur = stat(_);
my $want = pack('dd', @cur[1,0]); # st_ino + st_dev
my ($c, $o, @st);
- for my $g ("$n[0]-*", '*') {
+ for my $g ("$pfx-*", '*') {
my @maybe = glob("$lss_dir$g/lei.saved-search");
for my $f (@maybe) {
$c = cfg_dump($lei, $f) // next;
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator
2021-09-15 17:43 ` Eric Wong
@ 2021-09-15 17:57 ` Konstantin Ryabitsev
0 siblings, 0 replies; 10+ messages in thread
From: Konstantin Ryabitsev @ 2021-09-15 17:57 UTC (permalink / raw)
To: Eric Wong; +Cc: meta
On Wed, Sep 15, 2021 at 05:43:41PM +0000, Eric Wong wrote:
> > The error is gone, but the saved search still doesn't show up when I run
> > "lei ls-search". Looking in .local/share/lei/saved-searches, I see that they
> > still get created as lore/foldername-${checksum}, which is probably why
> > ls-search doesn't find them?
>
> Ah, it's because the "foldername" part was incorrectly parsed
> and it should be .local/share/lei/saved-searches/foldername-$checksum
> without the "lore/" parent.
>
> Once patched with the below, you should be able to move the
> folder up a level and remove the now-empty "lore" dir inside
> saved-searches.
>
> Anyways, I think this fixes it:
Yep, confirmed. And lei up --all now picks up remote imap folders.
Thanks!
-K
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-09-15 17:57 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-14 17:50 Wrong folder when using imaps:// Konstantin Ryabitsev
2021-09-14 19:35 ` [PATCH] uri_imap: handle '/' as an IMAP hierarchy separator Eric Wong
2021-09-14 19:55 ` Konstantin Ryabitsev
2021-09-14 20:12 ` Eric Wong
2021-09-14 20:19 ` Konstantin Ryabitsev
2021-09-14 21:05 ` Konstantin Ryabitsev
2021-09-14 22:10 ` [PATCH] uri_imap: fix ->uidvalidity and ->uid w/ `/' separator Eric Wong
2021-09-15 12:33 ` Konstantin Ryabitsev
2021-09-15 17:43 ` Eric Wong
2021-09-15 17:57 ` Konstantin Ryabitsev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).