view lib/Slideshow/Util.pm @ 6:e35e9779078a

auto-Update generated slides by script
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 25 Jan 2018 16:59:37 +0900
parents e762bb571a45
children 7d3faa099bc6
line wrap: on
line source

package Slideshow::Util;
use strict;
use warnings;
use utf8;

use Carp qw/ croak /;

use base 'Exporter';

use Time::Piece;
use feature 'say';
use Path::Tiny;
use File::chdir;
use Capture::Tiny qw/capture/;

our @EXPORT = qw/
    getopts
    new
    set_template
    build_recently 
    build_pinpoint 
/;

sub getopts {
    my ($arg,$path)  = @_;

    unless (defined $arg){
        return { help => 1};
    }

    if ($arg eq "new") {
        return {new => 1};
    } elsif ( $arg eq "upload") {
       upload();
       exit;

    } elsif ( $arg eq "build") {

        if(defined $path){
            return { build_point=> $path};
        } else {
            return { build => "recent"};
        }

    } elsif ( $arg eq "upload"){
        return { upload => 1};

    } else {
        return { help => 1};
    }

}

sub set_template {
    my $template = shift;
    my $file  = path($template);
    return $file;
}

sub new {
    my ($template,$root_directory_name) = @_;
    my $root_dir = path($root_directory_name);
    my $t = localtime;

    # ex... 2018/02/14
    my $slide = $root_dir->child($t->strftime('%Y%m%d'). '/'.'slide.md')->touchpath;
    $template->copy($slide);
}


sub build_recently {
    my ($root_directory_name) = @_;
    my $root_dir = path($root_directory_name);
    my $t = localtime;

    my $recently = shift @{[sort { $b->stat->mtime <=> $a->stat->mtime } $root_dir->children]};

    _build($recently);
}

sub build_pinpoint {
    my $target = shift;

    my $target_path = path($target);

    my $dir = $target_path->dirname;
    my $slide = $target_path->basename;

   _build($dir,$slide); 
}


sub _build {
    my ($dir,$target) = @_;
    use Capture::Tiny;

    $target //= 'slide.md';


    local $CWD = $dir;

    my ($stdout,$stderr,$exit) = capture {
        system(" slideshow build ${target} -t s6cr");
    };

    if ($stderr){
        croak "Perl can't build....";
    }
}


sub upload {

    my ($stdout,$stderr,$exit) = capture {
        system("hg addremove");
        system("hg add");
    };

    unless($stderr){
        say $stdout;
    } else {
        croak "didn't commit";
    }

    ($stdout,$stderr,$exit) = capture {
        system('hg commit -m "auto-Update generated slides by script"');
    };

    unless($stderr){
        say "$stdout";
    } else {
        say $stderr;
        croak "didn't push";
    }
}

1;