common/tools/bitops.pl
changeset 1163 b1b8e71b0c52
parent 1150 1127dea6b78b
child 1164 5fcaa694186a
equal deleted inserted replaced
1162:ead96bc104ea 1163:b1b8e71b0c52
    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):
    74 my $testing_entry = {};
    79 my $testing_entry = {};
    75 
    80 
    76 sub ConnectToDB()
    81 sub ConnectToDB()
    77 {
    82 {
    78 	$db = DBI->connect('DBI:mysql:bit:v800016:3306','fbf','mysql')
    83 	$db = DBI->connect('DBI:mysql:bit:v800016:3306','fbf','mysql')
    79 		or die("Couldn't connect to database: " . DBI->errstr());
    84 		or die("Couldn't connect to database: " . DBI->errstr()) if (!$dryrun);
    80 }
    85 }
    81 
    86 
    82 sub DisconnectFromDB()
    87 sub DisconnectFromDB()
    83 {
    88 {
    84 	$db->disconnect();
    89 	$db->disconnect() if (!$dryrun);
    85 }
    90 }
    86 
    91 
    87 sub parse_file
    92 sub parse_file
    88 {
    93 {
    89   my ($file) = @_;
    94   my ($file) = @_;
       
    95   
       
    96   print "Reading $file...\n" if ($verbose);
    90   
    97   
    91   open(FILE, $file) or die "Can't open file $file";
    98   open(FILE, $file) or die "Can't open file $file";
    92   
    99   
    93   while (<FILE>)
   100   while (<FILE>)
    94   {
   101   {
   189           {
   196           {
   190             print "ERROR: Name, url or revision empty: \"$value\"\n";
   197             print "ERROR: Name, url or revision empty: \"$value\"\n";
   191             return 1;
   198             return 1;
   192           }
   199           }
   193           print " found ($name,$url,$revision) for table 'content'\n" if ($verbose);
   200           print " found ($name,$url,$revision) for table 'content'\n" if ($verbose);
   194           push(@{$reports}, {name=>$name, url=>$url, revision=>$revision});
   201           push(@{$content}, {name=>$name, url=>$url, revision=>$revision});
   195         }
   202         }
   196         else
   203         else
   197         {
   204         {
   198           print "ERROR: Could not understand value of content: \"$value\"\n";
   205           print "ERROR: Could not understand value of content: \"$value\"\n";
   199           return 1;
   206           return 1;
   228 if ($r)
   235 if ($r)
   229 {
   236 {
   230   print "Error while parsing file $file\n";
   237   print "Error while parsing file $file\n";
   231   exit(1);
   238   exit(1);
   232 }
   239 }
       
   240 
       
   241 print "Executing SQL commands...\n" if ($verbose);
   233 
   242 
   234 ConnectToDB();
   243 ConnectToDB();
   235 my $newbuildid = -1;
   244 my $newbuildid = -1;
   236 if ($create)
   245 if ($create)
   237 {
   246 {
   248     }
   257     }
   249     $field_list =~ s/,$//;
   258     $field_list =~ s/,$//;
   250     $qm_list =~ s/,$//;
   259     $qm_list =~ s/,$//;
   251     
   260     
   252     my $query = $db->prepare("insert into builds ($field_list) values ($qm_list)")
   261     my $query = $db->prepare("insert into builds ($field_list) values ($qm_list)")
   253       or die("Couldn't prepare query insert into builds: " . $db->errstr());
   262       or die("Couldn't prepare query insert into builds: " . $db->errstr()) if (!$dryrun);
   254 
   263 
   255     $query->execute(@fields)
   264     $query->execute(@fields)
   256 		  or print "WARNING: Couldn't execute insert into builds (@fields): " . $db->errstr() . "\n";
   265 		  or print "WARNING: Couldn't execute insert into builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   257 		  
   266 		  
   258 		$newbuildid = $db->last_insert_id(undef, undef, undef, undef);
   267 		$newbuildid = $db->last_insert_id(undef, undef, undef, undef) if (!$dryrun);
   259   }
   268   }
   260   if (@{$envinfo})
   269   if (@{$envinfo})
   261   {
   270   {
   262     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($newbuildid,?,?)")
   271     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());
   272       or die("Couldn't prepare query insert into envinfo: " . $db->errstr()) if (!$dryrun);
   264       
   273       
   265     for my $entry (@{$envinfo})
   274     for my $entry (@{$envinfo})
   266     {
   275     {
   267       my $tool = $entry->{tool};
   276       my $tool = $entry->{tool};
   268       my $version = $entry->{version};
   277       my $version = $entry->{version};
   269       
   278       
   270       $query->execute($tool, $version)
   279       $query->execute($tool, $version)
   271 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n";
   280 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n" if (!$dryrun);
   272     }
   281     }
   273   }
   282   }
   274   if (@{$failures})
   283   if (@{$failures})
   275   {
   284   {
   276     print " prepare_cached 'insert into failures (build_id,category,count) values ($newbuildid,?,?)'\n" if ($verbose);
   285     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,?,?)")
   286     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());
   287       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   279       
   288       
   280     for my $entry (@{$failures})
   289     for my $entry (@{$failures})
   281     {
   290     {
   282       my $category = $entry->{category};
   291       my $category = $entry->{category};
   283       my $count = $entry->{count};
   292       my $count = $entry->{count};
   284     
   293     
   285       print " execute '$category, $count'\n" if ($verbose);  
   294       print " execute '$category, $count'\n" if ($verbose);  
   286       $query->execute($category, $count)
   295       $query->execute($category, $count)
   287 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n";
   296 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n" if (!$dryrun);
   288     }
   297     }
   289   }
   298   }
   290   if (@{$reports})
   299   if (@{$reports})
   291   {
   300   {
   292     print " prepare_cached 'insert into reports (build_id,name,url,type) values ($newbuildid,?,?,?)'\n" if ($verbose);
   301     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,?,?,?)")
   302     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());
   303       or die("Couldn't prepare query insert into reports: " . $db->errstr()) if (!$dryrun);
   295       
   304       
   296     for my $entry (@{$reports})
   305     for my $entry (@{$reports})
   297     {
   306     {
   298       my $name = $entry->{name};
   307       my $name = $entry->{name};
   299       my $url = $entry->{url};
   308       my $url = $entry->{url};
   300       my $type = $entry->{type};
   309       my $type = $entry->{type};
   301     
   310     
   302       print " execute '$name, $url, $type'\n" if ($verbose);  
   311       print " execute '$name, $url, $type'\n" if ($verbose);  
   303       $query->execute($name, $url, $type)
   312       $query->execute($name, $url, $type)
   304 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n";
   313 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n" if (!$dryrun);
   305     }
   314     }
   306   }
   315   }
   307   if (@{$content})
   316   if (@{$content})
   308   {
   317   {
   309     print " prepare_cached 'insert into content (build_id,name,url,revision) values ($newbuildid,?,?,?)'\n" if ($verbose);
   318     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,?,?,?)")
   319     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());
   320       or die("Couldn't prepare query insert into content: " . $db->errstr()) if (!$dryrun);
   312       
   321       
   313     for my $entry (@{$content})
   322     for my $entry (@{$content})
   314     {
   323     {
   315       my $name = $entry->{name};
   324       my $name = $entry->{name};
   316       my $url = $entry->{url};
   325       my $url = $entry->{url};
   317       my $revision = $entry->{revision};
   326       my $revision = $entry->{revision};
   318     
   327     
   319       print " execute '$name, $url, $revision'\n" if ($verbose);  
   328       print " execute '$name, $url, $revision'\n" if ($verbose);  
   320       $query->execute($name, $url, $revision)
   329       $query->execute($name, $url, $revision)
   321 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n";
   330 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n" if (!$dryrun);
   322     }
   331     }
   323   }
   332   }
   324   if (@{$labels})
   333   if (@{$labels})
   325   {
   334   {
   326     print " prepare_cached 'insert into labels (build_id,label) values ($newbuildid,?)'\n" if ($verbose);
   335     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,?)")
   336     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());
   337       or die("Couldn't prepare query insert into labels: " . $db->errstr()) if (!$dryrun);
   329       
   338       
   330     for my $entry (@{$labels})
   339     for my $entry (@{$labels})
   331     {
   340     {
   332       my $label = $entry->{label};
   341       my $label = $entry->{label};
   333     
   342     
   334       print " execute '$label'\n" if ($verbose);  
   343       print " execute '$label'\n" if ($verbose);  
   335       $query->execute($label)
   344       $query->execute($label)
   336 		    or print "WARNING: Couldn't execute insert into revision ($label): " . $db->errstr() . "\n";
   345 		    or print "WARNING: Couldn't execute insert into revision ($label): " . $db->errstr() . "\n" if (!$dryrun);
   337     }
   346     }
   338   }
   347   }
   339   print "new build id: $newbuildid\n";
   348   print "new build id: $newbuildid\n";
   340 }
   349 }
   341 else
   350 else
   353     }
   362     }
   354     $field_list =~ s/,$//;
   363     $field_list =~ s/,$//;
   355     
   364     
   356     print " prepare 'update builds set $field_list where id=$id'\n" if ($verbose);
   365     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")
   366     my $query = $db->prepare("update builds set $field_list where id=$id")
   358       or die("Couldn't prepare query update builds: " . $db->errstr());
   367       or die("Couldn't prepare query update builds: " . $db->errstr()) if (!$dryrun);
   359 
   368 
   360     print " execute '@fields'\n" if ($verbose);
   369     print " execute '@fields'\n" if ($verbose);
   361     $query->execute(@fields)
   370     $query->execute(@fields)
   362 		  or print "WARNING: Couldn't execute update builds (@fields): " . $db->errstr() . "\n";
   371 		  or print "WARNING: Couldn't execute update builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   363   }
   372   }
   364   if (@{$envinfo})
   373   if (@{$envinfo})
   365   {
   374   {
   366     print " prepare 'delete from envinfo where build_id=$id'\n" if ($verbose);
   375     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")
   376     my $delete_query = $db->prepare("delete from envinfo where build_id=$id")
   368       or die("Couldn't prepare query delete from envinfo: " . $db->errstr());
   377       or die("Couldn't prepare query delete from envinfo: " . $db->errstr()) if (!$dryrun);
   369     
   378     
   370     print " execute ''\n" if ($verbose);  
   379     print " execute ''\n" if ($verbose);  
   371     $delete_query->execute()
   380     $delete_query->execute()
   372 		    or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n";
   381 		    or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n" if (!$dryrun);
   373     
   382     
   374     print " prepare 'insert into envinfo (build_id,tool,version) values ($id,?,?)'\n" if ($verbose);
   383     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,?,?)")
   384     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());
   385       or die("Couldn't prepare query insert into envinfo: " . $db->errstr()) if (!$dryrun);
   377       
   386       
   378     for my $entry (@{$envinfo})
   387     for my $entry (@{$envinfo})
   379     {
   388     {
   380       my $tool = $entry->{tool};
   389       my $tool = $entry->{tool};
   381       my $version = $entry->{version};
   390       my $version = $entry->{version};
   382     
   391     
   383       print " execute '$tool,$version'\n" if ($verbose);  
   392       print " execute '$tool,$version'\n" if ($verbose);
   384       $query->execute($tool, $version)
   393       $query->execute($tool, $version)
   385 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n";
   394 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n" if (!$dryrun);
   386     }
   395     }
   387   }
   396   }
   388   if (@{$failures})
   397   if (@{$failures})
   389   {
   398   {
   390     print " prepare 'delete from failures where build_id=$id'\n" if ($verbose);
   399     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")
   400     my $delete_query = $db->prepare("delete from failures where build_id=$id")
   392       or die("Couldn't prepare query delete from failures: " . $db->errstr());
   401       or die("Couldn't prepare query delete from failures: " . $db->errstr()) if (!$dryrun);
   393     
   402     
   394     print " execute ''\n" if ($verbose);  
   403     print " execute ''\n" if ($verbose);  
   395     $delete_query->execute()
   404     $delete_query->execute()
   396 		    or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n";
   405 		    or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n" if (!$dryrun);
   397     
   406     
   398     print " prepare 'insert into failures (build_id,category,count) values ($id,?,?)'\n" if ($verbose);
   407     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,?,?)")
   408     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());
   409       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   401       
   410       
   402     for my $entry (@{$failures})
   411     for my $entry (@{$failures})
   403     {
   412     {
   404       my $category = $entry->{category};
   413       my $category = $entry->{category};
   405       my $count = $entry->{count};
   414       my $count = $entry->{count};
   406     
   415     
   407       print " execute '$category,$count'\n" if ($verbose);  
   416       print " execute '$category,$count'\n" if ($verbose);  
   408       $query->execute($category, $count)
   417       $query->execute($category, $count)
   409 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n";
   418 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n" if (!$dryrun);
   410     }
   419     }
   411   }
   420   }
   412   if (@{$reports})
   421   if (@{$reports})
   413   {
   422   {
   414     print " prepare 'delete from reports where build_id=$id'\n" if ($verbose);
   423     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")
   424     my $delete_query = $db->prepare("delete from reports where build_id=$id")
   416       or die("Couldn't prepare query delete from reports: " . $db->errstr());
   425       or die("Couldn't prepare query delete from reports: " . $db->errstr()) if (!$dryrun);
   417     
   426     
   418     print " execute ''\n" if ($verbose);  
   427     print " execute ''\n" if ($verbose);  
   419     $delete_query->execute()
   428     $delete_query->execute()
   420 		    or print "WARNING: Couldn't execute delete from reports: " . $db->errstr() . "\n";
   429 		    or print "WARNING: Couldn't execute delete from reports: " . $db->errstr() . "\n";
   421     
   430     
   422     print " prepare 'insert into reports (build_id,name,url,type) values ($id,?,?,?)'\n" if ($verbose);
   431     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,?,?,?)")
   432     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());
   433       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   425       
   434       
   426     for my $entry (@{$reports})
   435     for my $entry (@{$reports})
   427     {
   436     {
   428       my $name = $entry->{name};
   437       my $name = $entry->{name};
   429       my $url = $entry->{url};
   438       my $url = $entry->{url};
   430       my $type = $entry->{type};
   439       my $type = $entry->{type};
   431     
   440     
   432       print " execute '$name,$url,$type'\n" if ($verbose);  
   441       print " execute '$name,$url,$type'\n" if ($verbose);  
   433       $query->execute($name, $url, $type)
   442       $query->execute($name, $url, $type)
   434 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n";
   443 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n" if (!$dryrun);
   435     }
   444     }
   436   }
   445   }
   437   if (@{$content})
   446   if (@{$content})
   438   {
   447   {
   439     print " prepare 'delete from content where build_id=$id'\n" if ($verbose);
   448     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")
   449     my $delete_query = $db->prepare("delete from content where build_id=$id")
   441       or die("Couldn't prepare query delete from content: " . $db->errstr());
   450       or die("Couldn't prepare query delete from content: " . $db->errstr()) if (!$dryrun);
   442     
   451     
   443     print " execute ''\n" if ($verbose);  
   452     print " execute ''\n" if ($verbose);  
   444     $delete_query->execute()
   453     $delete_query->execute()
   445 		    or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n";
   454 		    or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n" if (!$dryrun);
   446     
   455     
   447     print " prepare 'insert into content (build_id,name,url,revision) values ($id,?,?,?)'\n" if ($verbose);
   456     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,?,?,?)")
   457     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());
   458       or die("Couldn't prepare query insert into content: " . $db->errstr()) if (!$dryrun);
   450       
   459       
   451     for my $entry (@{$content})
   460     for my $entry (@{$content})
   452     {
   461     {
   453       my $name = $entry->{name};
   462       my $name = $entry->{name};
   454       my $url = $entry->{url};
   463       my $url = $entry->{url};
   455       my $revision = $entry->{revision};
   464       my $revision = $entry->{revision};
   456     
   465     
   457       print " execute '$name,$url,$revision'\n" if ($verbose);  
   466       print " execute '$name,$url,$revision'\n" if ($verbose);  
   458       $query->execute($name, $url, $revision)
   467       $query->execute($name, $url, $revision)
   459 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n";
   468 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n" if (!$dryrun);
   460     }
   469     }
   461   }
   470   }
   462   if (@{$labels})
   471   if (@{$labels})
   463   {
   472   {
   464     print " prepare 'delete from labels where build_id=$id'\n" if ($verbose);
   473     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")
   474     my $delete_query = $db->prepare("delete from labels where build_id=$id")
   466       or die("Couldn't prepare query delete from labels: " . $db->errstr());
   475       or die("Couldn't prepare query delete from labels: " . $db->errstr()) if (!$dryrun);
   467     
   476     
   468     print " execute ''\n" if ($verbose);  
   477     print " execute ''\n" if ($verbose);  
   469     $delete_query->execute()
   478     $delete_query->execute()
   470 		    or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n";
   479 		    or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n" if (!$dryrun);
   471     
   480     
   472     print " prepare 'insert into labels (build_id,label) values ($id,?)'\n" if ($verbose);
   481     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,?)")
   482     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());
   483       or die("Couldn't prepare query insert into label: " . $db->errstr()) if (!$dryrun);
   475       
   484       
   476     for my $entry (@{$labels})
   485     for my $entry (@{$labels})
   477     {
   486     {
   478       my $label = $entry->{label};
   487       my $label = $entry->{label};
   479       
   488       
   480       print " execute '$label'\n" if ($verbose);  
   489       print " execute '$label'\n" if ($verbose);  
   481       $query->execute($label)
   490       $query->execute($label)
   482 		    or print "WARNING: Couldn't execute insert into labels ($label): " . $db->errstr() . "\n";
   491 		    or print "WARNING: Couldn't execute insert into labels ($label): " . $db->errstr() . "\n" if (!$dryrun);
   483     }
   492     }
   484   }
   493   }
   485 }
   494 }
   486 DisconnectFromDB();
   495 DisconnectFromDB();
   487 
   496