diff options
author | Eric Wong <e@80x24.org> | 2022-12-01 11:21:32 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2022-12-02 08:07:41 +0000 |
commit | 7f70bf3c6aab60f494842504e1267e719515430b (patch) | |
tree | 7f56bd5cd06cf6c790fc68dc96b14e651af37399 /lib/PublicInbox/LeiQuery.pm | |
parent | 3f7bd6ba4d30f16ef95af9121ad8fe7b47a4f5f7 (diff) | |
download | public-inbox-7f70bf3c6aab60f494842504e1267e719515430b.tar.gz |
While users may specify relative paths for convenience on the command-line, absolute paths are required for `lei up' since that (especially `lei up --all') could run from anywhere. Note that we need to do this when parsing the command-line options, since shortcuts for URL matching on URL path components are allowed for `lei q', and those same shortcuts may remain in effect across to `lei up' as the underlying external may be moved to a different URI host.
Diffstat (limited to 'lib/PublicInbox/LeiQuery.pm')
-rw-r--r-- | lib/PublicInbox/LeiQuery.pm | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/lib/PublicInbox/LeiQuery.pm b/lib/PublicInbox/LeiQuery.pm index 0f839236..358574ea 100644 --- a/lib/PublicInbox/LeiQuery.pm +++ b/lib/PublicInbox/LeiQuery.pm @@ -74,6 +74,12 @@ sub qstr_add { # PublicInbox::InputPipe::consume callback for --stdin $lei->fail($@) if $@; } +# make the URI||PublicInbox::{Inbox,ExtSearch} a config-file friendly string +sub cfg_ext ($) { + my ($x) = @_; + $x->isa('URI') ? "$x" : ($x->{inboxdir} // $x->{topdir}); +} + sub lxs_prepare { my ($self) = @_; require PublicInbox::LeiXSearch; @@ -89,21 +95,32 @@ sub lxs_prepare { $lxs->prepare_external($self->{lse}); } if (@only) { + my $only; for my $loc (@only) { my @loc = $self->get_externals($loc) or return; - $lxs->prepare_external($_) for @loc; + for (@loc) { + my $x = $lxs->prepare_external($_); + push(@$only, cfg_ext($x)) if $x; + } } + $opt->{only} = $only if $only; } else { - my (@ilocals, @iremotes); + my (@ilocals, @iremotes, $incl); for my $loc (@{$opt->{include} // []}) { my @loc = $self->get_externals($loc) or return; - $lxs->prepare_external($_) for @loc; + for (@loc) { + my $x = $lxs->prepare_external($_); + push(@$incl, cfg_ext($x)) if $x; + } @ilocals = @{$lxs->{locals} // []}; @iremotes = @{$lxs->{remotes} // []}; } + $opt->{include} = $incl if $incl; # --external is enabled by default, but allow --no-external if ($opt->{external} //= 1) { my $ex = $self->canonicalize_excludes($opt->{exclude}); + my @excl = keys %$ex; + $opt->{exclude} = \@excl if scalar(@excl); $self->externals_each(\&prep_ext, $lxs, $ex); $opt->{remote} //= !($lxs->locals - $opt->{'local'}); $lxs->{locals} = \@ilocals if !$opt->{'local'}; |