falling back if which is not a valid command.
[feisty_meow.git] / scripts / archival / shared_snarfer.pl
index 0a37bf093a29d71a5ab4b001ed7da7cd26bc7ae9..998cc5f72bd55abd84b5e145aab7f598e832b3ed 100644 (file)
@@ -26,6 +26,7 @@ require "importenv.pl";
 require "inc_num.pl";
 
 use Cwd;
+use File::Which;
 
 #hmmm: maybe move this to a utility script file.
 $null_log = "/dev/null";
@@ -45,7 +46,8 @@ $TMP =~ s/\\/\//g;  # fix the temp variable for ms-winders.
 # these files are considered unimportant and won't be included in the archive.
 @junk_file_list = ("*~", "*.$$$", "3rdparty", "*.aps", "*.bak", "binaries",
     "*.bsc", "*.cgl", "*.csm", "CVS", "Debug", "*.dll", "*.err", "*.exe",
-    "generated_*", "*.glb", "inprogress", "ipch", "*.llm", "*.log", "*.lnk",
+    "generated_*", "*.git", "*.glb", "inprogress", "ipch", "*.llm",
+    "*.log", "*.lnk",
     "makefile.fw*", "*.mbt", "*.mrt", "*.ncb", "*.o", "obj", "*.obj",
     "octalforty.Wizardby", "*.obr", "*.opt", "packages", 
     "*.pch", "*.pdb", "*.plg", "*.r$p", "*.rcs", "Release",
@@ -53,7 +55,6 @@ $TMP =~ s/\\/\//g;  # fix the temp variable for ms-winders.
     "*.sdf", "*.suo", ".svn", "*.sym", "*.td", "*.tds", "*.tdw", "*.tlb",
     "*.trw", "*.tmp", "*.tr", "*.user", "*_version.h", "*_version.rc",
     "*.vspscc", "waste");
-###, "*.wav"
 #print "junk list=@junk_file_list\n";
 @excludes = ();
 for (local($i) = 0; $i < scalar(@junk_file_list); $i++) {
@@ -62,18 +63,8 @@ for (local($i) = 0; $i < scalar(@junk_file_list); $i++) {
 #print "excludes list=@excludes\n";
 
 # generic versions work on sane OSes.
-$find_tool = `which find`; chop $find_tool;
-$tar_tool = `which tar`; chop $tar_tool;
-
-# pick a more specific version for windows.
-if ( ("$OS" =~ /[wW][iI][nN]/) || ("$OS" =~ /[Oo][Ss]2/)
-    || ("$OS" =~ /[Dd][Oo][Ss]/) ) {
-  $top_level = "$BUILD_TOP";
-  $msys_folder = "$top_level/build/msys/bin";
-  $find_tool = "$msys_folder/find.exe";
-  $tar_tool = "$msys_folder/tar.exe";
-}
-
+$find_tool = which('find');
+$tar_tool = which('tar');
 #print "find tool: $find_tool\n";
 #print "tar tool: $tar_tool\n";
 
@@ -100,22 +91,14 @@ sub short_hostname {
 # a timestamp and hostname.
 sub snarf_prefix {
   local($base) = @_;
-  local($extra_path) = "";
+  $date_tool = "date";
+
   if ($OS =~ /win/i) {
-    if (length($MINGBIN)) {
-      # we rely on the ming binary path on windows, since otherwise a strange
-      # interaction between perl and windowz causes 'date' to use the retarded
-      # windows date program, even with the ming binaries in the path before
-      # the windows directory.
-      $extra_path = "$MINGBIN/";
-#print "ming path here is:\n$MINGBIN\n";
-    } else {
-      # just hope that this is running under msys in our build bin.
-      $extra_path = "$HOME/hoople2/build/msys/bin/";
-    }
+    # just hope that this is running under msys in our build bin.
+    $date_tool = "$PRODUCTION_DIR/msys/bin/date";
   }
 
-  local($date_part) = `${extra_path}date +%Y-%m-%d-%H%M`;
+  local($date_part) = `$date_tool +%Y-%m-%d-%H%M`;
   while ($date_part =~ /[\r\n]$/) { chop $date_part; }
   local($host) = &short_hostname();
   while ($host =~ /[\r\n]$/) { chop $host; }
@@ -194,7 +177,7 @@ sub snarfer {
   chdir($root);
 
   local($outcome) = 0;
-  my @lines = qx( $find_tool $subdir @extra_flags "-type" "f" );
+  my @lines = qx( $find_tool "$subdir" @extra_flags "-type" "f" );
 #  if ( ($! != 0) || ($? != 0) ) {
 #    die("failure to find files in $subdir"); 
 #  }
@@ -341,22 +324,30 @@ sub backup_hierarchies {
   }
 }
 
-# grab up all the files in a directory (first parm) that are named matching
-# a simple text pattern (second parm).
+# grab up all the files in a directory (second parm) that are named matching
+# a simple text pattern (third parm).  if there is a fourth parameter, it is
+# used as an extra directory component after the main directory.
 sub snarf_by_pattern {
-  local($dir, $pattern) = @_;
+  local($prefix, $dir, $pattern, $extra_component) = @_;
 #  print "dir = $dir and patt = $pattern\n";
+  $extra_piece = "";
+  $dir_for_hierarchy = ".";
+  if (length($extra_component)) {
+    $extra_piece = "/" . $extra_component;
+    $dir_for_hierarchy = $extra_component;
+  }
 
-  @dir_contents = &glob_list("$dir/*$pattern*"); 
+  @dir_contents = &glob_list("$dir$extra_piece/*$pattern*"); 
 #  print "dir contents: @dir_contents\n";
 
   if (!scalar(@dir_contents)) {
-    print "no $pattern directores were backed up in $dir.\n";
+    print "no '$pattern' directores were backed up in $dir.\n";
   }
+  
   foreach $item (@dir_contents) {
     if ( ($item =~ /$pattern.*snarf/) || ($item =~ /$pattern.*tar/) ) { next; }
     if ( ! -d "$item" ) { next; }
-    &backup_hierarchy($base, $number, $item, ".");
+    &backup_hierarchy($prefix, $number, $dir, "$dir_for_hierarchy" . "/" . &basename($item));
   }
 }
 
@@ -466,7 +457,7 @@ sub restore_archive {
   if ($outcome) { die("failure to undo archive"); }
 
   local($outcome) =
-      0xff & system "bash", "$SHELLDIR/files/normal_perm.sh", ".";
+      0xff & system "bash", "$FEISTY_MEOW_SCRIPTS/files/normal_perm.sh", ".";
   if ($outcome) { die("failure to normalize permissions"); }
 
   # remove any links that might have crept in; these can cause mischief.