https://git.spwbk.site/swatson/git-site-gen/raw/master/gsg
___________________________________
#!/usr/bin/perl

use strict;
use warnings;

use Getopt::Long qw(GetOptions);
use Log::Log4perl qw(:easy);
use lib "/usr/local/lib";
use Shellex::Shellex qw(shellex findBin);
use Gsg::ConfigParse qw(parse_gsg_config);
use Gsg::Gather qw(get_file_tree get_projects trim_project_paths);
use Gsg::Html qw(write_file append_file write_root_index clean_web_root write_project_content);

my $start_time = time();

# TODO set this in config file?
my $log_file = "gsg.log";
sub get_log_name { return $log_file; };
my $log_conf = q(
       log4perl.rootLogger              = ERROR, LOG1, screen
       log4perl.appender.LOG1           = Log::Log4perl::Appender::File
       log4perl.appender.LOG1.filename  = sub { get_log_name(); }
       log4perl.appender.LOG1.mode      = append
       log4perl.appender.LOG1.layout    = Log::Log4perl::Layout::PatternLayout
       log4perl.appender.LOG1.layout.ConversionPattern = %d %p >> %m %n

       log4perl.appender.screen = Log::Log4perl::Appender::Screen
       log4perl.appender.screen.stderr = 0
       log4perl.appender.screen.layout = PatternLayout
       log4perl.appender.screen.layout.ConversionPattern = %d %p >> %m %n
);

Log::Log4perl::init(\$log_conf);
my $logger = get_logger();

# Args processing: TODO
my %args;
GetOptions(
       \%args,
       "config-file=s",
       "version",
);

my $version = "0.1";
if ( defined $args{'version'} ) {
       print "git-site-gen: Version $version\n";
       exit 0;
}
# Read config
my $config_file;
if ( ! defined $args{'config-file'} ) {
       $config_file = "config.default";
} else {
       $config_file = $args{'config-file'};
}

my %config = parse_gsg_config($config_file,$logger);

# Set default vars
my $web_root = $config{'WebRoot'};
my $web_projects_dir = $web_root . "/projects/";
my $root_index = $web_root . "/" . "index.html";

# Really just here for testing right now
sub dump_config {
       foreach my $key ( keys %config ) {
               if ( $key eq "IgnoredProjects" ) {
                       print "$key contains:\n";
                       foreach my $val ( @{$config{$key}} ) {
                               print "$val\n";
                       }
               } else {
                       print "Key is $key and val is $config{$key}\n";
               }
       }
}

dump_config();

# Get projects list
my $git_projects_ref = get_projects($config{'GitHome'},$config{'IgnoredProjects'},$logger);
foreach my $p ( @$git_projects_ref ) {
       print "Generating for $p\n";
}

# Get trimmed (name only) git projects
my $trimmed_git_projects_ref = trim_project_paths($git_projects_ref,$logger);

# Clean webroot if there is anything we no longer want to display
# clean_web_root($web_projects_dir,$trimmed_git_projects_ref,$logger);

# Write root index
write_root_index($root_index,$trimmed_git_projects_ref,$web_projects_dir,$logger);

# Write project contents
my $clone_path;
if ( $config{'CloneEnabled'} eq "yes" ) {
       $clone_path = $config{'ClonePath'};
} else {
       $clone_path = "Disabled";
}

write_project_content($git_projects_ref,$trimmed_git_projects_ref,$web_projects_dir,$clone_path,$logger);
my $end_time = time();
my $run_time = $end_time - $start_time;
print "Took $run_time seconds\n";
$logger->info("Done");