commit - 7b334ef113973160fc72ab52809a495b42ae3816
commit + aacad1502bdc25fce80270271b31ead69c9c95b7
blob - 303b7c6a83de68f58b2afb8405acb8104d405a6a
blob + 75d6a2cd8392a418297e7d4e3d4c24a652381759
--- bin/configNow.pl
+++ bin/configNow.pl
use File::Basename;
use File::Path qw(make_path);
-use Git::Repository;
-use Git::Repository::Command;
-
my $shellname = shift || 'bnsnet';
my $username = shift || 'izzyb';
my $domain = 'user.planetofnix.com';
username => $username,
gitAuthor => $shellname,
gitEmail => $shellname . "@" . $domain,
- configNow => './configNow',
+ gitWorkDir => './configNow',
+ # configNow => './configNow',
ipv4 => '38.87.162.191',
ipv6 => '2602:fccf:1:1191::',
domain => $domain,
);
my $shellConfig = new IRCNOW::ConfigNow( %config );
-for my $module ($shellConfig->list()) {
- for my $file ($shellConfig->list($module)) {
- my $filename = $shellConfig->filename($file);
- my $path = dirname($filename);
- print "Making Directory: $path\n";
- make_path($path);
- print "Writing: $filename\n";
- open my $FH, ">>$filename";
- print $FH $shellConfig->output($file);
- close $FH;
- }
+if ($shellConfig->repo_ready()) {
+ $shellConfig->write_config();
+ $shellConfig->repo_commit();
}
-# Initialize the config repo if it hasn't been created yet.
-if (not -d $config{configNow}."/.git") {
- Git::Repository->run(init => $config{configNow});
-}
+# get a list of commits - one line per commit with id
+#$r->run(qw(git log --oneline));
-# Check status of untracked files.
-my $update=0; # Flag for changes to commit
-my $r = Git::Repository->new(
- work_tree => $config{configNow},
- {
- env => {
- GIT_COMMITTER_EMAIL => $config{gitEmail},
- GIT_COMMITTER_NAME => $config{gitAuthor},
- }
- }
-);
-my @output = $r->run(qw(status -su));
-for my $file (@output) {
- # XXX need to verify the file is managed
- # XXX what should happen with unmanaged files
- if ($file =~ /^\?\?\s+(.*)/) {
- $r->run('add', $1);
- print $config{configNow}."/$1\n";
- $update = 1;
- } elsif ($file =~ /^\s+M\s+/) {
- $update = 1;
- }
-}
+# Get list of files changed in a diff
+#$r->run(qw(git diff 0cd562e --name-only));
-if ($update) {
- $r->run('commit', '-a', '-m', 'configNow Auto Commit');
-}
-
blob - 0dcfca6d31b41f8534031d26c0fdb20ec5ada45c
blob + 6c24bf169e69c41dde01da8fd89c8663cd5a2aee
--- lib/IRCNOW/ConfigNow.pm
+++ lib/IRCNOW/ConfigNow.pm
use strict;
use warnings;
use Carp;
+
+use File::Basename;
+use File::Path qw(make_path);
+
+use Git::Repository;
+
+
sub new {
my $class = shift;
my $options = {@_};
my $self = {
vars =>$options, # options could be hash template values
modules =>{}, # ConfigNow Modules
+ repo =>undef, #
};
bless $self, $class;
# Load any modules passed in
} else {
# Lets assume they passed us a full module name.
if (not defined eval "require $module") {
-warn $@;
# Failed so try prepending IRCNOW::ConfigNow::
$module = "IRCNOW::ConfigNow::$module";
if (not defined eval "require $module") {
-warn $@;
croak "Failed to load $module";
}
}
}
+sub write_config {
+ my $self=shift;
+ return 0 unless $self->repo_ready();
+ for my $module ($self->list()) {
+ for my $file ($self->list($module)) {
+ my $filename = $self->filename($file);
+ my $path = dirname($filename);
+ print "Making Directory: $path\n";
+ make_path($path);
+ print "Writing: $filename\n";
+ #XXX add proper error handling
+ open my $FH, ">>$filename";
+ print $FH $self->output($file);
+ close $FH;
+ }
+ }
+ return 1;
+}
+
+sub repo_ready {
+ my $self=shift;
+ my $r = $self->{repo};
+ my $workDir=$self->{vars}->{gitWorkDir};
+ if( not defined $r ) {
+ if (not -d $workDir or not -d "$workDir/.git") {
+ # Initialize the config repo if it hasn't been created yet.
+ make_path($workDir);
+ Git::Repository->run(init => $workDir);
+ }
+ $r = $self->repo_connect();
+ return 0 unless defined $r;
+ }
+ # Have a repo created make sure its clean
+ my @status = $r->run(qw(status -su));
+ # Not ready if uncommited changes
+ return 0 if (scalar @status >0);
+ # Repo ready
+ return 1;
+}
+
+sub repo_connect {
+ my $self = shift;
+ my $config=$self->{vars};
+ return $self->{repo} if defined $self->{repo};
+ $self->{repo} = Git::Repository->new(
+ work_tree => $config->{gitWorkDir},
+ {
+ env => {
+ GIT_COMMITTER_EMAIL => $config->{gitEmail},
+ GIT_COMMITTER_NAME => $config->{gitAuthor},
+ },
+ },
+ );
+ # Ready for changes.
+ return $self->{repo};
+}
+
+sub repo_commit() {
+ my $self=shift;
+ my $r = $self->{repo};
+ my $workDir = $self->{vars}->{gitWorkDir};
+ # Check status of untracked files.
+ my $update=0; # Flag for changes to commit
+ my @output = $r->run(qw(status -su));
+ for my $file (@output) {
+ # XXX need to verify the file is managed
+ # XXX what should happen with unmanaged files
+ if ($file =~ /^\?\?\s+(.*)/) {
+ $r->run('add', $1);
+ print "$workDir/$1\n";
+ $update = 1;
+ } elsif ($file =~ /^\s+M\s+/) {
+ $update = 1;
+ }
+ }
+ if ($update) {
+ $r->run('commit', '-a', '-m', 'configNow Auto Commit');
+ }
+}
+
+
1;