our
@EXPORT
=
qw/cmd git riji riji_setup/
;
sub
cmd {
my
%ret
= %{ run_forked(
join
' '
,
@_
) };
@ret
{
qw/stdout stderr exit_code/
};
}
sub
git { cmd(
'git'
,
@_
) }
my
$lib
= File::Spec->rel2abs(
'lib'
);
my
$bin
= File::Spec->rel2abs(
'script/riji'
);
sub
riji {
my
@args
=
@_
;
if
(
$ENV
{RIJI_TEST_INTERNAL}) {
if
(
$INC
{
'Riji.pm'
}) {
Class::Unload->unload(
'Riji'
);
}
if
(
$INC
{
'Riji/Models.pm'
} && Riji::Models->instance->registered_classes->{Blog}) {
Riji::Models->unregister(
'Blog'
);
Riji::Models::register_blog();
}
my
$cmd
=
shift
@args
;
$cmd
=~ s/-/_/g;
$cmd
= String::CamelCase::camelize(
$cmd
);
my
$pkg
=
"Riji::CLI::$cmd"
;
Module::Load::load(
$pkg
);
Capture::Tiny::capture(
sub
{
eval
{
$pkg
->run(
@args
) };
if
($@) {
warn
$@;
return
255;
}
0;
});
}
else
{
cmd($^X,
"-I$lib"
,
$bin
,
@args
);
}
}
sub
riji_setup {
my
$share
= File::Spec->rel2abs(
'./share'
);
my
$tmpd
= tempd();
$ENV
{GIT_AUTHOR_NAME} =
'Songmu'
;
$ENV
{GIT_AUTHOR_EMAIL} =
'songmu@example.com'
;
$ENV
{GIT_COMMITTER_NAME} =
'Songmu'
;
$ENV
{GIT_COMMITTER_EMAIL} =
'songmu@example.com'
;
{
my
$g
= mock_guard
Riji
=> {
share_dir
=>
$share
,
};
Riji::CLI::Setup->run;
}
$tmpd
;
}
1;