common/tools/bitops.pl
changeset 1180 332c5195337a
parent 1176 5fcaa694186a
child 1182 f15fa527df95
--- a/common/tools/bitops.pl	Tue Jul 13 16:42:35 2010 +0100
+++ b/common/tools/bitops.pl	Wed Jul 14 11:39:59 2010 +0100
@@ -13,12 +13,14 @@
 my $id = '';
 my $file = '';
 my $verbose = 0;
+my $dryrun = 0;
 GetOptions((
 	'create!' => \$create,
 	'file=s' => \$file,
 	'id=s' => \$id,
 	'help!' => \$help,
-	'verbose!' => \$verbose
+	'verbose!' => \$verbose,
+	'dryrun!' => \$dryrun,
 ));
 
 if ($help||!$file)
@@ -38,6 +40,9 @@
                         provided in FILE.
   -f FILE, --file FILE  Use attributes in FILE to create/update the build info
                         See below for file format.
+  -v, --verbose         Increase info level
+  -d, --dryrun          Only show what would happen, do not actually interact
+                        with the DB
   
 File format:
   File must be a list of attribute-value-pairs. One avp per line, on each line
@@ -58,6 +63,7 @@
   - failure (CATEGORY,COUNT)
   - report (NAME,URL,TYPE)
   - content (NAME,URL,REVISION)
+  - baseline (TYPE,PATH)
   - label (VALUE)
 _EOH
 	exit(0);
@@ -70,24 +76,27 @@
 my $failures = [];
 my $reports = [];
 my $content = [];
+my $baselines = [];
 my $labels = [];
 my $testing_entry = {};
 
 sub ConnectToDB()
 {
 	$db = DBI->connect('DBI:mysql:bit:v800016:3306','fbf','mysql')
-		or die("Couldn't connect to database: " . DBI->errstr());
+		or die("Couldn't connect to database: " . DBI->errstr()) if (!$dryrun);
 }
 
 sub DisconnectFromDB()
 {
-	$db->disconnect();
+	$db->disconnect() if (!$dryrun);
 }
 
 sub parse_file
 {
   my ($file) = @_;
   
+  print "Reading $file...\n" if ($verbose);
+  
   open(FILE, $file) or die "Can't open file $file";
   
   while (<FILE>)
@@ -191,7 +200,7 @@
             return 1;
           }
           print " found ($name,$url,$revision) for table 'content'\n" if ($verbose);
-          push(@{$reports}, {name=>$name, url=>$url, revision=>$revision});
+          push(@{$content}, {name=>$name, url=>$url, revision=>$revision});
         }
         else
         {
@@ -199,6 +208,28 @@
           return 1;
         }
       }
+      elsif ($attr =~ /^(baseline)$/i)
+      {
+        $attr = lc($attr);
+        if ($value =~ /([^,]*),([^,]*)/)
+        {
+          my $type = $1;
+          my $path = $2;
+          
+          if (!$type || !$path)
+          {
+            print "ERROR: Type or path empty: \"$value\"\n";
+            return 1;
+          }
+          print " found ($type,$path) for table 'baselines'\n" if ($verbose);
+          push(@{$baselines}, {type=>$type, path=>$path});
+        }
+        else
+        {
+          print "ERROR: Could not understand value of baseline: \"$value\"\n";
+          return 1;
+        }
+      }
       elsif ($attr =~ /^(label)$/i)
       {
         print " found ($attr,$value) for table 'labels'\n" if ($verbose);
@@ -231,6 +262,8 @@
   exit(1);
 }
 
+print "Executing SQL commands...\n" if ($verbose);
+
 ConnectToDB();
 my $newbuildid = -1;
 if ($create)
@@ -250,17 +283,17 @@
     $qm_list =~ s/,$//;
     
     my $query = $db->prepare("insert into builds ($field_list) values ($qm_list)")
-      or die("Couldn't prepare query insert into builds: " . $db->errstr());
+      or die("Couldn't prepare query insert into builds: " . $db->errstr()) if (!$dryrun);
 
     $query->execute(@fields)
-		  or print "WARNING: Couldn't execute insert into builds (@fields): " . $db->errstr() . "\n";
+		  or print "WARNING: Couldn't execute insert into builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
 		  
-		$newbuildid = $db->last_insert_id(undef, undef, undef, undef);
+		$newbuildid = $db->last_insert_id(undef, undef, undef, undef) if (!$dryrun);
   }
   if (@{$envinfo})
   {
     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($newbuildid,?,?)")
-      or die("Couldn't prepare query insert into envinfo: " . $db->errstr());
+      or die("Couldn't prepare query insert into envinfo: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$envinfo})
     {
@@ -268,14 +301,14 @@
       my $version = $entry->{version};
       
       $query->execute($tool, $version)
-		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   if (@{$failures})
   {
     print " prepare_cached 'insert into failures (build_id,category,count) values ($newbuildid,?,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into failures (build_id,category,count) values ($newbuildid,?,?)")
-      or die("Couldn't prepare query insert into failures: " . $db->errstr());
+      or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$failures})
     {
@@ -284,14 +317,14 @@
     
       print " execute '$category, $count'\n" if ($verbose);  
       $query->execute($category, $count)
-		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   if (@{$reports})
   {
     print " prepare_cached 'insert into reports (build_id,name,url,type) values ($newbuildid,?,?,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into reports (build_id,name,url,type) values ($newbuildid,?,?,?)")
-      or die("Couldn't prepare query insert into reports: " . $db->errstr());
+      or die("Couldn't prepare query insert into reports: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$reports})
     {
@@ -301,14 +334,14 @@
     
       print " execute '$name, $url, $type'\n" if ($verbose);  
       $query->execute($name, $url, $type)
-		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   if (@{$content})
   {
     print " prepare_cached 'insert into content (build_id,name,url,revision) values ($newbuildid,?,?,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into content (build_id,name,url,revision) values ($newbuildid,?,?,?)")
-      or die("Couldn't prepare query insert into content: " . $db->errstr());
+      or die("Couldn't prepare query insert into content: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$content})
     {
@@ -318,14 +351,30 @@
     
       print " execute '$name, $url, $revision'\n" if ($verbose);  
       $query->execute($name, $url, $revision)
-		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n" if (!$dryrun);
+    }
+  }
+  if (@{$baselines})
+  {
+    print " prepare_cached 'insert into baselines (build_id,type,path) values ($newbuildid,?,?)'\n" if ($verbose);
+    my $query = $db->prepare_cached("insert into baselines (build_id,type,path) values ($newbuildid,?,?)")
+      or die("Couldn't prepare query insert into baselines: " . $db->errstr()) if (!$dryrun);
+      
+    for my $entry (@{$baselines})
+    {
+      my $type = $entry->{type};
+      my $path = $entry->{path};
+    
+      print " execute '$type, $path'\n" if ($verbose);  
+      $query->execute($type, $path)
+		    or print "WARNING: Couldn't execute insert into baselines ($type,$path): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   if (@{$labels})
   {
     print " prepare_cached 'insert into labels (build_id,label) values ($newbuildid,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into labels (build_id,label) values ($newbuildid,?)")
-      or die("Couldn't prepare query insert into labels: " . $db->errstr());
+      or die("Couldn't prepare query insert into labels: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$labels})
     {
@@ -333,7 +382,7 @@
     
       print " execute '$label'\n" if ($verbose);  
       $query->execute($label)
-		    or print "WARNING: Couldn't execute insert into revision ($label): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into revision ($label): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   print "new build id: $newbuildid\n";
@@ -355,49 +404,49 @@
     
     print " prepare 'update builds set $field_list where id=$id'\n" if ($verbose);
     my $query = $db->prepare("update builds set $field_list where id=$id")
-      or die("Couldn't prepare query update builds: " . $db->errstr());
+      or die("Couldn't prepare query update builds: " . $db->errstr()) if (!$dryrun);
 
     print " execute '@fields'\n" if ($verbose);
     $query->execute(@fields)
-		  or print "WARNING: Couldn't execute update builds (@fields): " . $db->errstr() . "\n";
+		  or print "WARNING: Couldn't execute update builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   }
   if (@{$envinfo})
   {
     print " prepare 'delete from envinfo where build_id=$id'\n" if ($verbose);
     my $delete_query = $db->prepare("delete from envinfo where build_id=$id")
-      or die("Couldn't prepare query delete from envinfo: " . $db->errstr());
+      or die("Couldn't prepare query delete from envinfo: " . $db->errstr()) if (!$dryrun);
     
     print " execute ''\n" if ($verbose);  
     $delete_query->execute()
-		    or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n" if (!$dryrun);
     
     print " prepare 'insert into envinfo (build_id,tool,version) values ($id,?,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($id,?,?)")
-      or die("Couldn't prepare query insert into envinfo: " . $db->errstr());
+      or die("Couldn't prepare query insert into envinfo: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$envinfo})
     {
       my $tool = $entry->{tool};
       my $version = $entry->{version};
     
-      print " execute '$tool,$version'\n" if ($verbose);  
+      print " execute '$tool,$version'\n" if ($verbose);
       $query->execute($tool, $version)
-		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   if (@{$failures})
   {
     print " prepare 'delete from failures where build_id=$id'\n" if ($verbose);
     my $delete_query = $db->prepare("delete from failures where build_id=$id")
-      or die("Couldn't prepare query delete from failures: " . $db->errstr());
+      or die("Couldn't prepare query delete from failures: " . $db->errstr()) if (!$dryrun);
     
     print " execute ''\n" if ($verbose);  
     $delete_query->execute()
-		    or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n" if (!$dryrun);
     
     print " prepare 'insert into failures (build_id,category,count) values ($id,?,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into failures (build_id,category,count) values ($id,?,?)")
-      or die("Couldn't prepare query insert into failures: " . $db->errstr());
+      or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$failures})
     {
@@ -406,14 +455,14 @@
     
       print " execute '$category,$count'\n" if ($verbose);  
       $query->execute($category, $count)
-		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   if (@{$reports})
   {
     print " prepare 'delete from reports where build_id=$id'\n" if ($verbose);
     my $delete_query = $db->prepare("delete from reports where build_id=$id")
-      or die("Couldn't prepare query delete from reports: " . $db->errstr());
+      or die("Couldn't prepare query delete from reports: " . $db->errstr()) if (!$dryrun);
     
     print " execute ''\n" if ($verbose);  
     $delete_query->execute()
@@ -421,7 +470,7 @@
     
     print " prepare 'insert into reports (build_id,name,url,type) values ($id,?,?,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into reports (build_id,name,url,type) values ($id,?,?,?)")
-      or die("Couldn't prepare query insert into failures: " . $db->errstr());
+      or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$reports})
     {
@@ -431,22 +480,22 @@
     
       print " execute '$name,$url,$type'\n" if ($verbose);  
       $query->execute($name, $url, $type)
-		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   if (@{$content})
   {
     print " prepare 'delete from content where build_id=$id'\n" if ($verbose);
     my $delete_query = $db->prepare("delete from content where build_id=$id")
-      or die("Couldn't prepare query delete from content: " . $db->errstr());
+      or die("Couldn't prepare query delete from content: " . $db->errstr()) if (!$dryrun);
     
     print " execute ''\n" if ($verbose);  
     $delete_query->execute()
-		    or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n" if (!$dryrun);
     
     print " prepare 'insert into content (build_id,name,url,revision) values ($id,?,?,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into content (build_id,name,url,revision) values ($id,?,?,?)")
-      or die("Couldn't prepare query insert into content: " . $db->errstr());
+      or die("Couldn't prepare query insert into content: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$content})
     {
@@ -456,22 +505,46 @@
     
       print " execute '$name,$url,$revision'\n" if ($verbose);  
       $query->execute($name, $url, $revision)
-		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n" if (!$dryrun);
+    }
+  }
+  if (@{$baselines})
+  {
+    print " prepare 'delete from baselines where build_id=$id'\n" if ($verbose);
+    my $delete_query = $db->prepare("delete from baselines where build_id=$id")
+      or die("Couldn't prepare query delete from baselines: " . $db->errstr()) if (!$dryrun);
+    
+    print " execute ''\n" if ($verbose);  
+    $delete_query->execute()
+		    or print "WARNING: Couldn't execute delete from baselines: " . $db->errstr() . "\n" if (!$dryrun);
+    
+    print " prepare 'insert into baselines (build_id,type,path) values ($id,?,?)'\n" if ($verbose);
+    my $query = $db->prepare_cached("insert into baselines (build_id,type,path) values ($id,?,?)")
+      or die("Couldn't prepare query insert into baselines: " . $db->errstr()) if (!$dryrun);
+      
+    for my $entry (@{$baselines})
+    {
+      my $type = $entry->{type};
+      my $path = $entry->{path};
+    
+      print " execute '$type,$path'\n" if ($verbose);  
+      $query->execute($type, $path)
+		    or print "WARNING: Couldn't execute insert into baselines ($type,$path): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
   if (@{$labels})
   {
     print " prepare 'delete from labels where build_id=$id'\n" if ($verbose);
     my $delete_query = $db->prepare("delete from labels where build_id=$id")
-      or die("Couldn't prepare query delete from labels: " . $db->errstr());
+      or die("Couldn't prepare query delete from labels: " . $db->errstr()) if (!$dryrun);
     
     print " execute ''\n" if ($verbose);  
     $delete_query->execute()
-		    or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n" if (!$dryrun);
     
     print " prepare 'insert into labels (build_id,label) values ($id,?)'\n" if ($verbose);
     my $query = $db->prepare_cached("insert into label (build_id,label) values ($id,?)")
-      or die("Couldn't prepare query insert into label: " . $db->errstr());
+      or die("Couldn't prepare query insert into label: " . $db->errstr()) if (!$dryrun);
       
     for my $entry (@{$labels})
     {
@@ -479,7 +552,7 @@
       
       print " execute '$label'\n" if ($verbose);  
       $query->execute($label)
-		    or print "WARNING: Couldn't execute insert into labels ($label): " . $db->errstr() . "\n";
+		    or print "WARNING: Couldn't execute insert into labels ($label): " . $db->errstr() . "\n" if (!$dryrun);
     }
   }
 }