: eval 'exec perl -wS $0 ${1+"$@"}' if 0; #************************************************************************* # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # Copyright 2008 by Sun Microsystems, Inc. # # OpenOffice.org - a multi-platform office productivity suite # # $RCSfile: cwsaddtask.pl,v $ # # $Revision: 1.6 $ # # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License version 3 # only, as published by the Free Software Foundation. # # OpenOffice.org is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License version 3 for more details # (a copy is included in the LICENSE file that accompanied this code). # # You should have received a copy of the GNU Lesser General Public License # version 3 along with OpenOffice.org. If not, see # # for a copy of the LGPLv3 License. # #************************************************************************* # # cwsaddtask.pl - add taskids (issues) to child workspaces # use strict; use Getopt::Long; #### module lookup my @lib_dirs; BEGIN { if ( !defined($ENV{SOLARENV}) ) { die "No environment found (environment variable SOLARENV is undefined)"; } push(@lib_dirs, "$ENV{SOLARENV}/bin/modules"); push(@lib_dirs, "$ENV{COMMON_ENV_TOOLS}/modules") if defined($ENV{COMMON_ENV_TOOLS}); } use lib (@lib_dirs); use Cws; use CvsModule; use CwsConfig; #### script id ##### ( my $script_name = $0 ) =~ s/^.*\b(\w+)\.pl$/$1/; my $script_rev; my $id_str = ' $Revision: 1.6 $ '; $id_str =~ /Revision:\s+(\S+)\s+\$/ ? ($script_rev = $1) : ($script_rev = "-"); print "$script_name -- version: $script_rev\n"; #### global ##### my $is_debug = 0; # CWS states for which adding tasks are blocked. my @states_blocked_for_adding = ( "integrated", "nominated", "approved by QA" ); #### main ##### my ($cws, $vcsid) = get_and_verify_cws(); my @taskids = parse_options(); register_taskids($cws, $vcsid, @taskids); exit(0); #### subroutines #### # Get current child workspace from environment. sub get_and_verify_cws { my $childws = $ENV{CWS_WORK_STAMP}; my $masterws = $ENV{WORK_STAMP}; my $config = CwsConfig->get_config(); my $vcsid = $config->vcsid(); if ( !defined($vcsid) ) { print_error("VCSID environment variable not set", 1); } if ( !defined($childws) || !defined($masterws) ) { print_error("Can't determine child workspace environment.\n" . "Please initialize environment with setsolar ...", 1); } my $cws = Cws->new(); $cws->child($childws); $cws->master($masterws); # Check if we got a valid child workspace. my $id = $cws->eis_id(); print "Master: $masterws, Child: $childws, $id\n" if $is_debug; if ( !$id ) { print_error("Child workspace $childws for master workspace $masterws not found in EIS database.", 2); } return ($cws, $vcsid); } # Parse options and do some sanity checks; sub parse_options { my $help; my $success = GetOptions('h' => \$help); if ( !$success || $help || $#ARGV < 0 ) { usage(); exit(1); } return @ARGV; } # Register taskids with EIS database; # checks taksids for sanity, will notify user # if taskid is already registered. sub register_taskids { my $cws = shift; my $vcsid = shift; my @taskids = @_; my $child = $cws->child(); my $status = $cws->get_approval(); if ( !defined($status) ) { print_error("Can't determine status of child workspace `$child`.", 4); } if ( grep($status eq $_, @states_blocked_for_adding) ) { print_error("Can't add tasks to child workspace '$child' with state '$status'.", 5); } my @registered_taskids = $cws->taskids(); # Create hash for easier searching. my %registered_taskids_hash = (); for (@registered_taskids) { $registered_taskids_hash{$_}++; } my @new_taskids = (); foreach (@taskids) { if ( $_ !~ /^([ib]?\d+)$/ ) { print_error("'$_' is an invalid task ID.", 3); } if ( exists $registered_taskids_hash{$1} ) { print_warning("Task ID '$_' already registered, skipping."); next; } push(@new_taskids, $_); } my $added_taskids_ref = $cws->add_taskids($vcsid, @new_taskids); if ( !$added_taskids_ref ) { my $taskids_str = join(" ", @new_taskids); print_error("Couldn't register taskID(s) '$taskids_str' with child workspace '$child'.", 4); } my @added_taskids = @{$added_taskids_ref}; if ( @added_taskids ) { my $taskids_str = join(" ", @added_taskids); print_message("Registered taskID(s) '$taskids_str' with child workspace '$child'."); } return; } sub print_message { my $message = shift; print "$script_name: "; print "$message\n"; return; } sub print_warning { my $message = shift; print STDERR "$script_name: "; print STDERR "WARNING: $message\n"; return; } sub print_error { my $message = shift; my $error_code = shift; print STDERR "$script_name: "; print STDERR "ERROR: $message\n"; if ( $error_code ) { print STDERR "\nFAILURE: $script_name aborted.\n"; exit($error_code); } return; } sub usage { print STDERR "Usage: cwsaddtask [-h] ... \n"; print STDERR "Add one or more taskIDs to child workspace.\n"; print STDERR "Options:\n"; print STDERR " -h print this help\n"; }