package Test::Sbotools; use strict; use warnings; use Exporter 'import'; use Test::More; use Test::Execute; use FindBin '$RealBin'; use lib "$RealBin/../SBO-Lib/lib"; # From Test::Execute $path = "$RealBin/../"; our @EXPORT_OK = qw/ sbocheck sboclean sboconfig sbofind sboinstall sboremove sbosnap sboupgrade set_noclean set_distclean set_jobs set_repo set_lo set_version set_pkg_dir set_sbo_home make_slackbuilds_txt restore_perf_dummy replace_tags_txt /; local $Test::Builder::Level = $Test::Builder::Level + 1; sub sbocheck { script('sbocheck', @_); } sub sboclean { script('sboclean', @_); } sub sboconfig { script('sboconfig', @_); } sub sbofind { script('sbofind', @_); } sub sboinstall { script('sboinstall', @_); } sub sboremove { script('sboremove', @_); } sub sbosnap { script('sbosnap', @_); } sub sboupgrade { script('sboupgrade', @_); } sub set_noclean { _set_config('NOCLEAN', @_); } sub set_distclean { _set_config('DISTCLEAN', @_); } sub set_jobs { _set_config('JOBS', @_); } sub set_pkg_dir { _set_config('PKG_DIR', @_); } sub set_sbo_home { _set_config('SBO_HOME', @_); } sub set_lo { _set_config('LOCAL_OVERRIDES', @_); } sub set_version { _set_config('SLACKWARE_VERSION', @_); } my $repo = 0; sub set_repo { _set_config('REPO', @_); if (-e "/usr/sbo/repo" and not $repo) { $repo = 1; system(qw! mv /usr/sbo/repo !, "$RealBin/repo.backup"); } } my %config; my %settings = ( DISTCLEAN => '-d', JOBS => '-j', LOCAL_OVERRIDES => '-o', NOCLEAN => '-c', PKG_DIR => '-p', REPO => '-r', SBO_HOME => '-s', SLACKWARE_VERSION => '-V', ); sub _set_config { my ($config, $value) = @_; # if %config is empty, populate it if (not %config) { sboconfig('-l', { test => 0, expected => sub { my $text = shift; foreach my $setting (keys %settings) { $text =~ /\Q$setting\E=(.*)/ and $config{$setting} = $1 // 'FALSE'; } }, }); } if (defined $value) { sboconfig($settings{$config}, $value, { test => 0 }); note "Saving original value of '$config': $config{$config}"; } else { sboconfig($settings{$config}, $config{$config}, { test => 0 }); } } my $made = undef; my $fname = "/usr/sbo/repo/SLACKBUILDS.TXT"; sub make_slackbuilds_txt { if (not -e $fname) { $made = 1; system('mkdir', '-p', '/usr/sbo/repo'); system('touch', $fname); } } sub restore_perf_dummy { if (!-e '/usr/sbo/distfiles/perf.dummy') { system('mkdir', '-p', '/usr/sbo/distfiles'); system('cp', "$RealBin/travis-deps/perf.dummy", '/usr/sbo/distfiles'); } } my $tags = 0; my $tags_txt = '/usr/sbo/repo/TAGS.txt'; sub replace_tags_txt { if (-e $tags_txt) { if (! $tags) { $tags = 2; system('mv', $tags_txt, "$tags_txt.bak"); } } else { $tags = 1 if $tags == 0; } system('mkdir', '-p', '/usr/sbo/repo'); open my $fh, '>', $tags_txt; print $fh $_ for @_; close $fh; } # Restore original values when exiting END { if (%config) { _set_config($_) for keys %settings; } if ($made) { system(qw!rm -rf!, $fname); } if ($tags) { system(qw!rm -rf !, $tags_txt); } if ($tags == 2) { system('mv', "$tags_txt.bak", $tags_txt); } if ($repo) { system(qw! rm -rf /usr/sbo/repo !); system('mv', "$RealBin/repo.backup", "/usr/sbo/repo"); } } 1;