+#!/usr/bin/env perl
+
+use strict;
+use File::Basename;
+# use File::Find::Rule;
+# use Data::Dumper;
+use Getopt::Long;
+use Cwd;
+use POSIX qw (strftime);
+my $basepath = "/Volumes/Macintosh2 HD/backup/1-Neuer Server";
+my $logfile = "/Volumes/Macintosh2 HD/log/githelper.".strftime("%Y%m%d",localtime()).".log";
+open(LOG,">>".$logfile);
+# my @wksp = ($ENV{HOME}.'/Workspace',$ENV{HOME}.'/Workspace/Websites',$ENV{HOME}.'/Workspace/Apps');
+# if ($^O eq "MSWin32"){
+# @wksp = ($ENV{USERPROFILE}.'/Workspace',$ENV{USERPROFILE}.'/Workspace/Websites',$ENV{HOME}.'/Workspace/Apps');
+# $wksp[0] =~ s/\\/\//g;
+# $wksp[1] =~ s/\\/\//g;
+# $wksp[2] =~ s/\\/\//g;
+# }
+my $get = 0;
+my $set = 0;
+my $check = 0;
+GetOptions("get" => \$get,"set" => \$set, "check" => \$check);
+#print $wksp."\n";
+#print ."\n";
+my $git='/usr/local/bin/git';
+if ($check == 1){
+ my @testgit = `find "$basepath" -type d -depth 2`;
+ foreach my $t (@testgit){
+ chomp($t);
+ if (($t =~ /^$basepath\/.=/) && (! -d $t.'/.git')){
+ if (basename($t) =~ /^\w+\d\d\d\d\w+/ ){
+ chdir($t) or die "cannot change dir to '$t'!";
+ print LOG "automated git init: '$t'\n";
+ my $ret = `$git init`;
+ print LOG $ret."\n";
+ }else {
+ print LOG "Needs MANUAL git init: '$t'\n";
+ }
+ }
+
+ }
+}
+
+if ($get == 1){
+ my @rep = `find "$basepath" -type d -depth 3 -name ".git"`;
+ foreach my $r (@rep){
+ chomp($r);
+ $r = dirname($r);
+ if (! -d $r.'/.git'){
+ print LOG "$r: Nothing to do! Not a GIT-Repository!\n";
+ next();
+ }
+ print LOG "repo:sitory ".$r."!\n";
+ chdir($r) or die "cannot change dir to '$r'!";
+ #print "CWD:".getcwd()."\n";
+ my $ret = `$git status`;
+ #my $ret = `git pull`;
+ print LOG $ret."\n---\n";
+ }
+}
+if ($set == 1){
+my @rep = `find "$basepath" -type d -depth 3 -name ".git"`;
+foreach my $r (@rep){
+ chomp($r);
+ $r = dirname($r);
+ if (! -d $r.'/.git'){
+ print LOG "$r: Nothing to do! Not a GIT-Repository!\n";
+ next();
+ }
+ chdir($r) or die "cannot change dir to '$r'!";
+ my $ret = `$git status`;
+ if ($ret =~ /nothing to commit, working tree clean/){
+ print LOG "repository ".basename($r)." OK!\n";
+ next;
+ } elsif (($ret =~ /Changes not staged for commit/) || ($ret =~ /Untracked files/)){
+ print LOG "repository ".basename($r)." changes to add,commit and push!\n";
+ my $add = `$git add -A`;
+ print LOG "Data Added:".$add."\n";
+ my $msg = "Version ".strftime("%Y-%m-%d %H:%M",localtime());
+ my $commit = `$git commit -m "$msg"`;
+ print LOG "Data Commited:".$commit."\n";
+ #my $push = `$git push`;
+ #if ($push =~ /\!\s\[rejected\]/){
+ # my $pull = `git pull`;
+ # print "Data pulled:".$pull."\n";
+ # $push = `git push`;
+ # print "Data pushed:".$push."\n";
+ #}
+ $ret = `$git status`;
+ print LOG $ret."\n---\n";
+ }
+}
+}
+close(LOG);