# Copyright (C) 2021 all contributors # License: AGPL-3.0+ package PublicInbox::LeiConfig; use strict; use v5.10.1; use PublicInbox::PktOp; sub cfg_do_edit ($;$) { my ($self, $reason) = @_; my $lei = $self->{lei}; $lei->pgr_err($reason) if defined $reason; my $cmd = [ qw(git config --edit -f), $self->{-f} ]; my $env = { GIT_CONFIG => $self->{-f} }; $self->cfg_edit_begin if $self->can('cfg_edit_begin'); # run in script/lei foreground my ($op_c, $op_p) = PublicInbox::PktOp->pair; # $op_p will EOF when $EDITOR is done $op_c->{ops} = { '' => [\&cfg_edit_done, $self] }; $lei->send_exec_cmd([ @$lei{qw(0 1 2)}, $op_p->{op_p} ], $cmd, $env); } sub cfg_edit_done { # PktOp my ($self) = @_; eval { my $cfg = $self->{lei}->cfg_dump($self->{-f}, $self->{lei}->{2}) // return cfg_do_edit($self, "\n"); $self->cfg_verify($cfg) if $self->can('cfg_verify'); }; $self->{lei}->fail($@) if $@; } sub lei_config { my ($lei, @argv) = @_; $lei->{opt}->{'config-file'} and return $lei->fail( "config file switches not supported by `lei config'"); return $lei->_config(@argv) unless $lei->{opt}->{edit}; my $f = $lei->_lei_cfg(1)->{-f}; my $self = bless { lei => $lei, -f => $f }, __PACKAGE__; cfg_do_edit($self); } 1;