|
@@ -5,13 +5,15 @@ use Log::Log4perl qw(:easy);
|
|
|
use lib ".";
|
|
|
use SimplyGit::Shellex qw(shellex findBin);
|
|
|
use Exporter qw(import);
|
|
|
-our @EXPORT_OK = qw(readConfig getStatus returnState addFiles commitChanges pushChanges stashAndReset resetFromUpstream);
|
|
|
+our @EXPORT_OK = qw(readConfig getStatus returnState addFiles commitChanges pushChanges stashAndReset resetFromUpstream updateGitIgnore);
|
|
|
|
|
|
-sub readConfig {
|
|
|
+# TODO: Handle "optional" passing of logger object
|
|
|
+# Need to identify which subs are called before the logger object is initialized ( if any )
|
|
|
+# and then required the logger object arg for all who don't fit that usecase
|
|
|
+# TODO: Add info/debug logging for all subroutines
|
|
|
+
|
|
|
+sub checkPath {
|
|
|
|
|
|
- # This sub is probably not really needed for what I'm trying to do
|
|
|
- # git itself already parses this config...but an interesting exercise non the less
|
|
|
- # and may be useful later
|
|
|
my $path = shift;
|
|
|
my $logger = shift;
|
|
|
if ( ! -d $path ) {
|
|
@@ -23,7 +25,29 @@ sub readConfig {
|
|
|
exit 1;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+sub returnConfigPath {
|
|
|
+
|
|
|
+ my $path = shift;
|
|
|
+ my $logger = shift;
|
|
|
+ checkPath($path,$logger);
|
|
|
+
|
|
|
my $gitConfigPath = $path . "/" . ".git/config";
|
|
|
+ return $gitConfigPath;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+sub readConfig {
|
|
|
+
|
|
|
+ # This sub is probably not really needed for what I'm trying to do
|
|
|
+ # git itself already parses this config...but an interesting exercise non the less
|
|
|
+ # and may be useful later
|
|
|
+ my $path = shift;
|
|
|
+ my $logger = shift;
|
|
|
+ my $gitConfigPath = returnConfigPath($path,$logger);
|
|
|
my $catCmd = findBin("cat",$logger);
|
|
|
my @configLines = split("\n",shellex("$catCmd $gitConfigPath",$logger));
|
|
|
# Key is config header, value is hash ref containing config values
|
|
@@ -176,6 +200,34 @@ sub resetFromUpstream {
|
|
|
|
|
|
}
|
|
|
|
|
|
+sub updateGitIgnore {
|
|
|
+
|
|
|
+ my $path = shift;
|
|
|
+ # Maybe better to accept an array of values
|
|
|
+ my $ignoreValue = shift;
|
|
|
+ my $logger = shift;
|
|
|
+ checkPath($path,$logger);
|
|
|
+ my $filename = $path . "/" . ".gitignore";
|
|
|
+ # Make sure we're not appending/writing if entry already exists in gitignore
|
|
|
+ if ( -f $filename ) {
|
|
|
+ my $catCmd = findBin("cat",$logger);
|
|
|
+ my @ignoreLines = split("\n",shellex("$catCmd $filename",$logger));
|
|
|
+ if ( ! grep( /^$ignoreValue$/, @ignoreLines ) ) {
|
|
|
+ # TODO: What if logger object is not passed in?
|
|
|
+ open(my $fh, ">>", $filename) or die $logger->error("Couldn't open $filename, exiting...");
|
|
|
+ chomp $ignoreValue;
|
|
|
+ print $fh "$ignoreValue\n";
|
|
|
+ close $fh;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ open(my $fh, ">", $filename) or die $logger->error("Couldn't open $filename, exiting...");
|
|
|
+ chomp $ignoreValue;
|
|
|
+ print $fh "$ignoreValue\n";
|
|
|
+ close $fh;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
sub appendRepoUserConfig {
|
|
|
|
|
|
|