aboutsummaryrefslogtreecommitdiff
path: root/SBO-Lib/lib/SBO/Lib/Readme.pm
diff options
context:
space:
mode:
Diffstat (limited to 'SBO-Lib/lib/SBO/Lib/Readme.pm')
-rw-r--r--SBO-Lib/lib/SBO/Lib/Readme.pm220
1 files changed, 0 insertions, 220 deletions
diff --git a/SBO-Lib/lib/SBO/Lib/Readme.pm b/SBO-Lib/lib/SBO/Lib/Readme.pm
deleted file mode 100644
index 1022c4a..0000000
--- a/SBO-Lib/lib/SBO/Lib/Readme.pm
+++ /dev/null
@@ -1,220 +0,0 @@
-package SBO::Lib::Readme;
-
-use 5.016;
-use strict;
-use warnings;
-
-our $VERSION = '2.8.0';
-
-use SBO::Lib::Util qw/ prompt script_error slurp open_read _ERR_OPENFH usage_error /;
-use SBO::Lib::Tree qw/ is_local /;
-
-use Exporter 'import';
-
-our @EXPORT_OK = qw{
- ask_opts
- ask_other_readmes
- ask_user_group
- get_opts
- get_readme_contents
- get_user_group
- user_prompt
-};
-
-our %EXPORT_TAGS = (
- all => \@EXPORT_OK,
-);
-
-=pod
-
-=encoding UTF-8
-
-=head1 NAME
-
-SBO::Lib::Readme - Routines for interacting with a typical SBo README file.
-
-=head1 SYNOPSIS
-
- use SBO::Lib::Readme qw/ get_readme_contents /;
-
- print get_readme_contents($sbo);
-
-=head1 SUBROUTINES
-
-=cut
-
-=head2 ask_opts
-
- my $opts = ask_opts($sbo, $readme);
-
-C<ask_opts()> displays the C<$readme> and asks if we should set any of the
-options it defines. If the user indicates that we should, we prompt them for
-the options to set and then returns them as a string. If the user didn't supply
-any options or indicated that we shouldn't, it returns C<undef>.
-
-=cut
-
-# provide an opportunity to set options
-sub ask_opts {
- # TODO: check number of args
- script_error('ask_opts requires an argument') unless @_;
- my ($sbo, $readme) = @_;
- say "\n". $readme;
- if (prompt("\nIt looks like $sbo has options; would you like to set any when the slackbuild is run?", default => 'no')) {
- my $ask = sub {
- chomp(my $opts = prompt("\nPlease supply any options here, or enter to skip: "));
- return $opts;
- };
- my $kv_regex = qr/[A-Z0-9]+=[^\s]+(|\s([A-Z]+=[^\s]+){0,})/;
- my $opts = $ask->();
- return() unless $opts;
- while ($opts !~ $kv_regex) {
- warn "Invalid input received.\n";
- $opts = $ask->();
- return() unless $opts;
- }
- return $opts;
- }
- return();
-}
-
-=head2 ask_other_readmes
-
- ask_other_readmes($sbo, $location);
-
-C<ask_other_readmes()> checks if there are other readmes for the C<$sbo> in
-C<$location>, and if so, asks the user if they should be displayed, and then
-displays them if the user didn't decline.
-
-=cut
-
-sub ask_other_readmes {
- my ($sbo, $location) = @_;
- my @readmes = sort grep { ! m!/README$! } glob "$location/README*";
-
- return unless @readmes;
-
- return unless prompt("\nIt looks like $sbo has additional README files. Would you like to see those too?", default => 'yes');
-
- for my $fn (@readmes) {
- my ($display_fn) = $fn =~ m!/(README.*)$!;
- say "\n$display_fn:";
- say slurp $fn;
- }
-}
-
-=head2 ask_user_group
-
- my $bool = ask_user_group($cmds, $readme);
-
-C<ask_user_group()> displays the C<$readme> and commands found in C<$cmds>, and
-asks the user if we should automatically run the C<useradd>/C</groupadd>
-commands found. If the user indicates that we should, it returns the C<$cmds>,
-otherwise it returns C<undef>.
-
-=cut
-
-# offer to run any user/group add commands
-sub ask_user_group {
- script_error('ask_user_group requires two arguments') unless @_ == 2;
- my ($cmds, $readme) = @_;
- say "\n". $readme;
- print "\nIt looks like this slackbuild requires the following";
- say ' command(s) to be run first:';
- say " # $_" for @$cmds;
- return prompt('Shall I run them prior to building?', default => 'yes') ? $cmds : undef;
-}
-
-=head2 get_opts
-
- my $bool = get_opts($readme);
-
-C<get_opts()> checks if the C<$readme> has any options defined, and if so
-returns a true value. Otherwise it returns a false value.
-
-=cut
-
-# see if the README mentions any options
-sub get_opts {
- script_error('get_opts requires an argument') unless @_ == 1;
- my $readme = shift;
- return $readme =~ /[A-Z0-9]+=[^\s]/ ? 1 : undef;
-}
-
-=head2 get_readme_contents
-
- my $contents = get_readme_contents($location);
-
-C<get_readme_contents()> will open the README file in C<$location> and return
-its contents. On error, it will return C<undef>.
-
-=cut
-
-sub get_readme_contents {
- script_error('get_readme_contents requires an argument.') unless @_ == 1;
- return undef unless defined $_[0];
- my $readme = slurp(shift . '/README');
- return $readme;
-}
-
-=head2 get_user_group
-
- my @cmds = @{ get_user_group($readme) };
-
-C<get_user_group()> searches through the C<$readme> for C<useradd> and
-C<groupadd> commands, and returns them in an array reference.
-
-=cut
-
-# look for any (user|group)add commands in the README
-sub get_user_group {
- script_error('get_user_group requires an argument') unless @_ == 1;
- my $readme = shift;
- my @cmds = $readme =~ /^\s*#*\s*(useradd.*?|groupadd.*?)(?<!\\)\n/msg;
- return \@cmds;
-}
-
-=head2 user_prompt
-
- my ($cmds, $opts, $exit) = user_prompt($sbo, $location);
-
-C<user_prompt()> checks for options and commands, to see if we should run them,
-and asks if we should proceed with the C<$sbo> in question.
-
-It returns a list of three values, and if the third one is a true value, the
-first indicates an error message. Otherwise, the first value will either be an
-C<'N'>, C<undef>, or an array reference. If it's C<'N'>, the user indicated
-that we should B<not> build this C<$sbo>. Otherwise it indicates if we should
-run any C<useradd>/C<groupadd> commands, or if it's C<undef>, that we
-shouldn't. The second return value indicates the options we should specify if
-we build this C<$sbo>.
-
-B<Note>: This should really be changed.
-
-=cut
-
-# for a given sbo, check for cmds/opts, prompt the user as appropriate
-sub user_prompt {
- script_error('user_prompt requires two arguments.') unless @_ == 2;
- my ($sbo, $location) = @_;
- if (not defined $location) { usage_error("Unable to locate $sbo in the SlackBuilds.org tree."); }
- my $readme = get_readme_contents($location);
- return "Could not open README for $sbo.", undef, _ERR_OPENFH if not defined $readme;
- if (is_local($sbo)) { print "\nFound $sbo in local overrides.\n"; }
- # check for user/group add commands, offer to run any found
- my $user_group = get_user_group($readme);
- my $cmds;
- $cmds = ask_user_group($user_group, $readme) if $$user_group[0];
- # check for options mentioned in the README
- my $opts = 0;
- $opts = ask_opts($sbo, $readme) if get_opts($readme);
- print "\n". $readme unless $opts;
- ask_other_readmes($sbo, $location);
- # we have to return something substantial if the user says no so that we
- # can check the value of $cmds on the calling side. we should be able to
- # assume that 'N' will never be a valid command to run.
- return 'N' unless prompt("\nProceed with $sbo?", default => 'yes');
- return $cmds, $opts;
-}
-
-1;