]> Sergey Matveev's repositories - public-inbox.git/blob - lib/PublicInbox/LeiForgetExternal.pm
lei forget-external: split into separate file
[public-inbox.git] / lib / PublicInbox / LeiForgetExternal.pm
1 # Copyright (C) all contributors <meta@public-inbox.org>
2 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
3
4 # "lei forget-external" command
5 package PublicInbox::LeiForgetExternal;
6 use strict;
7 use v5.10.1;
8
9 sub lei_forget_external {
10         my ($lei, @locations) = @_;
11         my $cfg = $lei->_lei_cfg or
12                 return $lei->fail('no externals configured');
13         my %seen;
14         for my $loc (@locations) {
15                 for my $l ($loc, $lei->ext_canonicalize($loc)) {
16                         next if $seen{$l}++;
17                         my $key = "external.$l.boost";
18                         delete($cfg->{$key});
19                         $lei->_config('--unset', $key);
20                         if ($? == 0) {
21                                 $lei->qerr("# $l forgotten ");
22                         } elsif (($? >> 8) == 5) {
23                                 $lei->err("# $l not found");
24                         } else {
25                                 $lei->err("# --unset $key error");
26                                 return $lei->x_it($?);
27                         }
28                 }
29         }
30 }
31
32 # shell completion helper called by lei__complete
33 sub _complete_forget_external {
34         my ($lei, @argv) = @_;
35         my $cfg = $lei->_lei_cfg or return ();
36         my ($cur, $re, $match_cb) = $lei->complete_url_prepare(\@argv);
37         # FIXME: bash completion off "http:" or "https:" when the last
38         # character is a colon doesn't work properly even if we're
39         # returning "//$HTTP_HOST/$PATH_INFO/", not sure why, could
40         # be a bash issue.
41         map {
42                 $match_cb->(substr($_, length('external.')));
43         } grep(/\Aexternal\.$re\Q$cur/, @{$cfg->{-section_order}});
44 }
45
46 1;