integrity-checker.pl: strip newline from hash-file input
[sitka/sitka-tools.git] / deployment / integrity-checker.pl
index 2aa21ea..b35ace2 100755 (executable)
@@ -1,4 +1,6 @@
 #!/usr/bin/perl
+use strict;
+use warnings;
 # On Ubuntu, you'll want the following packages:
 # - libconfig-simple-perl
 # - libgit-repository-perl
@@ -13,7 +15,7 @@ use Git::Repository::Command;
 use Getopt::Long;
 use Data::Dumper;
 
-my ($help, $config_file, $all, $print_hashes, $repo_path, $check_files);
+my ($help, $config_file, $repo_path, $all, $check_files, $hash_file, $since, $git_output, $deployed_output);
 my $branch = 'HEAD';
 my $remote = 'origin';
 my @components;
@@ -29,8 +31,8 @@ GetOptions(
     'check-files'       => \$check_files,     # check deployed files
     'hash-file=s'       => \$hash_file,       # file containing git hashes (overrides --repo)
     'since=s'           => \$since,           # check only files modified since this time
-    'git-output=s'      => \$git_output,      # output file for git hashes (optional)
-    'deployed-output=s' => \$deployed_output  # output file for hashes of deployed files (optional)
+    'print-git-hashes=s'      => \$git_output,      # output file for git hashes (optional)
+    'print-deployed-hashes=s' => \$deployed_output  # output file for hashes of deployed files (optional)
 );
 
 if ($help) {
@@ -78,14 +80,7 @@ HELP
 }
 
 # specify all possible components (--all option);
-# it would be better to pull all block labels from the config file,
-# but that's not possible with Config::Simple
-@components = qw/perl tt2 web xul misc/ if ($all);
-
-# load config
-die "No config file specified\n" unless ($config_file);
-die "Config file does not exist\n" unless (-r $config_file and -s $config_file);
-my $cfg = new Config::Simple($config_file);
+@components = split('\n', `./access_pathmap.pl --config $config_file`) if ($all);
 
 if ($git_output) {
     open (GITOUTPUT, '>>', $git_output) or die "Could not open $git_output: $!\n";
@@ -100,6 +95,7 @@ my %git_hashes;
 if ($hash_file) {
     open (HASHFILE, '<', $hash_file) or die "Could not open $hash_file: $!\n";
     while (<HASHFILE>) {
+        chomp;
         my ($hash, $file) = split(/\s+/, $_, 2);
         $git_hashes{$file} = $hash;
     }
@@ -107,7 +103,7 @@ if ($hash_file) {
 }
 
 foreach my $component (@components) {
-    my $paths = $cfg->get_block($component);
+    my @paths = split('\n', `./access_pathmap.pl --config $config_file --component $component`);
 
     # if no hash file was supplied, grab git hashes from repo
     if (!$hash_file) {
@@ -125,7 +121,7 @@ foreach my $component (@components) {
         }
 
         # get hashes from git
-        foreach my $srcpath (keys %$paths) {
+        foreach my $srcpath (@paths) {
             # use git-ls-tree to traverse the file tree starting at $srcpath
             # e.g. `git ls-tree -r HEAD Open-ILS/src/perlmods/lib`
             my @tree = $repo->run( 'ls-tree' => '-r', $branch, $srcpath );
@@ -139,16 +135,16 @@ foreach my $component (@components) {
 
     # check deployed files
     if ($check_files || $deployed_output) {
-        foreach my $srcpath (keys %$paths) {
-            my $destpath = $paths->{$srcpath};
-            my @files;
+        foreach my $srcpath (@paths) {
+            my $destpath = `./access_pathmap.pl --config $config_file --component $component --srcpath $srcpath`;
 
             # for each file in the destination path, push the file's absolute path to @files;
             # output will include symlinked files, but will not include directories
+            # clear @files for each time through loop
+            my @files = ();
             find( { wanted => sub { push @files, $_ if -f }, follow => 1, no_chdir => 1 }, $destpath );
 
             foreach my $file (@files) {
-
                 if ($since) {
                     # convert $since to seconds since epoch
                     my $since_ts = UnixDate($since, '%s');
@@ -173,7 +169,7 @@ foreach my $component (@components) {
                         print "modified\t$file\n";
                     }
                 }
-                print DEPLOYEDOUTPUT $hash, "\t", $filename, "\n" if ($deployed_output);
+                print DEPLOYEDOUTPUT $hash, "\t", $file, "\n" if ($deployed_output);
 
             }
         }