#!/usr/bin/env perl =head1 NAME website - Website repository CLI manager. =head1 SYNOPSIS website [options] Subcommands: pastebin Create a new pastebin from the org-mode template. slides Create a new HTML slideshow from the existing templates. test Run internal CLI tests. Options: --help Show the manpage. =head1 OPTIONS =over 4 =item B<-h, --help> Prints the manual page and exits. =back =head1 DESCRIPTION B is the top-level coordinator of subtasks inside the website repo. =cut use strict; use warnings; use Getopt::Long qw(:config no_ignore_case bundling pass_through); use Pod::Usage qw(pod2usage); use File::Basename qw(dirname); my $help = 0; my $title = ''; sub getopts { GetOptions( 'help|h|?' => \$help ); } sub test { die "FIXME"; } sub escaped_cmd { my ($cmd, @args) = @_; my $dirname = dirname(__FILE__); $cmd = "$dirname/$cmd"; $cmd = $cmd." \"$_\"", for @args; system($cmd); exit $? >> 8; } sub dispatch { my $action = shift; my @args = @_; if (!defined $action && $help) { pod2usage( -verbose => 2, -exitval => 0 ); } elsif (!defined $action) { print "Missing subcommand.\n"; pod2usage( -verbose => 1, -exitval => 2 ); } elsif ($action eq 'pastebin') { my @sub_args = grep { $_ ne $action } @args; escaped_cmd("pastebin/website-pastebin", @sub_args); } elsif ($action eq 'slides') { my @sub_args = grep { $_ ne $action } @args; escaped_cmd("slides/website-slides", @sub_args); } elsif ($action eq 'test') { test(); } else { print "Unknown subcommand: $action.\n"; pod2usage( -verbose => 1, -exitval => 2 ); } } sub main { my @orig_args=@ARGV; getopts(); my $action=shift @ARGV; dispatch($action, @orig_args); } main();