--- /dev/null
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+=pod
+
+=head1 NAME updateWatchLists.pl
+
+Copy CC lists from Bugzilla -> JIRA
+
+=head1 VERSION
+
+=over
+
+=item Author
+
+Andrew DeFaria <Andrew@ClearSCM.com>
+
+=item Revision
+
+$Revision: #1 $
+
+=item Created
+
+Thu Mar 20 10:11:53 PDT 2014
+
+=item Modified
+
+$Date: 2014/05/23 $
+
+=back
+
+=head1 SYNOPSIS
+
+ Updates JIRA watchlists by copying the CC list information from Bugzilla
+
+ $ updateWatchLists.pl [-login <login email>] [-products product1,
+ product2,...] [-[no]exec]
+ [-verbose] [-help] [-usage]
+
+ Where:
+
+ -v|erbose: Display progress output
+ -he|lp: Display full help
+ -usa|ge: Display usage
+ -[no]e|xec: Whether or not to update JIRA. -noexec says only
+ tell me what you would have updated.
+ -use|rname: Username to log into JIRA with (Default: jira-admin)
+ -p|assword: Password to log into JIRA with (Default: jira-admin's
+ password)
+ -bugzillaserver: Machine where Bugzilla lives (Default: bugs-dev)
+ -jiraserver: Machine where Jira lives (Default: jira-dev)
+ -bugi|ds: Comma separated list of BugIDs to process
+ -f|ile: File of BugIDs, one per line
+
+=head1 DESCRIPTION
+
+This script updates JIRA watchlists by copying the CC List information from
+Bugzilla to JIRA.
+
+=cut
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+$| = 1;
+
+use DBI;
+use Display;
+use Logger;
+use TimeUtils;
+use Utils;
+use JIRAUtils;
+use BugzillaUtils;
+use JIRA::REST;
+
+use Getopt::Long;
+use Pod::Usage;
+
+# Login should be the email address of the bugzilla account which has
+# priviledges to create products and components
+our %opts = (
+ exec => 0,
+ bugzillaserver => $ENV{BUGZILLASERVER} || 'bugs-dev',
+ jiraserver => $ENV{JIRASERVER} || 'jira-dev:8081',
+ username => 'jira-admin',
+ password => 'jira-admin',
+ usage => sub { pod2usage },
+ help => sub { pod2usage (-verbose => 2)},
+ verbose => sub { set_verbose },
+);
+
+our ($log, %total);
+
+my ($bugzilla, $jira);
+
+sub main () {
+ my $startTime = time;
+
+ GetOptions (
+ \%opts,
+ 'verbose',
+ 'usage',
+ 'help',
+ 'exec!',
+ 'quiet',
+ 'username=s',
+ 'password=s',
+ 'bugids=s@',
+ 'file=s',
+ 'jiraserver=s',
+ 'bugzillaserver=s',
+ ) or pod2usage;
+
+ $log = Logger->new;
+
+ if ($opts{file}) {
+ open my $file, '<', $opts{file}
+ or die "Unable to open $opts{file} - $!";
+
+ $opts{bugids} = [<$file>];
+
+ chomp @{$opts{bugids}};
+ } else {
+ my @bugids;
+
+ push @bugids, (split /,/, join (',', $_)) for (@{$opts{bugids}});
+
+ $opts{bugids} = [@bugids];
+ } # if
+
+ pod2usage 'Must specify -bugids <bugid>[,<bugid>,...] or -file <filename>'
+ unless $opts{bugids};
+
+ openBugzilla $opts{bugzillaserver}
+ or $log->err ("Unable to connect to $opts{bugzillaserver}", 1);
+
+ Connect2JIRA ($opts{username}, $opts{password}, $opts{jiraserver})
+ or $log->err ("Unable to connect to $opts{jiraserver}", 1);
+
+ for (@{$opts{bugids}}) {
+ my $issue = findIssue $_;
+
+ if ($issue =~ /^Future JIRA Issue/ or $issue =~ /^Unable to find/) {
+ $log->msg ($issue);
+ } else {
+ my %watchers = getWatchers $_;
+
+ $log->msg ('Found ' . scalar (keys %watchers) . " watchers for JIRA Issue $issue");
+
+ my $result = updateIssueWatchers ($issue, %watchers);
+
+ if ($result =~ /^Unable to/) {
+ $total{'Missing JIRA Issues'}++;
+
+ $log->err ($result);
+ } else {
+ $total{'Issues updated'}++;
+ } # if
+ } # if
+ } # for
+
+ display_duration $startTime, $log;
+
+ Stats (\%total, $log) unless $opts{quiet};
+
+ return 0;
+} # main
+
+exit main;