X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiEditSearch.pm;h=bcf7c10517c95c7718efb5359ffced25125a57a6;hb=9d0f17840479508de4aaf76fe6c150e94a9f79c3;hp=47166ce724837013d3b13286326fae75a2c863e2;hpb=20c940a876728fe91892200dd874dd917cd677ac;p=public-inbox.git diff --git a/lib/PublicInbox/LeiEditSearch.pm b/lib/PublicInbox/LeiEditSearch.pm index 47166ce7..bcf7c105 100644 --- a/lib/PublicInbox/LeiEditSearch.pm +++ b/lib/PublicInbox/LeiEditSearch.pm @@ -7,48 +7,32 @@ use strict; use v5.10.1; use PublicInbox::LeiSavedSearch; use PublicInbox::LeiUp; +use parent qw(PublicInbox::LeiConfig); -sub edit_begin { - my ($lss, $lei) = @_; - if (ref($lss->{-cfg}->{'lei.q.output'})) { - delete $lss->{-cfg}->{'lei.q.output'}; # invalid - $lei->pgr_err(<{-f} has multiple values of lei.q.output +sub cfg_edit_begin { + my ($self) = @_; + if (ref($self->{lss}->{-cfg}->{'lei.q.output'})) { + delete $self->{lss}->{-cfg}->{'lei.q.output'}; # invalid + $self->{lei}->pgr_err(<{lss}->{-f} has multiple values of lei.q.output please remove redundant ones EOM } - $lei->{-lss_for_edit} = $lss; } -sub do_edit ($$;$) { - my ($lss, $lei, $reason) = @_; - $lei->pgr_err($reason) if defined $reason; - my @cmd = (qw(git config --edit -f), $lss->{'-f'}); - $lei->qerr("# spawning @cmd"); - edit_begin($lss, $lei); - # run in script/lei foreground - require PublicInbox::PktOp; - my ($op_c, $op_p) = PublicInbox::PktOp->pair; - # $op_p will EOF when $EDITOR is done - $op_c->{ops} = { '' => [\&op_edit_done, $lss, $lei] }; - $lei->send_exec_cmd([ @$lei{qw(0 1 2)}, $op_p->{op_p} ], \@cmd, {}); -} - -sub _edit_done { - my ($lss, $lei) = @_; - my $cfg = $lss->can('cfg_dump')->($lei, $lss->{'-f'}) // - return do_edit($lss, $lei, <{-f} is unparseable -EOM +sub cfg_verify { + my ($self, $cfg) = @_; my $new_out = $cfg->{'lei.q.output'} // ''; - return do_edit($lss, $lei, <{-f} has multiple values of lei.q.output + return $self->cfg_do_edit(<{-f} has multiple values of lei.q.output EOM - return do_edit($lss, $lei, <{-f} needs lei.q.output + return $self->cfg_do_edit(<{-f} needs lei.q.output EOM + my $lss = $self->{lss}; my $old_out = $lss->{-cfg}->{'lei.q.output'} // return; return if $old_out eq $new_out; + my $lei = $self->{lei}; my $old_path = $old_out; my $new_path = $new_out; s!$PublicInbox::LeiSavedSearch::LOCAL_PFX!! for ($old_path, $new_path); @@ -57,10 +41,10 @@ EOM return if $dir_new eq $dir_old; ($old_out =~ m!\Av2:!i || $new_out =~ m!\Av2:!) and - return do_edit($lss, $lei, <cfg_do_edit(<cfg_do_edit(<fail($@) if $@; -} - sub lei_edit_search { my ($lei, $out) = @_; my $lss = PublicInbox::LeiSavedSearch->up($lei, $out) or return; - do_edit($lss, $lei); + my $f = $lss->{-f}; + my $self = bless { lei => $lei, lss => $lss, -f => $f }, __PACKAGE__; + $self->cfg_do_edit; } *_complete_edit_search = \&PublicInbox::LeiUp::_complete_up;