diff options
Diffstat (limited to 'scripts/migrate_whiteboard_keyword.pl')
-rwxr-xr-x | scripts/migrate_whiteboard_keyword.pl | 123 |
1 files changed, 70 insertions, 53 deletions
diff --git a/scripts/migrate_whiteboard_keyword.pl b/scripts/migrate_whiteboard_keyword.pl index a1bbf6152..ce97455ce 100755 --- a/scripts/migrate_whiteboard_keyword.pl +++ b/scripts/migrate_whiteboard_keyword.pl @@ -47,13 +47,16 @@ use Term::ANSIColor qw(colored); Bugzilla->usage_mode(USAGE_MODE_CMDLINE); my ($remove_whiteboard, $help, $doit); -GetOptions("r|remove" => \$remove_whiteboard, - "h|help" => \$help, 'doit' => \$doit); +GetOptions( + "r|remove" => \$remove_whiteboard, + "h|help" => \$help, + 'doit' => \$doit +); sub usage { - my $error = shift || ""; - print colored(['red'], $error) if $error; - print <<USAGE; + my $error = shift || ""; + print colored(['red'], $error) if $error; + print <<USAGE; Usage: migrate_whiteboard_keyword.pl [--remove|-r] [--help|-h] [--doit] E.g.: migrate_whiteboard_keyword.pl --remove --doit "good first bug" "good-first-bug" @@ -63,7 +66,7 @@ given, then string will be removed from the whiteboard as well. Pass --doit to make the database changes permanent. USAGE - exit(1); + exit(1); } # exit if help was requested @@ -71,30 +74,33 @@ usage() if $help; # grab whiteboard and keyword my $whiteboard = shift; -my $keyword = shift; -($whiteboard && $keyword) || usage("Whiteboard or keyword strings were not provided\n"); +my $keyword = shift; +($whiteboard && $keyword) + || usage("Whiteboard or keyword strings were not provided\n"); trick_taint($whiteboard); trick_taint($keyword); # User to make changes as automation@bmo.tld -my $auto_user = Bugzilla::User->check({ name => 'automation@bmo.tld' }); +my $auto_user = Bugzilla::User->check({name => 'automation@bmo.tld'}); $auto_user || usage("Can't find user 'automation\@bmo.tld'\n"); # field ids for logging activity -my $keyword_field = Bugzilla::Field->new({ name => 'keywords'}); +my $keyword_field = Bugzilla::Field->new({name => 'keywords'}); $keyword_field || usage("Can't find field 'keywords'\n"); -my $whiteboard_field = Bugzilla::Field->new({ name => 'status_whiteboard' }); +my $whiteboard_field = Bugzilla::Field->new({name => 'status_whiteboard'}); $whiteboard_field || usage("Can't find field 'status_whiteboard'\n"); # keyword object (assumes already created) -my $keyword_obj = Bugzilla::Keyword->new({ name => $keyword }); +my $keyword_obj = Bugzilla::Keyword->new({name => $keyword}); $keyword_obj || usage("Can't find keyword '$keyword'\n"); my $dbh = Bugzilla->dbh; -my $bugs = $dbh->selectall_arrayref("SELECT DISTINCT bugs.bug_id, bugs.status_whiteboard +my $bugs = $dbh->selectall_arrayref( + "SELECT DISTINCT bugs.bug_id, bugs.status_whiteboard FROM bugs WHERE bugs.status_whiteboard LIKE ?", - { Slice => {} }, '%' . $whiteboard . '%'); + {Slice => {}}, '%' . $whiteboard . '%' +); my $bug_count = scalar @$bugs; $bug_count || usage("No bugs were found in matching search criteria.\n"); @@ -104,59 +110,70 @@ print colored(['green'], "Processing $bug_count bug(s)\n"); $dbh->bz_start_transaction() if $doit; foreach my $bug (@$bugs) { - my $bug_id = $bug->{'bug_id'}; - my $status_whiteboard = $bug->{'status_whiteboard'}; + my $bug_id = $bug->{'bug_id'}; + my $status_whiteboard = $bug->{'status_whiteboard'}; - print "working on bug $bug_id\n"; + print "working on bug $bug_id\n"; - my $timestamp = $dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)'); + my $timestamp = $dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)'); - my $keyword_present = $dbh->selectrow_array(" - SELECT bug_id FROM keywords WHERE bug_id = ? AND keywordid = ?", - undef, $bug_id, $keyword_obj->id); + my $keyword_present = $dbh->selectrow_array(" + SELECT bug_id FROM keywords WHERE bug_id = ? AND keywordid = ?", undef, + $bug_id, $keyword_obj->id); - if (!$keyword_present) { - print " adding keyword\n"; - if ($doit) { - $dbh->do("INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)", - undef, $bug_id, $keyword_obj->id); - $dbh->do("INSERT INTO bugs_activity(bug_id, who, bug_when, fieldid, removed, added) " . - "VALUES (?, ?, ?, ?, '', ?)", - undef, $bug_id, $auto_user->id, $timestamp, $keyword_field->id, $keyword); - $dbh->do("UPDATE bugs SET delta_ts = ?, lastdiffed = ? WHERE bug_id = ?", - undef, $timestamp, $timestamp, $bug_id); - } + if (!$keyword_present) { + print " adding keyword\n"; + if ($doit) { + $dbh->do("INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)", + undef, $bug_id, $keyword_obj->id); + $dbh->do( + "INSERT INTO bugs_activity(bug_id, who, bug_when, fieldid, removed, added) " + . "VALUES (?, ?, ?, ?, '', ?)", + undef, $bug_id, $auto_user->id, $timestamp, $keyword_field->id, $keyword + ); + $dbh->do("UPDATE bugs SET delta_ts = ?, lastdiffed = ? WHERE bug_id = ?", + undef, $timestamp, $timestamp, $bug_id); } - - if ($remove_whiteboard) { - print " removing whiteboard\n"; - if ($doit) { - my $old_whiteboard = $status_whiteboard; - $status_whiteboard =~ s/\Q$whiteboard\E//ig; - $status_whiteboard = trim($status_whiteboard); - - $dbh->do("UPDATE bugs SET status_whiteboard = ? WHERE bug_id = ?", - undef, $status_whiteboard, $bug_id); - $dbh->do("INSERT INTO bugs_activity(bug_id, who, bug_when, fieldid, removed, added) " . - "VALUES (?, ?, ?, ?, ?, ?)", - undef, $bug_id, $auto_user->id, $timestamp, $whiteboard_field->id, $old_whiteboard, $status_whiteboard); - $dbh->do("UPDATE bugs SET delta_ts = ?, lastdiffed = ? WHERE bug_id = ?", - undef, $timestamp, $timestamp, $bug_id); - } + } + + if ($remove_whiteboard) { + print " removing whiteboard\n"; + if ($doit) { + my $old_whiteboard = $status_whiteboard; + $status_whiteboard =~ s/\Q$whiteboard\E//ig; + $status_whiteboard = trim($status_whiteboard); + + $dbh->do("UPDATE bugs SET status_whiteboard = ? WHERE bug_id = ?", + undef, $status_whiteboard, $bug_id); + $dbh->do( + "INSERT INTO bugs_activity(bug_id, who, bug_when, fieldid, removed, added) " + . "VALUES (?, ?, ?, ?, ?, ?)", + undef, + $bug_id, + $auto_user->id, + $timestamp, + $whiteboard_field->id, + $old_whiteboard, + $status_whiteboard + ); + $dbh->do("UPDATE bugs SET delta_ts = ?, lastdiffed = ? WHERE bug_id = ?", + undef, $timestamp, $timestamp, $bug_id); } + } } $dbh->bz_commit_transaction() if $doit; if ($doit) { - # It's complex to determine which items now need to be flushed from memcached. - # As this is expected to be a rare event, we just flush the entire cache. - Bugzilla->memcached->clear_all(); - print colored(['green'], "DATABASE WAS UPDATED\n"); + # It's complex to determine which items now need to be flushed from memcached. + # As this is expected to be a rare event, we just flush the entire cache. + Bugzilla->memcached->clear_all(); + + print colored(['green'], "DATABASE WAS UPDATED\n"); } else { - print colored(['red'], "DATABASE WAS NOT UPDATED\n"); + print colored(['red'], "DATABASE WAS NOT UPDATED\n"); } exit(0); |