unofficial mirror of meta@public-inbox.org
 help / color / mirror / Atom feed
* [PATCH] lei up: fix canonicalization of Maildirs
@ 2021-04-17 10:24 Eric Wong
  2021-04-17 19:00 ` [PATCH 2/] lei up: further improve Maildir canonicalization Eric Wong
  0 siblings, 1 reply; 2+ messages in thread
From: Eric Wong @ 2021-04-17 10:24 UTC (permalink / raw)
  To: meta

We always represent --output destination directories with a
trailing slash to disambiguate directories from mbox filenames.
Therefore, we must use the trailing slash when mapping the
destination beck from the lei/saved-search/* directory.

"lei up" now relies exclusively on the users --output pathname
or URL for updates.  This ought to be less confusing since
pathnames in ~/.local/store/lei/saved-searches aren't ideal.
---
 lib/PublicInbox/LeiSavedSearch.pm | 13 ++++++++-----
 t/lei-q-save.t                    |  4 +++-
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/lib/PublicInbox/LeiSavedSearch.pm b/lib/PublicInbox/LeiSavedSearch.pm
index 932b2aa4..0f632d93 100644
--- a/lib/PublicInbox/LeiSavedSearch.pm
+++ b/lib/PublicInbox/LeiSavedSearch.pm
@@ -26,18 +26,21 @@ sub lss_dir_for ($$) {
 	} else { # basename
 		@n = ($$dstref =~ m{([\w\-\.]+)/*\z});
 		$$dstref = $lei->rel2abs($$dstref);
+		$$dstref .= '/' if -d $$dstref;
 	}
 	push @n, sha256_hex($$dstref);
 	$lei->share_path . '/saved-searches/' . join('-', @n);
 }
 
 sub new {
-	my ($cls, $lei, $dir) = @_;
+	my ($cls, $lei, $dst) = @_;
 	my $self = bless { ale => $lei->ale }, $cls;
-	if (defined $dir) { # updating existing saved search via "lei up"
-		my $f = "$dir/lei.saved-search";
-		((-f $f && -r _) || output2lssdir($self, $lei, \$dir, \$f)) or
-			return $lei->fail("$f non-existent or unreadable");
+	my $dir;
+	if (defined $dst) { # updating existing saved search via "lei up"
+		my $f;
+		$dir = $dst;
+		output2lssdir($self, $lei, \$dir, \$f) or
+			return $lei->fail("--save was not used with $dst");
 		$self->{-cfg} //= PublicInbox::Config::git_config_dump($f);
 		$self->{'-f'} = $f;
 	} else { # new saved search "lei q --save"
diff --git a/t/lei-q-save.t b/t/lei-q-save.t
index d43f508b..6389825f 100644
--- a/t/lei-q-save.t
+++ b/t/lei-q-save.t
@@ -27,7 +27,9 @@ test_lei(sub {
 	# ensure "lei up" works, since it compliments "lei q --save"
 	$in = $doc2->as_string;
 	lei_ok [qw(import -q -F eml -)], undef, { 0 => \$in, %$lei_opt };
-	lei_ok qw(up -q), $s[0];
+	opendir my $dh, '.' or xbail "opendir .: $!";
+	lei_ok qw(up -q md -C), $home;
+	chdir($dh) or xbail "fchdir . $!";
 	my %after = map { $_ => 1 } glob("$home/md/cur/*");
 	is(delete $after{(keys(%before))[0]}, 1, 'original message kept');
 	is(scalar(keys %after), 1, 'one new message added');

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH 2/] lei up: further improve Maildir canonicalization
  2021-04-17 10:24 [PATCH] lei up: fix canonicalization of Maildirs Eric Wong
@ 2021-04-17 19:00 ` Eric Wong
  0 siblings, 0 replies; 2+ messages in thread
From: Eric Wong @ 2021-04-17 19:00 UTC (permalink / raw)
  To: meta

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 | 6 ++++--
 t/lei-q-save.t                    | 4 ++++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/PublicInbox/LeiSavedSearch.pm b/lib/PublicInbox/LeiSavedSearch.pm
index 0f632d93..e44779ee 100644
--- a/lib/PublicInbox/LeiSavedSearch.pm
+++ b/lib/PublicInbox/LeiSavedSearch.pm
@@ -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"
diff --git a/t/lei-q-save.t b/t/lei-q-save.t
index 6389825f..a8eda41e 100644
--- a/t/lei-q-save.t
+++ b/t/lei-q-save.t
@@ -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;

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-04-17 19:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-17 10:24 [PATCH] lei up: fix canonicalization of Maildirs Eric Wong
2021-04-17 19:00 ` [PATCH 2/] lei up: further improve Maildir canonicalization Eric Wong

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).