diff options
Diffstat (limited to 'lib/PublicInbox/LeiForgetExternal.pm')
-rw-r--r-- | lib/PublicInbox/LeiForgetExternal.pm | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/PublicInbox/LeiForgetExternal.pm b/lib/PublicInbox/LeiForgetExternal.pm new file mode 100644 index 00000000..c8d1df38 --- /dev/null +++ b/lib/PublicInbox/LeiForgetExternal.pm @@ -0,0 +1,40 @@ +# Copyright (C) all contributors <meta@public-inbox.org> +# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> + +# "lei forget-external" command +package PublicInbox::LeiForgetExternal; +use strict; +use v5.10.1; + +sub lei_forget_external { + my ($lei, @locations) = @_; + my $cfg = $lei->_lei_cfg or + return $lei->fail('no externals configured'); + my %seen; + for my $loc (@locations) { + for my $l ($loc, $lei->ext_canonicalize($loc)) { + next if $seen{$l}++; + my $key = "external.$l.boost"; + delete($cfg->{$key}); + if ($lei->_config('+e', '--unset', $key)) { + $lei->qerr("# $l forgotten "); + } elsif (($? >> 8) == 5) { + warn("# $l not found\n"); + } else { + $lei->child_error($?, "# --unset $key error"); + } + } + } +} + +# shell completion helper called by lei__complete +sub _complete_forget_external { + my ($lei, @argv) = @_; + my $cfg = $lei->_lei_cfg or return (); + my ($pfx, $cur, $match_cb) = $lei->complete_url_prepare(\@argv); + map { + $match_cb->(substr($_, length('external.'))); + } grep(/\Aexternal\.\Q$pfx$cur/, @{$cfg->{-section_order}}); +} + +1; |