From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 4800E1F4B4 for ; Sat, 17 Apr 2021 10:24:45 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] lei up: fix canonicalization of Maildirs Date: Sat, 17 Apr 2021 10:24:45 +0000 Message-Id: <20210417102445.1541-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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');