common/tools/bitops.pl
changeset 1280 61388ab6ba2c
parent 1182 f15fa527df95
child 1281 c5308055d94d
equal deleted inserted replaced
1279:3329abb5855b 1280:61388ab6ba2c
     8 
     8 
     9 use Getopt::Long;
     9 use Getopt::Long;
    10 
    10 
    11 my $help = 0;
    11 my $help = 0;
    12 my $create = 0;
    12 my $create = 0;
       
    13 my $file = '';
    13 my $id = '';
    14 my $id = '';
    14 my $file = '';
    15 my $append = 0;
       
    16 my $delete = '';
    15 my $verbose = 0;
    17 my $verbose = 0;
    16 my $dryrun = 0;
    18 my $dryrun = 0;
    17 GetOptions((
    19 GetOptions((
    18 	'create!' => \$create,
    20 	'create!' => \$create,
    19 	'file=s' => \$file,
    21 	'file=s' => \$file,
    20 	'id=s' => \$id,
    22 	'update=s' => \$id,
       
    23 	'append!' => \$append,
       
    24 	'remove=s' => \$delete,
    21 	'help!' => \$help,
    25 	'help!' => \$help,
    22 	'verbose!' => \$verbose,
    26 	'verbose!' => \$verbose,
    23 	'dryrun!' => \$dryrun,
    27 	'dryrun!' => \$dryrun,
    24 ));
    28 ));
    25 
    29 
    26 if ($help||!$file)
    30 if ($help||(($create||$id)&&!$file)||(!$create&&!$id&&!$delete))
    27 {
    31 {
    28   print <<_EOH;
    32   print <<_EOH;
    29 bitops
    33 bitops
    30 Executes operations on the BIT db
    34 Executes operations on the BIT db
    31 
    35 
    32 Usage: bitops.pl [-c|-i ID] -f FILE
    36 Usage:
       
    37   bitops.pl -c -f FILE
       
    38   bitops.pl -u ID [-a] -f FILE
       
    39   bitops.pl -r ID
    33 
    40 
    34 Options:
    41 Options:
    35   -h, --help            Show this help message and exit
    42   -h, --help            Show this help message and exit
    36   -c, --create          Create entry for a new build then set the attributes to
    43   -c, --create          Create entry for a new build then set the attributes to
    37                         the values provided in FILE. Returns the build id for
    44                         the values provided in FILE. Returns the build id for
    38                         the newly created build.
    45                         the newly created build.
    39   -i ID, --id ID        Update entry for build number ID with the values
    46   -u ID, --update ID    Update entry for build number ID with the values
    40                         provided in FILE.
    47                         provided in FILE. For the update operation only the
       
    48                         entry in the BUILDS table will be actually updated, the
       
    49                         entries in the other tables will be deleted, then the
       
    50                         data supplied will be inserted (this behaviour can be
       
    51                         changed with the -a option)
       
    52   -a, --append          Do not delete entries in the tables different than
       
    53                         BUILDS before inserting the data supplied. This option
       
    54                         must be used in conjuntion with -u (see info for -u
       
    55                         option for more information)
       
    56   -r, --remove          Remove build ID (entries in all tables) from the db
    41   -f FILE, --file FILE  Use attributes in FILE to create/update the build info
    57   -f FILE, --file FILE  Use attributes in FILE to create/update the build info
    42                         See below for file format.
    58                         See below for file format.
    43   -v, --verbose         Increase info level
    59   -v, --verbose         Increase info level
    44   -d, --dryrun          Only show what would happen, do not actually interact
    60   -d, --dryrun          Only show what would happen, do not actually interact
    45                         with the DB
    61                         with the DB
    46   
    62   
    47 File format:
    63 File format:
    48   File must be a list of attribute-value-pairs. One avp per line, on each line
    64   File must be a list of attribute-value-pairs. One avp per line, on each line
    49   attribute and value are separated by a tab.
    65   attribute and value are separated by a tab.
    50   These are the supported attributes (in brackets the syntax of the value):
    66   These are the supported attributes (in brackets the syntax of the value) with
    51   - build_id_string
    67   the table they belong to:
    52   - package (VALUE)
    68   - build_id_string - BUILDS
    53   - platform (VALUE)
    69   - package (VALUE) - BUILDS
    54   - started (VALUE)
    70   - platform (VALUE) - BUILDS
    55   - finished (VALUE)
    71   - started (VALUE) - BUILDS
    56   - creator (VALUE)
    72   - finished (VALUE) - BUILDS
    57   - machine (VALUE)
    73   - creator (VALUE) - BUILDS
    58   - build_brag (VALUE)
    74   - machine (VALUE) - BUILDS
    59   - test_brag (VALUE)
    75   - build_brag (VALUE) - BUILDS
    60   - baseline_short (VALUE)
    76   - test_brag (VALUE) - BUILDS
    61   - sources_short (VALUE)
    77   - baseline_short (VALUE) - BUILDS
    62   - envinfo (TOOL,VERSION)
    78   - sources_short (VALUE) - BUILDS
    63   - failure (CATEGORY,COUNT)
    79   - envinfo (TOOL,VERSION) - ENVINFO
    64   - report (NAME,URL,TYPE)
    80   - failure (CATEGORY,COUNT) - FAILURES
    65   - content (NAME,URL,REVISION)
    81   - report (NAME,URL,TYPE) - REPORTS
    66   - baseline (TYPE,PATH)
    82   - content (NAME,URL,REVISION) - CONTENT
    67   - label (VALUE)
    83   - baseline (TYPE,PATH) - BASELINES
       
    84   - label (VALUE) - LABELS
       
    85   - test (NAME,TYPE,TARGET,STARTED,FINISHED,CASES_TOTAL,CASES_PASSED,
       
    86       CASES_FAILED,CASES_NOT_RUN,CASES_NOT_AVAILABLE,PASS_RATE) - TESTING
       
    87   
       
    88 Note on the update operation:
    68 _EOH
    89 _EOH
    69 	exit(0);
    90 	exit(0);
    70 }
    91 }
    71 
    92 
    72 my $db = undef;
    93 my $db = undef;
    76 my $failures = [];
    97 my $failures = [];
    77 my $reports = [];
    98 my $reports = [];
    78 my $content = [];
    99 my $content = [];
    79 my $baselines = [];
   100 my $baselines = [];
    80 my $labels = [];
   101 my $labels = [];
    81 my $testing_entry = {};
   102 my $testing = [];
    82 
   103 
    83 sub ConnectToDB()
   104 sub ConnectToDB()
    84 {
   105 {
    85 	$db = DBI->connect('DBI:mysql:bit:v800016:3306','fbf','mysql')
   106 	$db = DBI->connect('DBI:mysql:bit:v800016:3306','fbf','mysql')
    86 		or die("Couldn't connect to database: " . DBI->errstr()) if (!$dryrun);
   107 		or die("Couldn't connect to database: " . DBI->errstr()) if (!$dryrun);
   110     if ($line =~ /([^\t]+)\t([^\t]+)/)
   131     if ($line =~ /([^\t]+)\t([^\t]+)/)
   111     {
   132     {
   112       my $attr = $1;
   133       my $attr = $1;
   113       my $value = $2;
   134       my $value = $2;
   114       
   135       
   115       if ($attr =~ /^(build_id_string|package|platform|started|finished|creator|machine|build_brag|test_brag|baseline_short|sources_short)$/i)
   136       if ($attr =~ /^(build_id_string|package|platform|started|finished|creator|machine|build_brag|test_brag|baseline_short|sources_short|id)$/i)
   116       {
   137       {
   117         $attr = lc($attr);
   138         $attr = lc($attr);
   118         print " found ($attr,$value) for table 'build'\n" if ($verbose);
   139         print " found ($attr,$value) for table 'build'\n" if ($verbose);
   119         $builds_entry->{$attr}=$value;
   140         $builds_entry->{$attr}=$value;
   120       }
   141       }
   233       elsif ($attr =~ /^(label)$/i)
   254       elsif ($attr =~ /^(label)$/i)
   234       {
   255       {
   235         print " found ($attr,$value) for table 'labels'\n" if ($verbose);
   256         print " found ($attr,$value) for table 'labels'\n" if ($verbose);
   236         push(@{$labels}, {label=>$value});
   257         push(@{$labels}, {label=>$value});
   237       }
   258       }
       
   259       elsif ($attr =~ /^(test)$/i)
       
   260       {
       
   261         $attr = lc($attr);
       
   262         if ($value =~ /([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)/)
       
   263         {
       
   264           my $name=$1;
       
   265           my $type=$2;
       
   266           my $target=$3;
       
   267           my $started=$4;
       
   268           my $finished=$5;
       
   269           my $cases_total=$6;
       
   270           $cases_total=0 if (!$cases_total);
       
   271           my $cases_passed=$7;
       
   272           $cases_passed=0 if (!$cases_passed);
       
   273           my $cases_failed=$8;
       
   274           $cases_failed=0 if (!$cases_failed);
       
   275           my $cases_not_run=$9;
       
   276           $cases_not_run=0 if (!$cases_not_run);
       
   277           my $cases_not_available=$10;
       
   278           $cases_not_available=0 if (!$cases_not_available);
       
   279           my $pass_rate=$11;
       
   280           $pass_rate="0.0" if (!$pass_rate);
       
   281           
       
   282           if (!$name)
       
   283           {
       
   284             print "ERROR: Name is empty: \"$value\"\n";
       
   285             return 1;
       
   286           }
       
   287           print " found ($name,$type,$target,$started,$finished,$cases_total,$cases_passed,$cases_failed,$cases_not_run,$cases_not_available,$pass_rate) for table 'testing'\n" if ($verbose);
       
   288           push(@{$testing}, {name=>$name,type=>$type,target=>$target,started=>$started,finished=>$finished,
       
   289             cases_total=>$cases_total,cases_passed=>$cases_passed,cases_failed=>$cases_failed,cases_not_run=>$cases_not_run,
       
   290             cases_not_available=>$cases_not_available,pass_rate=>$pass_rate});
       
   291         }
       
   292         else
       
   293         {
       
   294           print "ERROR: Could not understand value of envinfo: \"$value\"\n";
       
   295           return 1;
       
   296         }
       
   297       }
   238       else
   298       else
   239       {
   299       {
   240         print "ERROR: Could not understand avp: \"$line\"\n";
   300         print "ERROR: Could not understand avp: \"$line\"\n";
   241         return 1;
   301         return 1;
   242       }
   302       }
   252   close(FILE);
   312   close(FILE);
   253   return 0;
   313   return 0;
   254 }
   314 }
   255 
   315 
   256 # MAIN PROGRAM
   316 # MAIN PROGRAM
   257 
   317 my $r=0;
   258 my $r=parse_file($file);
   318 $r=parse_file($file) if ($create||$id);
   259 if ($r)
   319 if ($r)
   260 {
   320 {
   261   print "Error while parsing file $file\n";
   321   print "Error while parsing file $file\n";
   262   exit(1);
   322   exit(1);
   263 }
   323 }
   284     
   344     
   285     my $query = $db->prepare("insert into builds ($field_list) values ($qm_list)")
   345     my $query = $db->prepare("insert into builds ($field_list) values ($qm_list)")
   286       or die("Couldn't prepare query insert into builds: " . $db->errstr()) if (!$dryrun);
   346       or die("Couldn't prepare query insert into builds: " . $db->errstr()) if (!$dryrun);
   287 
   347 
   288     $query->execute(@fields)
   348     $query->execute(@fields)
   289 		  or print "WARNING: Couldn't execute insert into builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   349 		  or print "WARNING: Couldn't execute insert into builds ($field_list) values (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   290 		  
   350 		  
   291 		$newbuildid = $db->last_insert_id(undef, undef, undef, undef) if (!$dryrun);
   351 		$newbuildid = $db->last_insert_id(undef, undef, undef, undef) if (!$dryrun);
   292   }
   352   }
   293   if (@{$envinfo})
   353   if (@{$envinfo})
   294   {
   354   {
   383       print " execute '$label'\n" if ($verbose);  
   443       print " execute '$label'\n" if ($verbose);  
   384       $query->execute($label)
   444       $query->execute($label)
   385 		    or print "WARNING: Couldn't execute insert into revision ($label): " . $db->errstr() . "\n" if (!$dryrun);
   445 		    or print "WARNING: Couldn't execute insert into revision ($label): " . $db->errstr() . "\n" if (!$dryrun);
   386     }
   446     }
   387   }
   447   }
       
   448   
       
   449   if (@{$testing})
       
   450   {
       
   451     print " prepare_cached 'insert into testing (build_id,name,type,target,started,finished,cases_total,cases_passed,cases_failed,cases_not_run,cases_not_available,pass_rate) values ($newbuildid,?,?,?,?,?,?,?,?,?,?,?)'\n" if ($verbose);
       
   452     my $query = $db->prepare_cached("insert into testing (build_id,name,type,target,started,finished,cases_total,cases_passed,cases_failed,cases_not_run,cases_not_available,pass_rate) values ($newbuildid,?,?,?,?,?,?,?,?,?,?,?)")
       
   453       or die("Couldn't prepare query insert into testing: " . $db->errstr()) if (!$dryrun);
       
   454       
       
   455     for my $entry (@{$testing})
       
   456     {
       
   457       my $name = $entry->{name};
       
   458       my $type = $entry->{type};
       
   459       my $target = $entry->{target};
       
   460       my $started = $entry->{started};
       
   461       my $finished = $entry->{finished};
       
   462       my $cases_total = $entry->{cases_total};
       
   463       my $cases_passed = $entry->{cases_passed};
       
   464       my $cases_failed = $entry->{cases_failed};
       
   465       my $cases_not_run = $entry->{cases_not_run};
       
   466       my $cases_not_available = $entry->{cases_not_available};
       
   467       my $pass_rate = $entry->{pass_rate};
       
   468     
       
   469       print " execute '$name,$type,$target,$started,$finished,$cases_total,$cases_passed,$cases_failed,$cases_not_run,$cases_not_available,$pass_rate'\n" if ($verbose);  
       
   470       $query->execute($name,$type,$target,$started,$finished,$cases_total,$cases_passed,$cases_failed,$cases_not_run,$cases_not_available,$pass_rate)
       
   471 		    or print "WARNING: Couldn't execute insert into testing ($name,$type,$target,$started,$finished,$cases_total,$cases_passed,$cases_failed,$cases_not_run,$cases_not_available,$pass_rate): " . $db->errstr() . "\n" if (!$dryrun);
       
   472     }
       
   473   }
   388   print "new build id: $newbuildid\n";
   474   print "new build id: $newbuildid\n";
   389 }
   475 }
   390 else
   476 elsif ($id)
   391 {
   477 {
   392   print "Updating build $id\n";
   478   print "Updating build $id\n";
       
   479   
       
   480   if (defined $builds_entry->{id} && $id != $builds_entry->{id})
       
   481   {
       
   482     print "ERROR: The build id specified in the input file is different than the one on the command line. Not updating build.\n";
       
   483     exit(1);
       
   484   }
   393   
   485   
   394   if (keys %{$builds_entry})
   486   if (keys %{$builds_entry})
   395   {
   487   {
   396     my $field_list = '';
   488     my $field_list = '';
   397     my @fields = ();
   489     my @fields = ();
   410     $query->execute(@fields)
   502     $query->execute(@fields)
   411 		  or print "WARNING: Couldn't execute update builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   503 		  or print "WARNING: Couldn't execute update builds (@fields): " . $db->errstr() . "\n" if (!$dryrun);
   412   }
   504   }
   413   if (@{$envinfo})
   505   if (@{$envinfo})
   414   {
   506   {
   415     print " prepare 'delete from envinfo where build_id=$id'\n" if ($verbose);
   507 	if (!$append)
   416     my $delete_query = $db->prepare("delete from envinfo where build_id=$id")
   508 	{
   417       or die("Couldn't prepare query delete from envinfo: " . $db->errstr()) if (!$dryrun);
   509       print " prepare 'delete from envinfo where build_id=$id'\n" if ($verbose);
   418     
   510       my $delete_query = $db->prepare("delete from envinfo where build_id=$id")
   419     print " execute ''\n" if ($verbose);  
   511         or die("Couldn't prepare query delete from envinfo: " . $db->errstr()) if (!$dryrun);
   420     $delete_query->execute()
   512     
   421 		    or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n" if (!$dryrun);
   513       print " execute ''\n" if ($verbose);  
       
   514       $delete_query->execute()
       
   515 	    or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n" if (!$dryrun);
       
   516     }
   422     
   517     
   423     print " prepare 'insert into envinfo (build_id,tool,version) values ($id,?,?)'\n" if ($verbose);
   518     print " prepare 'insert into envinfo (build_id,tool,version) values ($id,?,?)'\n" if ($verbose);
   424     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($id,?,?)")
   519     my $query = $db->prepare_cached("insert into envinfo (build_id,tool,version) values ($id,?,?)")
   425       or die("Couldn't prepare query insert into envinfo: " . $db->errstr()) if (!$dryrun);
   520       or die("Couldn't prepare query insert into envinfo: " . $db->errstr()) if (!$dryrun);
   426       
   521       
   434 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n" if (!$dryrun);
   529 		    or print "WARNING: Couldn't execute insert into envinfo ($tool,$version): " . $db->errstr() . "\n" if (!$dryrun);
   435     }
   530     }
   436   }
   531   }
   437   if (@{$failures})
   532   if (@{$failures})
   438   {
   533   {
   439     print " prepare 'delete from failures where build_id=$id'\n" if ($verbose);
   534     if (!$append)
   440     my $delete_query = $db->prepare("delete from failures where build_id=$id")
   535 	{
   441       or die("Couldn't prepare query delete from failures: " . $db->errstr()) if (!$dryrun);
   536       print " prepare 'delete from failures where build_id=$id'\n" if ($verbose);
   442     
   537       my $delete_query = $db->prepare("delete from failures where build_id=$id")
   443     print " execute ''\n" if ($verbose);  
   538         or die("Couldn't prepare query delete from failures: " . $db->errstr()) if (!$dryrun);
   444     $delete_query->execute()
   539     
   445 		    or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n" if (!$dryrun);
   540       print " execute ''\n" if ($verbose);  
   446     
   541       $delete_query->execute()
       
   542 	    or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n" if (!$dryrun);
       
   543     }
       
   544 	    
   447     print " prepare 'insert into failures (build_id,category,count) values ($id,?,?)'\n" if ($verbose);
   545     print " prepare 'insert into failures (build_id,category,count) values ($id,?,?)'\n" if ($verbose);
   448     my $query = $db->prepare_cached("insert into failures (build_id,category,count) values ($id,?,?)")
   546     my $query = $db->prepare_cached("insert into failures (build_id,category,count) values ($id,?,?)")
   449       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   547       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   450       
   548       
   451     for my $entry (@{$failures})
   549     for my $entry (@{$failures})
   458 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n" if (!$dryrun);
   556 		    or print "WARNING: Couldn't execute insert into failures ($category,$count): " . $db->errstr() . "\n" if (!$dryrun);
   459     }
   557     }
   460   }
   558   }
   461   if (@{$reports})
   559   if (@{$reports})
   462   {
   560   {
   463     print " prepare 'delete from reports where build_id=$id'\n" if ($verbose);
   561     if (!$append)
   464     my $delete_query = $db->prepare("delete from reports where build_id=$id")
   562 	{
   465       or die("Couldn't prepare query delete from reports: " . $db->errstr()) if (!$dryrun);
   563       print " prepare 'delete from reports where build_id=$id'\n" if ($verbose);
   466     
   564       my $delete_query = $db->prepare("delete from reports where build_id=$id")
   467     print " execute ''\n" if ($verbose);  
   565         or die("Couldn't prepare query delete from reports: " . $db->errstr()) if (!$dryrun);
   468     $delete_query->execute()
   566     
   469 		    or print "WARNING: Couldn't execute delete from reports: " . $db->errstr() . "\n";
   567       print " execute ''\n" if ($verbose);  
       
   568       $delete_query->execute()
       
   569 	    or print "WARNING: Couldn't execute delete from reports: " . $db->errstr() . "\n";
       
   570     }
   470     
   571     
   471     print " prepare 'insert into reports (build_id,name,url,type) values ($id,?,?,?)'\n" if ($verbose);
   572     print " prepare 'insert into reports (build_id,name,url,type) values ($id,?,?,?)'\n" if ($verbose);
   472     my $query = $db->prepare_cached("insert into reports (build_id,name,url,type) values ($id,?,?,?)")
   573     my $query = $db->prepare_cached("insert into reports (build_id,name,url,type) values ($id,?,?,?)")
   473       or die("Couldn't prepare query insert into failures: " . $db->errstr()) if (!$dryrun);
   574       or die("Couldn't prepare query insert into reports: " . $db->errstr()) if (!$dryrun);
   474       
   575       
   475     for my $entry (@{$reports})
   576     for my $entry (@{$reports})
   476     {
   577     {
   477       my $name = $entry->{name};
   578       my $name = $entry->{name};
   478       my $url = $entry->{url};
   579       my $url = $entry->{url};
   483 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n" if (!$dryrun);
   584 		    or print "WARNING: Couldn't execute insert into reports ($name,$url,$type): " . $db->errstr() . "\n" if (!$dryrun);
   484     }
   585     }
   485   }
   586   }
   486   if (@{$content})
   587   if (@{$content})
   487   {
   588   {
   488     print " prepare 'delete from content where build_id=$id'\n" if ($verbose);
   589     if (!$append)
   489     my $delete_query = $db->prepare("delete from content where build_id=$id")
   590 	{
   490       or die("Couldn't prepare query delete from content: " . $db->errstr()) if (!$dryrun);
   591 	  print " prepare 'delete from content where build_id=$id'\n" if ($verbose);
   491     
   592       my $delete_query = $db->prepare("delete from content where build_id=$id")
   492     print " execute ''\n" if ($verbose);  
   593         or die("Couldn't prepare query delete from content: " . $db->errstr()) if (!$dryrun);
   493     $delete_query->execute()
   594     
   494 		    or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n" if (!$dryrun);
   595       print " execute ''\n" if ($verbose);  
       
   596       $delete_query->execute()
       
   597 	    or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n" if (!$dryrun);
       
   598     }
   495     
   599     
   496     print " prepare 'insert into content (build_id,name,url,revision) values ($id,?,?,?)'\n" if ($verbose);
   600     print " prepare 'insert into content (build_id,name,url,revision) values ($id,?,?,?)'\n" if ($verbose);
   497     my $query = $db->prepare_cached("insert into content (build_id,name,url,revision) values ($id,?,?,?)")
   601     my $query = $db->prepare_cached("insert into content (build_id,name,url,revision) values ($id,?,?,?)")
   498       or die("Couldn't prepare query insert into content: " . $db->errstr()) if (!$dryrun);
   602       or die("Couldn't prepare query insert into content: " . $db->errstr()) if (!$dryrun);
   499       
   603       
   508 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n" if (!$dryrun);
   612 		    or print "WARNING: Couldn't execute insert into content ($name,$url,$revision): " . $db->errstr() . "\n" if (!$dryrun);
   509     }
   613     }
   510   }
   614   }
   511   if (@{$baselines})
   615   if (@{$baselines})
   512   {
   616   {
   513     print " prepare 'delete from baselines where build_id=$id'\n" if ($verbose);
   617     if (!$append)
   514     my $delete_query = $db->prepare("delete from baselines where build_id=$id")
   618 	{
   515       or die("Couldn't prepare query delete from baselines: " . $db->errstr()) if (!$dryrun);
   619 	  print " prepare 'delete from baselines where build_id=$id'\n" if ($verbose);
   516     
   620       my $delete_query = $db->prepare("delete from baselines where build_id=$id")
   517     print " execute ''\n" if ($verbose);  
   621         or die("Couldn't prepare query delete from baselines: " . $db->errstr()) if (!$dryrun);
   518     $delete_query->execute()
   622     
   519 		    or print "WARNING: Couldn't execute delete from baselines: " . $db->errstr() . "\n" if (!$dryrun);
   623       print " execute ''\n" if ($verbose);  
       
   624       $delete_query->execute()
       
   625 	    or print "WARNING: Couldn't execute delete from baselines: " . $db->errstr() . "\n" if (!$dryrun);
       
   626     }
   520     
   627     
   521     print " prepare 'insert into baselines (build_id,type,path) values ($id,?,?)'\n" if ($verbose);
   628     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,?,?)")
   629     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);
   630       or die("Couldn't prepare query insert into baselines: " . $db->errstr()) if (!$dryrun);
   524       
   631       
   532 		    or print "WARNING: Couldn't execute insert into baselines ($type,$path): " . $db->errstr() . "\n" if (!$dryrun);
   639 		    or print "WARNING: Couldn't execute insert into baselines ($type,$path): " . $db->errstr() . "\n" if (!$dryrun);
   533     }
   640     }
   534   }
   641   }
   535   if (@{$labels})
   642   if (@{$labels})
   536   {
   643   {
   537     print " prepare 'delete from labels where build_id=$id'\n" if ($verbose);
   644     if (!$append)
   538     my $delete_query = $db->prepare("delete from labels where build_id=$id")
   645 	{
   539       or die("Couldn't prepare query delete from labels: " . $db->errstr()) if (!$dryrun);
   646 	  print " prepare 'delete from labels where build_id=$id'\n" if ($verbose);
   540     
   647       my $delete_query = $db->prepare("delete from labels where build_id=$id")
   541     print " execute ''\n" if ($verbose);  
   648         or die("Couldn't prepare query delete from labels: " . $db->errstr()) if (!$dryrun);
   542     $delete_query->execute()
   649     
   543 		    or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n" if (!$dryrun);
   650       print " execute ''\n" if ($verbose);  
       
   651       $delete_query->execute()
       
   652 	    or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n" if (!$dryrun);
       
   653     }
   544     
   654     
   545     print " prepare 'insert into labels (build_id,label) values ($id,?)'\n" if ($verbose);
   655     print " prepare 'insert into labels (build_id,label) values ($id,?)'\n" if ($verbose);
   546     my $query = $db->prepare_cached("insert into label (build_id,label) values ($id,?)")
   656     my $query = $db->prepare_cached("insert into label (build_id,label) values ($id,?)")
   547       or die("Couldn't prepare query insert into label: " . $db->errstr()) if (!$dryrun);
   657       or die("Couldn't prepare query insert into label: " . $db->errstr()) if (!$dryrun);
       
   658     
   548       
   659       
   549     for my $entry (@{$labels})
   660     for my $entry (@{$labels})
   550     {
   661     {
   551       my $label = $entry->{label};
   662       my $label = $entry->{label};
   552       
   663       
   553       print " execute '$label'\n" if ($verbose);  
   664       print " execute '$label'\n" if ($verbose);  
   554       $query->execute($label)
   665       $query->execute($label)
   555 		    or print "WARNING: Couldn't execute insert into labels ($label): " . $db->errstr() . "\n" if (!$dryrun);
   666 		    or print "WARNING: Couldn't execute insert into labels ($label): " . $db->errstr() . "\n" if (!$dryrun);
   556     }
   667     }
   557   }
   668   }
       
   669   if (@{$testing})
       
   670   {
       
   671     if (!$append)
       
   672 	{
       
   673 	  print " prepare 'delete from testing where build_id=$id'\n" if ($verbose);
       
   674       my $delete_query = $db->prepare("delete from testing where build_id=$id")
       
   675         or die("Couldn't prepare query delete from testing: " . $db->errstr()) if (!$dryrun);
       
   676     
       
   677       print " execute ''\n" if ($verbose);  
       
   678       $delete_query->execute()
       
   679 	    or print "WARNING: Couldn't execute delete from testing: " . $db->errstr() . "\n";
       
   680     }
       
   681     
       
   682     print " prepare 'insert into testing (build_id,name,type,target,started,finished,cases_total,cases_passed,cases_failed,cases_not_run,cases_not_available,pass_rate) values ($id,?,?,?,?,?,?,?,?,?,?,?)'\n" if ($verbose);
       
   683     my $query = $db->prepare_cached("insert into testing (build_id,name,type,target,started,finished,cases_total,cases_passed,cases_failed,cases_not_run,cases_not_available,pass_rate) values ($id,?,?,?,?,?,?,?,?,?,?,?)")
       
   684       or die("Couldn't prepare query insert into testing: " . $db->errstr()) if (!$dryrun);
       
   685       
       
   686     for my $entry (@{$testing})
       
   687     {
       
   688 	  my $name = $entry->{name};
       
   689       my $type = $entry->{type};
       
   690       my $target = $entry->{target};
       
   691       my $started = $entry->{started};
       
   692       my $finished = $entry->{finished};
       
   693       my $cases_total = $entry->{cases_total};
       
   694       my $cases_passed = $entry->{cases_passed};
       
   695       my $cases_failed = $entry->{cases_failed};
       
   696       my $cases_not_run = $entry->{cases_not_run};
       
   697       my $cases_not_available = $entry->{cases_not_available};
       
   698       my $pass_rate = $entry->{pass_rate};
       
   699     
       
   700       print " execute '$name,$type,$target,$started,$finished,$cases_total,$cases_passed,$cases_failed,$cases_not_run,$cases_not_available,$pass_rate'\n" if ($verbose);
       
   701       $query->execute($name,$type,$target,$started,$finished,$cases_total,$cases_passed,$cases_failed,$cases_not_run,$cases_not_available,$pass_rate)
       
   702 		    or print "WARNING: Couldn't execute insert into testing ($name,$type,$target,$started,$finished,$cases_total,$cases_passed,$cases_failed,$cases_not_run,$cases_not_available,$pass_rate): " . $db->errstr() . "\n" if (!$dryrun);
       
   703     }
       
   704   }
       
   705 }
       
   706 elsif ($delete)
       
   707 {
       
   708   print "Removing build $delete\n";
       
   709   
       
   710   print " prepare 'delete from builds where id=$delete'\n" if ($verbose);
       
   711   my $delete_query = $db->prepare("delete from builds where id=$delete")
       
   712     or die("Couldn't prepare query delete from builds: " . $db->errstr()) if (!$dryrun);
       
   713   print " execute ''\n" if ($verbose);  
       
   714   $delete_query->execute()
       
   715     or print "WARNING: Couldn't execute delete from builds: " . $db->errstr() . "\n" if (!$dryrun);
       
   716   
       
   717   print " prepare 'delete from envinfo where build_id=$delete'\n" if ($verbose);
       
   718   $delete_query = $db->prepare("delete from envinfo where build_id=$delete")
       
   719     or die("Couldn't prepare query delete from envinfo: " . $db->errstr()) if (!$dryrun);
       
   720   print " execute ''\n" if ($verbose);  
       
   721   $delete_query->execute()
       
   722     or print "WARNING: Couldn't execute delete from envinfo: " . $db->errstr() . "\n" if (!$dryrun);
       
   723   
       
   724   print " prepare 'delete from failures where build_id=$delete'\n" if ($verbose);
       
   725   $delete_query = $db->prepare("delete from failures where build_id=$delete")
       
   726     or die("Couldn't prepare query delete from failures: " . $db->errstr()) if (!$dryrun);
       
   727   print " execute ''\n" if ($verbose);  
       
   728   $delete_query->execute()
       
   729     or print "WARNING: Couldn't execute delete from failures: " . $db->errstr() . "\n" if (!$dryrun);
       
   730     
       
   731   print " prepare 'delete from reports where build_id=$delete'\n" if ($verbose);
       
   732   $delete_query = $db->prepare("delete from reports where build_id=$delete")
       
   733     or die("Couldn't prepare query delete from reports: " . $db->errstr()) if (!$dryrun);
       
   734   print " execute ''\n" if ($verbose);  
       
   735   $delete_query->execute()
       
   736     or print "WARNING: Couldn't execute delete from reports: " . $db->errstr() . "\n" if (!$dryrun);
       
   737 
       
   738   print " prepare 'delete from content where build_id=$delete'\n" if ($verbose);
       
   739   $delete_query = $db->prepare("delete from content where build_id=$delete")
       
   740     or die("Couldn't prepare query delete from content: " . $db->errstr()) if (!$dryrun);
       
   741   print " execute ''\n" if ($verbose);  
       
   742   $delete_query->execute()
       
   743     or print "WARNING: Couldn't execute delete from content: " . $db->errstr() . "\n" if (!$dryrun);
       
   744     
       
   745   print " prepare 'delete from baselines where build_id=$delete'\n" if ($verbose);
       
   746   $delete_query = $db->prepare("delete from baselines where build_id=$delete")
       
   747     or die("Couldn't prepare query delete from baselines: " . $db->errstr()) if (!$dryrun);
       
   748   print " execute ''\n" if ($verbose);  
       
   749   $delete_query->execute()
       
   750     or print "WARNING: Couldn't execute delete from baselines: " . $db->errstr() . "\n" if (!$dryrun);
       
   751 
       
   752   print " prepare 'delete from labels where build_id=$delete'\n" if ($verbose);
       
   753   $delete_query = $db->prepare("delete from labels where build_id=$delete")
       
   754     or die("Couldn't prepare query delete from labels: " . $db->errstr()) if (!$dryrun);
       
   755   print " execute ''\n" if ($verbose);  
       
   756   $delete_query->execute()
       
   757     or print "WARNING: Couldn't execute delete from labels: " . $db->errstr() . "\n" if (!$dryrun);
       
   758     
       
   759   print " prepare 'delete from testing where build_id=$delete'\n" if ($verbose);
       
   760   $delete_query = $db->prepare("delete from testing where build_id=$delete")
       
   761     or die("Couldn't prepare query delete from testing: " . $db->errstr()) if (!$dryrun);
       
   762   print " execute ''\n" if ($verbose);  
       
   763   $delete_query->execute()
       
   764     or print "WARNING: Couldn't execute delete from testing: " . $db->errstr() . "\n" if (!$dryrun);
   558 }
   765 }
   559 DisconnectFromDB();
   766 DisconnectFromDB();
   560 
   767 
   561 
   768