diff options
author | Eric Wong <e@80x24.org> | 2021-11-08 23:39:26 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-11-09 00:43:36 +0000 |
commit | 666dde69a3f64456321b7c701070712d6b85e359 (patch) | |
tree | e5efd7c440bcc8d84e04e00651f04224761c8a4e /lib/PublicInbox | |
parent | 7ffa98cbbf5bff8225fdfedb0f2b7c2beb5d0a6f (diff) | |
download | public-inbox-666dde69a3f64456321b7c701070712d6b85e359.tar.gz |
`"' (double-quote) needs to be quoted for stdin searches. We also need to differentiate between "lei q --stdin" usage when calling "lei up", do it by setting an internal "rawstr" knob to ensure we can parse the config properly regardless of whether the initial search used --stdin or not.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r-- | lib/PublicInbox/LeiSavedSearch.pm | 5 | ||||
-rw-r--r-- | lib/PublicInbox/LeiUp.pm | 10 |
2 files changed, 11 insertions, 4 deletions
diff --git a/lib/PublicInbox/LeiSavedSearch.pm b/lib/PublicInbox/LeiSavedSearch.pm index b2f1ad10..1d13aef6 100644 --- a/lib/PublicInbox/LeiSavedSearch.pm +++ b/lib/PublicInbox/LeiSavedSearch.pm @@ -21,6 +21,7 @@ my %cquote = ("\n" => '\\n', "\t" => '\\t', "\b" => '\\b'); sub cquote_val ($) { # cf. git-config(1) my ($val) = @_; $val =~ s/([\n\t\b])/$cquote{$1}/g; + $val =~ s/\"/\\\"/g; $val; } @@ -162,6 +163,10 @@ EOM my $val = $lei->{opt}->{$k} // next; print $fh "\t$k = $val\n"; } + $lei->{opt}->{stdin} and print $fh <<EOM; +[lei "internal"] + rawstr = 1 # stdin was used initially +EOM close($fh) or return $lei->fail("close $f: $!"); $self->{lock_path} = "$self->{-f}.flock"; $self->{-ovf} = "$dir/over.sqlite3"; diff --git a/lib/PublicInbox/LeiUp.pm b/lib/PublicInbox/LeiUp.pm index 66d950b2..d7873a3f 100644 --- a/lib/PublicInbox/LeiUp.pm +++ b/lib/PublicInbox/LeiUp.pm @@ -26,13 +26,15 @@ sub up1 ($$) { my $lss = PublicInbox::LeiSavedSearch->up($lei, $out) or return; my $f = $lss->{'-f'}; my $mset_opt = $lei->{mset_opt} = { relevance => -2 }; - my $q = $mset_opt->{q_raw} = $lss->{-cfg}->{'lei.q'} // + my $q = $lss->{-cfg}->get_all('lei.q') // die("lei.q unset in $f (out=$out)\n"); my $lse = $lei->{lse} // die 'BUG: {lse} missing'; - if (ref($q)) { - $mset_opt->{qstr} = $lse->query_argv_to_string($lse->git, $q); + if ($lss->{-cfg}->{'lei.internal.rawstr'}) { + scalar(@$q) > 1 and + die "$f: lei.q has multiple values (@$q) (out=$out)\n"; + $lse->query_approxidate($lse->git, $mset_opt->{qstr} = $q->[0]); } else { - $lse->query_approxidate($lse->git, $mset_opt->{qstr} = $q); + $mset_opt->{qstr} = $lse->query_argv_to_string($lse->git, $q); } # n.b. only a few CLI args are accepted for "up", so //= usually sets for my $k ($lss->ARRAY_FIELDS) { |