common/tools/bitops.pl
changeset 1180 332c5195337a
parent 1176 5fcaa694186a
child 1182 f15fa527df95
equal deleted inserted replaced
1179:9d79e98a47e4 1180:332c5195337a
    11 my $help = 0;
    11 my $help = 0;
    12 my $create = 0;
    12 my $create = 0;
    13 my $id = '';
    13 my $id = '';
    14 my $file = '';
    14 my $file = '';
    15 my $verbose = 0;
    15 my $verbose = 0;
       
    16 my $dryrun = 0;
    16 GetOptions((
    17 GetOptions((
    17 	'create!' => \$create,
    18 	'create!' => \$create,
    18 	'file=s' => \$file,
    19 	'file=s' => \$file,
    19 	'id=s' => \$id,
    20 	'id=s' => \$id,
    20 	'help!' => \$help,
    21 	'help!' => \$help,
    21 	'verbose!' => \$verbose
    22 	'verbose!' => \$verbose,
       
    23 	'dryrun!' => \$dryrun,
    22 ));
    24 ));
    23 
    25 
    24 if ($help||!$file)
    26 if ($help||!$file)
    25 {
    27 {
    26   print <<_EOH;
    28   print <<_EOH;
    36                         the newly created build.
    38                         the newly created build.
    37   -i ID, --id ID        Update entry for build number ID with the values
    39   -i ID, --id ID        Update entry for build number ID with the values
    38                         provided in FILE.
    40                         provided in FILE.
    39   -f FILE, --file FILE  Use attributes in FILE to create/update the build info
    41   -f FILE, --file FILE  Use attributes in FILE to create/update the build info
    40                         See below for file format.
    42                         See below for file format.
       
    43   -v, --verbose         Increase info level
       
    44   -d, --dryrun          Only show what would happen, do not actually interact
       
    45                         with the DB
    41   
    46   
    42 File format:
    47 File format:
    43   File must be a list of attribute-value-pairs. One avp per line, on each line
    48   File must be a list of attribute-value-pairs. One avp per line, on each line
    44   attribute and value are separated by a tab.
    49   attribute and value are separated by a tab.
    45   These are the supported attributes (in brackets the syntax of the value):
    50   These are the supported attributes (in brackets the syntax of the value):
    56   - sources_short (VALUE)
    61   - sources_short (VALUE)
    57   - envinfo (TOOL,VERSION)
    62   - envinfo (TOOL,VERSION)
    58   - failure (CATEGORY,COUNT)
    63   - failure (CATEGORY,COUNT)
    59   - report (NAME,URL,TYPE)
    64   - report (NAME,URL,TYPE)
    60   - content (NAME,URL,REVISION)
    65   - content (NAME,URL,REVISION)
       
    66   - baseline (TYPE,PATH)
    61   - label (VALUE)
    67   - label (VALUE)
    62 _EOH
    68 _EOH
    63 	exit(0);
    69 	exit(0);
    64 }
    70 }
    65 
    71 
    68 my $builds_entry = {};
    74 my $builds_entry = {};
    69 my $envinfo = [];
    75 my $envinfo = [];
    70 my $failures = [];
    76 my $failures = [];
    71 my $reports = [];
    77 my $reports = [];
    72 my $content = [];
    78 my $content = [];
       
    79 my $baselines = [];
    73 my $labels = [];
    80 my $labels = [];
    74 my $testing_entry = {};
    81 my $testing_entry = {};
    75 
    82 
    76 sub ConnectToDB()
    83 sub ConnectToDB()
    77 {
    84 {
    78 	$db = DBI->connect('DBI:mysql:bit:v800016:3306','fbf','mysql')
    85 	$db = DBI->connect('DBI:mysql:bit:v800016:3306','fbf','mysql')
    79 		or die("Couldn't connect to database: " . DBI->errstr());
    86 		or die("Couldn't connect to database: " . DBI->errstr()) if (!$dryrun);
    80 }
    87 }
    81 
    88 
    82 sub DisconnectFromDB()
    89 sub DisconnectFromDB()
    83 {
    90 {
    84 	$db->disconnect();
    91 	$db->disconnect() if (!$dryrun);
    85 }
    92 }
    86 
    93 
    87 sub parse_file
    94 sub parse_file
    88 {
    95 {
    89   my ($file) = @_;
    96   my ($file) = @_;
       
    97   
       
    98   print "Reading $file...\n" if ($verbose);
    90   
    99   
    91   open(FILE, $file) or die "Can't open file $file";
   100   open(FILE, $file) or die "Can't open file $file";
    92   
   101   
    93   while (<FILE>)
   102   while (<FILE>)
    94   {
   103   {
   189           {
   198           {
   190             print "ERROR: Name, url or revision empty: \"$value\"\n";
   199             print "ERROR: Name, url or revision empty: \"$value\"\n";
   191             return 1;
   200             return 1;
   192           }
   201           }
   193           print " found ($name,$url,$revision) for table 'content'\n" if ($verbose);
   202           print " found ($name,$url,$revision) for table 'content'\n" if ($verbose);
   194           push(@{$reports}, {name=>$name, url=>$url, revision=>$revision});
   203           push(@{$content}, {name=>$name, url=>$url, revision=>$revision});
   195         }
   204         }
   196         else
   205         else
   197         {
   206         {
   198           print "ERROR: Could not understand value of content: \"$value\"\n";
   207           print "ERROR: Could not understand value of content: \"$value\"\n";
       
   208           return 1;
       
   209         }
       
   210       }
       
   211       elsif ($attr =~ /^(baseline)$/i)
       
   212       {
       
   213         $attr = lc($attr);
       
   214         if ($value =~ /([^,]*),([^,]*)/)
       
   215         {
       
   216           my $type = $1;
       
   217           my $path = $2;
       
   218           
       
   219           if (!$type || !$path)
       
   220           {
       
   221             print "ERROR: Type or path empty: \"$value\"\n";
       
   222             return 1;
       
   223           }
       
   224           print " found ($type,$path) for table 'baselines'\n" if ($verbose);
       
   225           push(@{$baselines}, {type=>$type, path=>$path});
       
   226         }
       
   227         else
       
   228         {
       
   229           print "ERROR: Could not understand value of baseline: \"$value\"\n";
   199           return 1;
   230           return 1;
   200         }
   231         }
   201       }
   232       }
   202       elsif ($attr =~ /^(label)$/i)
   233       elsif ($attr =~ /^(label)$/i)
   203       {
   234       {
   228 if ($r)
   259 if ($r)
   229 {
   260 {
   230   print "Error while parsing file $file\n";
   261   print "Error while parsing file $file\n";
   231   exit(1);
   262   exit(1);
   232 }
   263 }
       
   264 
       
   265 print "Executing SQL commands...\n" if ($verbose);
   233 
   266 
   234 ConnectToDB();
   267 ConnectToDB();
   235 my $newbuildid = -1;
   268 my $newbuildid = -1;
   236 if ($create)
   269 if ($create)
   237 {
   270 {
   248     }
   281     }
   249     $field_list =~ s/,$//;
   282     $field_list =~ s/,$//;
   250     $qm_list =~ s/,$//;
   283     $qm_list =~ s/,$//;
   251     
   284     
   252     my $query = $db->prepare("insert into builds ($field_list) values ($qm_list)")
   285     my $query = $db->prepare("insert into builds ($field_list) values ($qm_list)")
   253       or die("Couldn't prepare query insert into builds: " . $db->errstr());
   286       or die("Couldn't prepare query insert into builds: " . $db->errstr()) if (!$dryrun);
   254 
   287 
   255     $query->execute(@fields)
   288     $query->execute(@fields)
   256 		  or print "WARNING: Couldn't execute insert into builds (@fields): " . $db->errstr() . "\n";
   289 		  or print "WARNING: Couldn't execute insert into builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   257 		  
   290 		  
   258 		$newbuildid = $db->last_insert_id(undef, undef, undef, undef);
   291 		$newbuildid = $db->last_insert_id(undef, undef, undef, undef) if (!$dryrun);
   259   }
   292   }
   260   if (@{$envinfo})
   293   if (@{$envinfo})
   261   {
   294   {
   262     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($newbuildid,?,?)")
   295     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($newbuildid,?,?)")
   263       or die("Couldn't prepare query insert into envinfo: " . $db->errstr());
   296       or die("Couldn't prepare query insert into envinfo: " . $db->errstr()) if (!$dryrun);
   264       
   297       
   265     for my $entry (@{$envinfo})
   298     for my $entry (@{$envinfo})
   266     {
   299     {
   267       my $tool = $entry->{tool};
   300       my $tool = $entry->{tool};
   268       my $version = $entry->{version};
   301       my $version = $entry->{version};
   269       
   302       
   270       $query->execute($tool, $version)
   303       $query->execute($tool, $version)
   271 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n";
   304 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n" if (!$dryrun);
   272     }
   305     }
   273   }
   306   }
   274   if (@{$failures})
   307   if (@{$failures})
   275   {
   308   {
   276     print " prepare_cached 'insert into failures (build_id,category,count) values ($newbuildid,?,?)'\n" if ($verbose);
   309     print " prepare_cached 'insert into failures (build_id,category,count) values ($newbuildid,?,?)'\n" if ($verbose);
   277     my $query = $db->prepare_cached("insert into failures (build_id,category,count) values ($newbuildid,?,?)")
   310     my $query = $db->prepare_cached("insert into failures (build_id,category,count) values ($newbuildid,?,?)")
   278       or die("Couldn't prepare query insert into failures: " . $db->errstr());
   311       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   279       
   312       
   280     for my $entry (@{$failures})
   313     for my $entry (@{$failures})
   281     {
   314     {
   282       my $category = $entry->{category};
   315       my $category = $entry->{category};
   283       my $count = $entry->{count};
   316       my $count = $entry->{count};
   284     
   317     
   285       print " execute '$category, $count'\n" if ($verbose);  
   318       print " execute '$category, $count'\n" if ($verbose);  
   286       $query->execute($category, $count)
   319       $query->execute($category, $count)
   287 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n";
   320 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n" if (!$dryrun);
   288     }
   321     }
   289   }
   322   }
   290   if (@{$reports})
   323   if (@{$reports})
   291   {
   324   {
   292     print " prepare_cached 'insert into reports (build_id,name,url,type) values ($newbuildid,?,?,?)'\n" if ($verbose);
   325     print " prepare_cached 'insert into reports (build_id,name,url,type) values ($newbuildid,?,?,?)'\n" if ($verbose);
   293     my $query = $db->prepare_cached("insert into reports (build_id,name,url,type) values ($newbuildid,?,?,?)")
   326     my $query = $db->prepare_cached("insert into reports (build_id,name,url,type) values ($newbuildid,?,?,?)")
   294       or die("Couldn't prepare query insert into reports: " . $db->errstr());
   327       or die("Couldn't prepare query insert into reports: " . $db->errstr()) if (!$dryrun);
   295       
   328       
   296     for my $entry (@{$reports})
   329     for my $entry (@{$reports})
   297     {
   330     {
   298       my $name = $entry->{name};
   331       my $name = $entry->{name};
   299       my $url = $entry->{url};
   332       my $url = $entry->{url};
   300       my $type = $entry->{type};
   333       my $type = $entry->{type};
   301     
   334     
   302       print " execute '$name, $url, $type'\n" if ($verbose);  
   335       print " execute '$name, $url, $type'\n" if ($verbose);  
   303       $query->execute($name, $url, $type)
   336       $query->execute($name, $url, $type)
   304 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n";
   337 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n" if (!$dryrun);
   305     }
   338     }
   306   }
   339   }
   307   if (@{$content})
   340   if (@{$content})
   308   {
   341   {
   309     print " prepare_cached 'insert into content (build_id,name,url,revision) values ($newbuildid,?,?,?)'\n" if ($verbose);
   342     print " prepare_cached 'insert into content (build_id,name,url,revision) values ($newbuildid,?,?,?)'\n" if ($verbose);
   310     my $query = $db->prepare_cached("insert into content (build_id,name,url,revision) values ($newbuildid,?,?,?)")
   343     my $query = $db->prepare_cached("insert into content (build_id,name,url,revision) values ($newbuildid,?,?,?)")
   311       or die("Couldn't prepare query insert into content: " . $db->errstr());
   344       or die("Couldn't prepare query insert into content: " . $db->errstr()) if (!$dryrun);
   312       
   345       
   313     for my $entry (@{$content})
   346     for my $entry (@{$content})
   314     {
   347     {
   315       my $name = $entry->{name};
   348       my $name = $entry->{name};
   316       my $url = $entry->{url};
   349       my $url = $entry->{url};
   317       my $revision = $entry->{revision};
   350       my $revision = $entry->{revision};
   318     
   351     
   319       print " execute '$name, $url, $revision'\n" if ($verbose);  
   352       print " execute '$name, $url, $revision'\n" if ($verbose);  
   320       $query->execute($name, $url, $revision)
   353       $query->execute($name, $url, $revision)
   321 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n";
   354 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n" if (!$dryrun);
       
   355     }
       
   356   }
       
   357   if (@{$baselines})
       
   358   {
       
   359     print " prepare_cached 'insert into baselines (build_id,type,path) values ($newbuildid,?,?)'\n" if ($verbose);
       
   360     my $query = $db->prepare_cached("insert into baselines (build_id,type,path) values ($newbuildid,?,?)")
       
   361       or die("Couldn't prepare query insert into baselines: " . $db->errstr()) if (!$dryrun);
       
   362       
       
   363     for my $entry (@{$baselines})
       
   364     {
       
   365       my $type = $entry->{type};
       
   366       my $path = $entry->{path};
       
   367     
       
   368       print " execute '$type, $path'\n" if ($verbose);  
       
   369       $query->execute($type, $path)
       
   370 		    or print "WARNING: Couldn't execute insert into baselines ($type,$path): " . $db->errstr() . "\n" if (!$dryrun);
   322     }
   371     }
   323   }
   372   }
   324   if (@{$labels})
   373   if (@{$labels})
   325   {
   374   {
   326     print " prepare_cached 'insert into labels (build_id,label) values ($newbuildid,?)'\n" if ($verbose);
   375     print " prepare_cached 'insert into labels (build_id,label) values ($newbuildid,?)'\n" if ($verbose);
   327     my $query = $db->prepare_cached("insert into labels (build_id,label) values ($newbuildid,?)")
   376     my $query = $db->prepare_cached("insert into labels (build_id,label) values ($newbuildid,?)")
   328       or die("Couldn't prepare query insert into labels: " . $db->errstr());
   377       or die("Couldn't prepare query insert into labels: " . $db->errstr()) if (!$dryrun);
   329       
   378       
   330     for my $entry (@{$labels})
   379     for my $entry (@{$labels})
   331     {
   380     {
   332       my $label = $entry->{label};
   381       my $label = $entry->{label};
   333     
   382     
   334       print " execute '$label'\n" if ($verbose);  
   383       print " execute '$label'\n" if ($verbose);  
   335       $query->execute($label)
   384       $query->execute($label)
   336 		    or print "WARNING: Couldn't execute insert into revision ($label): " . $db->errstr() . "\n";
   385 		    or print "WARNING: Couldn't execute insert into revision ($label): " . $db->errstr() . "\n" if (!$dryrun);
   337     }
   386     }
   338   }
   387   }
   339   print "new build id: $newbuildid\n";
   388   print "new build id: $newbuildid\n";
   340 }
   389 }
   341 else
   390 else
   353     }
   402     }
   354     $field_list =~ s/,$//;
   403     $field_list =~ s/,$//;
   355     
   404     
   356     print " prepare 'update builds set $field_list where id=$id'\n" if ($verbose);
   405     print " prepare 'update builds set $field_list where id=$id'\n" if ($verbose);
   357     my $query = $db->prepare("update builds set $field_list where id=$id")
   406     my $query = $db->prepare("update builds set $field_list where id=$id")
   358       or die("Couldn't prepare query update builds: " . $db->errstr());
   407       or die("Couldn't prepare query update builds: " . $db->errstr()) if (!$dryrun);
   359 
   408 
   360     print " execute '@fields'\n" if ($verbose);
   409     print " execute '@fields'\n" if ($verbose);
   361     $query->execute(@fields)
   410     $query->execute(@fields)
   362 		  or print "WARNING: Couldn't execute update builds (@fields): " . $db->errstr() . "\n";
   411 		  or print "WARNING: Couldn't execute update builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   363   }
   412   }
   364   if (@{$envinfo})
   413   if (@{$envinfo})
   365   {
   414   {
   366     print " prepare 'delete from envinfo where build_id=$id'\n" if ($verbose);
   415     print " prepare 'delete from envinfo where build_id=$id'\n" if ($verbose);
   367     my $delete_query = $db->prepare("delete from envinfo where build_id=$id")
   416     my $delete_query = $db->prepare("delete from envinfo where build_id=$id")
   368       or die("Couldn't prepare query delete from envinfo: " . $db->errstr());
   417       or die("Couldn't prepare query delete from envinfo: " . $db->errstr()) if (!$dryrun);
   369     
   418     
   370     print " execute ''\n" if ($verbose);  
   419     print " execute ''\n" if ($verbose);  
   371     $delete_query->execute()
   420     $delete_query->execute()
   372 		    or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n";
   421 		    or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n" if (!$dryrun);
   373     
   422     
   374     print " prepare 'insert into envinfo (build_id,tool,version) values ($id,?,?)'\n" if ($verbose);
   423     print " prepare 'insert into envinfo (build_id,tool,version) values ($id,?,?)'\n" if ($verbose);
   375     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($id,?,?)")
   424     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($id,?,?)")
   376       or die("Couldn't prepare query insert into envinfo: " . $db->errstr());
   425       or die("Couldn't prepare query insert into envinfo: " . $db->errstr()) if (!$dryrun);
   377       
   426       
   378     for my $entry (@{$envinfo})
   427     for my $entry (@{$envinfo})
   379     {
   428     {
   380       my $tool = $entry->{tool};
   429       my $tool = $entry->{tool};
   381       my $version = $entry->{version};
   430       my $version = $entry->{version};
   382     
   431     
   383       print " execute '$tool,$version'\n" if ($verbose);  
   432       print " execute '$tool,$version'\n" if ($verbose);
   384       $query->execute($tool, $version)
   433       $query->execute($tool, $version)
   385 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n";
   434 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n" if (!$dryrun);
   386     }
   435     }
   387   }
   436   }
   388   if (@{$failures})
   437   if (@{$failures})
   389   {
   438   {
   390     print " prepare 'delete from failures where build_id=$id'\n" if ($verbose);
   439     print " prepare 'delete from failures where build_id=$id'\n" if ($verbose);
   391     my $delete_query = $db->prepare("delete from failures where build_id=$id")
   440     my $delete_query = $db->prepare("delete from failures where build_id=$id")
   392       or die("Couldn't prepare query delete from failures: " . $db->errstr());
   441       or die("Couldn't prepare query delete from failures: " . $db->errstr()) if (!$dryrun);
   393     
   442     
   394     print " execute ''\n" if ($verbose);  
   443     print " execute ''\n" if ($verbose);  
   395     $delete_query->execute()
   444     $delete_query->execute()
   396 		    or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n";
   445 		    or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n" if (!$dryrun);
   397     
   446     
   398     print " prepare 'insert into failures (build_id,category,count) values ($id,?,?)'\n" if ($verbose);
   447     print " prepare 'insert into failures (build_id,category,count) values ($id,?,?)'\n" if ($verbose);
   399     my $query = $db->prepare_cached("insert into failures (build_id,category,count) values ($id,?,?)")
   448     my $query = $db->prepare_cached("insert into failures (build_id,category,count) values ($id,?,?)")
   400       or die("Couldn't prepare query insert into failures: " . $db->errstr());
   449       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   401       
   450       
   402     for my $entry (@{$failures})
   451     for my $entry (@{$failures})
   403     {
   452     {
   404       my $category = $entry->{category};
   453       my $category = $entry->{category};
   405       my $count = $entry->{count};
   454       my $count = $entry->{count};
   406     
   455     
   407       print " execute '$category,$count'\n" if ($verbose);  
   456       print " execute '$category,$count'\n" if ($verbose);  
   408       $query->execute($category, $count)
   457       $query->execute($category, $count)
   409 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n";
   458 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n" if (!$dryrun);
   410     }
   459     }
   411   }
   460   }
   412   if (@{$reports})
   461   if (@{$reports})
   413   {
   462   {
   414     print " prepare 'delete from reports where build_id=$id'\n" if ($verbose);
   463     print " prepare 'delete from reports where build_id=$id'\n" if ($verbose);
   415     my $delete_query = $db->prepare("delete from reports where build_id=$id")
   464     my $delete_query = $db->prepare("delete from reports where build_id=$id")
   416       or die("Couldn't prepare query delete from reports: " . $db->errstr());
   465       or die("Couldn't prepare query delete from reports: " . $db->errstr()) if (!$dryrun);
   417     
   466     
   418     print " execute ''\n" if ($verbose);  
   467     print " execute ''\n" if ($verbose);  
   419     $delete_query->execute()
   468     $delete_query->execute()
   420 		    or print "WARNING: Couldn't execute delete from reports: " . $db->errstr() . "\n";
   469 		    or print "WARNING: Couldn't execute delete from reports: " . $db->errstr() . "\n";
   421     
   470     
   422     print " prepare 'insert into reports (build_id,name,url,type) values ($id,?,?,?)'\n" if ($verbose);
   471     print " prepare 'insert into reports (build_id,name,url,type) values ($id,?,?,?)'\n" if ($verbose);
   423     my $query = $db->prepare_cached("insert into reports (build_id,name,url,type) values ($id,?,?,?)")
   472     my $query = $db->prepare_cached("insert into reports (build_id,name,url,type) values ($id,?,?,?)")
   424       or die("Couldn't prepare query insert into failures: " . $db->errstr());
   473       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   425       
   474       
   426     for my $entry (@{$reports})
   475     for my $entry (@{$reports})
   427     {
   476     {
   428       my $name = $entry->{name};
   477       my $name = $entry->{name};
   429       my $url = $entry->{url};
   478       my $url = $entry->{url};
   430       my $type = $entry->{type};
   479       my $type = $entry->{type};
   431     
   480     
   432       print " execute '$name,$url,$type'\n" if ($verbose);  
   481       print " execute '$name,$url,$type'\n" if ($verbose);  
   433       $query->execute($name, $url, $type)
   482       $query->execute($name, $url, $type)
   434 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n";
   483 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n" if (!$dryrun);
   435     }
   484     }
   436   }
   485   }
   437   if (@{$content})
   486   if (@{$content})
   438   {
   487   {
   439     print " prepare 'delete from content where build_id=$id'\n" if ($verbose);
   488     print " prepare 'delete from content where build_id=$id'\n" if ($verbose);
   440     my $delete_query = $db->prepare("delete from content where build_id=$id")
   489     my $delete_query = $db->prepare("delete from content where build_id=$id")
   441       or die("Couldn't prepare query delete from content: " . $db->errstr());
   490       or die("Couldn't prepare query delete from content: " . $db->errstr()) if (!$dryrun);
   442     
   491     
   443     print " execute ''\n" if ($verbose);  
   492     print " execute ''\n" if ($verbose);  
   444     $delete_query->execute()
   493     $delete_query->execute()
   445 		    or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n";
   494 		    or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n" if (!$dryrun);
   446     
   495     
   447     print " prepare 'insert into content (build_id,name,url,revision) values ($id,?,?,?)'\n" if ($verbose);
   496     print " prepare 'insert into content (build_id,name,url,revision) values ($id,?,?,?)'\n" if ($verbose);
   448     my $query = $db->prepare_cached("insert into content (build_id,name,url,revision) values ($id,?,?,?)")
   497     my $query = $db->prepare_cached("insert into content (build_id,name,url,revision) values ($id,?,?,?)")
   449       or die("Couldn't prepare query insert into content: " . $db->errstr());
   498       or die("Couldn't prepare query insert into content: " . $db->errstr()) if (!$dryrun);
   450       
   499       
   451     for my $entry (@{$content})
   500     for my $entry (@{$content})
   452     {
   501     {
   453       my $name = $entry->{name};
   502       my $name = $entry->{name};
   454       my $url = $entry->{url};
   503       my $url = $entry->{url};
   455       my $revision = $entry->{revision};
   504       my $revision = $entry->{revision};
   456     
   505     
   457       print " execute '$name,$url,$revision'\n" if ($verbose);  
   506       print " execute '$name,$url,$revision'\n" if ($verbose);  
   458       $query->execute($name, $url, $revision)
   507       $query->execute($name, $url, $revision)
   459 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n";
   508 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n" if (!$dryrun);
       
   509     }
       
   510   }
       
   511   if (@{$baselines})
       
   512   {
       
   513     print " prepare 'delete from baselines where build_id=$id'\n" if ($verbose);
       
   514     my $delete_query = $db->prepare("delete from baselines where build_id=$id")
       
   515       or die("Couldn't prepare query delete from baselines: " . $db->errstr()) if (!$dryrun);
       
   516     
       
   517     print " execute ''\n" if ($verbose);  
       
   518     $delete_query->execute()
       
   519 		    or print "WARNING: Couldn't execute delete from baselines: " . $db->errstr() . "\n" if (!$dryrun);
       
   520     
       
   521     print " prepare 'insert into baselines (build_id,type,path) values ($id,?,?)'\n" if ($verbose);
       
   522     my $query = $db->prepare_cached("insert into baselines (build_id,type,path) values ($id,?,?)")
       
   523       or die("Couldn't prepare query insert into baselines: " . $db->errstr()) if (!$dryrun);
       
   524       
       
   525     for my $entry (@{$baselines})
       
   526     {
       
   527       my $type = $entry->{type};
       
   528       my $path = $entry->{path};
       
   529     
       
   530       print " execute '$type,$path'\n" if ($verbose);  
       
   531       $query->execute($type, $path)
       
   532 		    or print "WARNING: Couldn't execute insert into baselines ($type,$path): " . $db->errstr() . "\n" if (!$dryrun);
   460     }
   533     }
   461   }
   534   }
   462   if (@{$labels})
   535   if (@{$labels})
   463   {
   536   {
   464     print " prepare 'delete from labels where build_id=$id'\n" if ($verbose);
   537     print " prepare 'delete from labels where build_id=$id'\n" if ($verbose);
   465     my $delete_query = $db->prepare("delete from labels where build_id=$id")
   538     my $delete_query = $db->prepare("delete from labels where build_id=$id")
   466       or die("Couldn't prepare query delete from labels: " . $db->errstr());
   539       or die("Couldn't prepare query delete from labels: " . $db->errstr()) if (!$dryrun);
   467     
   540     
   468     print " execute ''\n" if ($verbose);  
   541     print " execute ''\n" if ($verbose);  
   469     $delete_query->execute()
   542     $delete_query->execute()
   470 		    or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n";
   543 		    or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n" if (!$dryrun);
   471     
   544     
   472     print " prepare 'insert into labels (build_id,label) values ($id,?)'\n" if ($verbose);
   545     print " prepare 'insert into labels (build_id,label) values ($id,?)'\n" if ($verbose);
   473     my $query = $db->prepare_cached("insert into label (build_id,label) values ($id,?)")
   546     my $query = $db->prepare_cached("insert into label (build_id,label) values ($id,?)")
   474       or die("Couldn't prepare query insert into label: " . $db->errstr());
   547       or die("Couldn't prepare query insert into label: " . $db->errstr()) if (!$dryrun);
   475       
   548       
   476     for my $entry (@{$labels})
   549     for my $entry (@{$labels})
   477     {
   550     {
   478       my $label = $entry->{label};
   551       my $label = $entry->{label};
   479       
   552       
   480       print " execute '$label'\n" if ($verbose);  
   553       print " execute '$label'\n" if ($verbose);  
   481       $query->execute($label)
   554       $query->execute($label)
   482 		    or print "WARNING: Couldn't execute insert into labels ($label): " . $db->errstr() . "\n";
   555 		    or print "WARNING: Couldn't execute insert into labels ($label): " . $db->errstr() . "\n" if (!$dryrun);
   483     }
   556     }
   484   }
   557   }
   485 }
   558 }
   486 DisconnectFromDB();
   559 DisconnectFromDB();
   487 
   560