added missing 3rdparty and example_apps
[feisty_meow.git] / scripts / archival / shared_snarfer.pl
index 998cc5f72bd55abd84b5e145aab7f598e832b3ed..91ee6d75a83c9f1f32183613a8b6c8517470ad92 100644 (file)
 ###############################################################################
 
 require "filename_helper.pl";
-require "hostname.pl";
-require "importenv.pl";
 require "inc_num.pl";
 
 use Cwd;
+use Sys::Hostname;
 use File::Which;
+use Env qw(FEISTY_MEOW_SCRIPTS TMP);
 
-#hmmm: maybe move this to a utility script file.
 $null_log = "/dev/null";
-#hmmm: move especially this check to a script file, and recast anything
-#      referring to Windows_NT to it.
-if ( ("$OS" =~ /[wW][iI][nN]/) || ("$OS" =~ /[Oo][Ss]2/)
-    || ("$OS" =~ /[Dd][Oo][Ss]/) ) {
-  $null_log = "nul"
-}
-#print "nul log=$null_log \n";
 
 $TMP =~ s/\\/\//g;  # fix the temp variable for ms-winders.
 
@@ -44,7 +36,7 @@ $TMP =~ s/\\/\//g;  # fix the temp variable for ms-winders.
 @missing_log = ();
 
 # these files are considered unimportant and won't be included in the archive.
-@junk_file_list = ("*~", "*.$$$", "3rdparty", "*.aps", "*.bak", "binaries",
+@junk_file_list = ("*~", "*.$$$", "*.aps", "*.bak", "binaries",
     "*.bsc", "*.cgl", "*.csm", "CVS", "Debug", "*.dll", "*.err", "*.exe",
     "generated_*", "*.git", "*.glb", "inprogress", "ipch", "*.llm",
     "*.log", "*.lnk",
@@ -52,9 +44,10 @@ $TMP =~ s/\\/\//g;  # fix the temp variable for ms-winders.
     "octalforty.Wizardby", "*.obr", "*.opt", "packages", 
     "*.pch", "*.pdb", "*.plg", "*.r$p", "*.rcs", "Release",
     "*.res", "*.RES", "*.rws", "*.sbr", "*.scc", "*.spx", "*.stackdump",
+    "Steam",
     "*.sdf", "*.suo", ".svn", "*.sym", "*.td", "*.tds", "*.tdw", "*.tlb",
     "*.trw", "*.tmp", "*.tr", "*.user", "*_version.h", "*_version.rc",
-    "*.vspscc", "waste");
+    "*.vspscc", "waste", "zeitgeist");
 #print "junk list=@junk_file_list\n";
 @excludes = ();
 for (local($i) = 0; $i < scalar(@junk_file_list); $i++) {
@@ -82,7 +75,8 @@ sub initialize_snarfer {
 
 # returns the current hostname, but without any domain included.
 sub short_hostname {
-  local($temphost) = &hostname();
+  local($temphost) = hostname();
+#&hostname();
   $temphost =~ s/([^.]*)\..*/\1/;
   return &lower($temphost);
 }
@@ -91,15 +85,12 @@ sub short_hostname {
 # a timestamp and hostname.
 sub snarf_prefix {
   local($base) = @_;
-  $date_tool = "date";
-
-  if ($OS =~ /win/i) {
-    # just hope that this is running under msys in our build bin.
-    $date_tool = "$PRODUCTION_DIR/msys/bin/date";
-  }
 
+#hmmm: extract this shared code to new function (also in safedel)
+  $date_tool = "date";
   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; }
   $base = $base . "_" . $host . "_" . $date_part;
@@ -177,7 +168,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 "-follow" "-type" "f" );
 #  if ( ($! != 0) || ($? != 0) ) {
 #    die("failure to find files in $subdir"); 
 #  }
@@ -193,8 +184,10 @@ sub snarfer {
   }
 
   local($outcome) = 0xff & system $tar_tool, 
-      "-rf", &msys_canonicalize($target_file), @excludes,
-      "--files-from=" . &msys_canonicalize($temp_file);
+#hmmm: trying to dereference symbolic links and stop missing stuff.
+"-h",
+      "-rf", &canonicalize($target_file), @excludes,
+      "--files-from=" . &canonicalize($temp_file);
   if ($outcome) {
     unlink($temp_file);
     die("failure to archive");
@@ -217,6 +210,7 @@ sub snarf_file_list {
   local($target_file) = &snarf_name($prefix, $number);
 
   local($currdir) = cwd();
+#print "got root as: '$root'\n";
   chdir("$root");
 
   local(@files) = &glob_list($file_pattern);
@@ -233,7 +227,11 @@ sub snarf_file_list {
     }
     local($outcome) = 0xff & system $tar_tool,
 #"--directory=" . "$root",
-        @extra_flags, "-rf", &msys_canonicalize($target_file), @excludes, $i;
+
+#hmmm: trying to dereference symbolic links and stop missing stuff.
+"-h",
+        @extra_flags, 
+"-rf", &canonicalize($target_file), @excludes, $i;
     if ($outcome) { die("failure to archive"); }
   }
   chdir("$currdir");
@@ -269,7 +267,7 @@ sub remove_from_backup {
 #print "remove_from_backup: pref=$prefix, num=$number, patt=$pattern,\n";
   local($target_file) = &snarf_name($prefix, $number);
 
-  open(TARPROC, "$tar_tool --delete -f " . &msys_canonicalize($target_file)
+  open(TARPROC, "$tar_tool --delete -f " . &canonicalize($target_file)
       . " \"$pattern\" 2>$null_log |");
   <TARPROC>;
 }
@@ -329,16 +327,13 @@ sub backup_hierarchies {
 # used as an extra directory component after the main directory.
 sub snarf_by_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;
+  local($had_extra) = length($extra_component) != 0;
+#print "snarf by pattern, dir = $dir, patt = $pattern, extra = $extra_component\n";
+  if ($had_extra) {
+    $dir = "$dir/$extra_component";
   }
-
-  @dir_contents = &glob_list("$dir$extra_piece/*$pattern*"); 
-#  print "dir contents: @dir_contents\n";
+  @dir_contents = &glob_list("$dir/*$pattern*"); 
+#print "dir contents: @dir_contents\n";
 
   if (!scalar(@dir_contents)) {
     print "no '$pattern' directores were backed up in $dir.\n";
@@ -347,7 +342,17 @@ sub snarf_by_pattern {
   foreach $item (@dir_contents) {
     if ( ($item =~ /$pattern.*snarf/) || ($item =~ /$pattern.*tar/) ) { next; }
     if ( ! -d "$item" ) { next; }
-    &backup_hierarchy($prefix, $number, $dir, "$dir_for_hierarchy" . "/" . &basename($item));
+#print "now really planning to backup hier of $item\n";
+    # normal backup had no extra component.
+    local $upper_dir = &dirname($item);
+    local $dir_plus_base = &basename($item);
+    # if we did have an extra component, we do this a bit differently.
+    if ($had_extra) {
+      $upper_dir = &dirname( &dirname($item) );
+      $dir_plus_base = &basename( &dirname($item) ) . "/" . &basename($item);
+    }
+#print "using upper=$upper_dir and dir+base=$dir_plus_base\n";
+    &backup_hierarchy($prefix, $number, $upper_dir, $dir_plus_base);
   }
 }
 
@@ -375,7 +380,7 @@ sub backup_number {
   chdir($TMP);
 
   local($outcome) = 0xff & system $tar_tool, "-cf",
-      &msys_canonicalize($target_file), &msys_canonicalize($number_file);
+      &canonicalize($target_file), &canonicalize($number_file);
   if ($outcome) { die("failure to archive"); }
 
   local($prefix_file) = "prefix.bac";
@@ -383,8 +388,13 @@ sub backup_number {
   print NUM_PREFIX $number_prefix;
   close(NUM_PREFIX);
 
-  $outcome = 0xff & system $tar_tool, "-rf",
-      &msys_canonicalize($target_file), &msys_canonicalize($prefix_file);
+  $outcome = 0xff & system $tar_tool, 
+
+#hmmm: trying to dereference symbolic links and stop missing stuff.
+"-h",
+
+"-rf",
+      &canonicalize($target_file), &canonicalize($prefix_file);
   if ($outcome) { die("failure to archive"); }
   unlink($prefix_file);
   chdir($currdir);
@@ -453,11 +463,11 @@ sub restore_archive {
   }
 
   local($outcome) = 0xff & system $tar_tool, "-xzf",
-      &msys_canonicalize($filename);
+      &canonicalize($filename);
   if ($outcome) { die("failure to undo archive"); }
 
   local($outcome) =
-      0xff & system "bash", "$FEISTY_MEOW_SCRIPTS/files/normal_perm.sh", ".";
+      0xff & system "bash", "$FEISTY_MEOW_SCRIPTS/security/normal_perm.sh", ".";
   if ($outcome) { die("failure to normalize permissions"); }
 
   # remove any links that might have crept in; these can cause mischief.