From a16e4816546cc098dab392eb1af4667e4961a753 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 25 Sep 2021 08:49:43 +0000 Subject: lei forget-external: split into separate file This was written before we had auto-loading, and forget-external should be a rarely-used command that's not worth loading at startup. Do some golfing while we're in the area, too. --- lib/PublicInbox/LeiForgetExternal.pm | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 lib/PublicInbox/LeiForgetExternal.pm (limited to 'lib/PublicInbox/LeiForgetExternal.pm') diff --git a/lib/PublicInbox/LeiForgetExternal.pm b/lib/PublicInbox/LeiForgetExternal.pm new file mode 100644 index 00000000..7a4bbcf8 --- /dev/null +++ b/lib/PublicInbox/LeiForgetExternal.pm @@ -0,0 +1,46 @@ +# Copyright (C) all contributors +# License: AGPL-3.0+ + +# "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}); + $lei->_config('--unset', $key); + if ($? == 0) { + $lei->qerr("# $l forgotten "); + } elsif (($? >> 8) == 5) { + $lei->err("# $l not found"); + } else { + $lei->err("# --unset $key error"); + return $lei->x_it($?); + } + } + } +} + +# shell completion helper called by lei__complete +sub _complete_forget_external { + my ($lei, @argv) = @_; + my $cfg = $lei->_lei_cfg or return (); + my ($cur, $re, $match_cb) = $lei->complete_url_prepare(\@argv); + # FIXME: bash completion off "http:" or "https:" when the last + # character is a colon doesn't work properly even if we're + # returning "//$HTTP_HOST/$PATH_INFO/", not sure why, could + # be a bash issue. + map { + $match_cb->(substr($_, length('external.'))); + } grep(/\Aexternal\.$re\Q$cur/, @{$cfg->{-section_order}}); +} + +1; -- cgit v1.2.3-24-ge0c7