common/tools/cachefiles.pl
changeset 168 bf91a7e3c25b
parent 166 32693583e769
child 227 ab5a0930b5c8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/cachefiles.pl	Fri Jun 19 16:13:48 2009 +0100
@@ -0,0 +1,128 @@
+#!/usr/bin/perl
+
+
+use strict;
+
+#my $cache = "d:/HG_cache/";
+#my $master = "//v800008/Builds01/";
+my $cache = shift @ARGV;
+my $csv = shift @ARGV;
+my $generated = shift @ARGV;
+my @recover;
+my @nospace;
+my $exitcode = 0;
+
+if(defined $cache && defined $generated && defined $csv)
+{ 
+  print "Cache:$cache\nIn:$csv\nOut:$generated\n";
+  
+  # Format the cache directory path
+  if ( $cache !~ /(.*)[\\\/]$/ )
+  {
+	$cache .= "/";
+  }
+  
+  open(IN, "<$csv") or die "Couldn't open $csv for reading";
+  open(OUT,">$generated") or die "Couldn't open $generated for writing";
+  my $header = <IN>;
+  print OUT $header;
+  while( my $line = <IN>)
+  {
+    my @args = split(',',$line);
+    my $repo = shift @args;
+	my $master = "";
+	if ( $repo =~ m/^(.*\/)((oss|rnd|sfl)\/.*\/)$/i )
+	{
+		$master = $1;
+		$repo = $2;
+	}
+    if(-d $master.$repo.".hg")
+    {
+  #    print "Found:\t".$master.$repo.".hg\n";
+      my $cmd;
+      if(-d $cache.$repo.".hg") # update
+      {
+        $cmd = "hg pull -R $cache$repo $master$repo";
+      }
+      else #clone
+      {
+        #taken from the normal clone script...
+        my @dirs = split ('\/', $cache.$repo);
+        my $destdir = pop @dirs;
+        my $path = "";    
+        foreach my $dir (@dirs)
+          {
+          $path = ($path eq "") ? $dir : "$path/$dir";
+          if (!-d $path)
+            {
+            mkdir $path;
+            }
+          }
+            
+        $cmd = "hg clone -U $master$repo $cache$repo";
+      }  
+      if(cache($cmd))
+        {
+          print OUT $cache.$repo.",".join(',', @args);
+        }
+      else
+        {
+           print OUT $master.$repo.",".join(',', @args);
+		   $exitcode = 1;
+        }
+    }
+    else
+    {
+      print "Error: cannot find ".$master.$repo.".hg\n";
+	  $exitcode = 1;
+    }
+  }
+  
+  close OUT;
+  close IN;
+}
+else
+{
+  print "Usage: <cache_path> <source_csv> <generated_csv>";
+  $exitcode = 1;
+}
+
+foreach my $line (@recover)
+{
+  print "WARNING: HG Recover: $line\n";
+}
+foreach my $line (@nospace)
+{
+  print "WARNING: No Space: $line\n";
+}
+
+exit $exitcode;
+
+sub cache($cmd)
+{
+  my $cmd = shift;
+  print "$cmd\n";
+  
+  open(CMD, "$cmd 2>&1 |") or die "Couldn't execute $cmd";
+  while(my $line = <CMD>)
+  {
+#    print $line;
+    # parse the output for failures. On fail return 0;
+    if($line =~ m/abort/i)
+    {
+      print $line;
+      if($line =~ m/hg\s+recover/i)
+      {
+        push(@recover, $cmd);
+      }
+      elsif($line =~ m/No\s+space/i)
+      {
+        push(@nospace, $cmd);
+      }
+      close CMD;
+      return 0;
+    }    
+  }
+  close CMD;
+  return 1;
+}
\ No newline at end of file