office-gobmx/solenv/bin/cwsaddtask.pl

233 lines
6 KiB
Perl
Raw Normal View History

2004-06-25 18:23:20 -05:00
:
eval 'exec perl -wS $0 ${1+"$@"}'
if 0;
#*************************************************************************
#
# OpenOffice.org - a multi-platform office productivity suite
2004-06-25 18:23:20 -05:00
#
# $RCSfile: cwsaddtask.pl,v $
2004-06-25 18:23:20 -05:00
#
# $Revision: 1.5 $
2004-06-25 18:23:20 -05:00
#
# last change: $Author: rt $ $Date: 2005-09-07 22:06:07 $
2004-06-25 18:23:20 -05:00
#
# The Contents of this file are made available subject to
# the terms of GNU Lesser General Public License Version 2.1.
2004-06-25 18:23:20 -05:00
#
#
# GNU Lesser General Public License Version 2.1
# =============================================
# Copyright 2005 by Sun Microsystems, Inc.
# 901 San Antonio Road, Palo Alto, CA 94303, USA
2004-06-25 18:23:20 -05:00
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 2.1, as published by the Free Software Foundation.
2004-06-25 18:23:20 -05:00
#
# This library 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 for more details.
2004-06-25 18:23:20 -05:00
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
2004-06-25 18:23:20 -05:00
#
#*************************************************************************
#
# cwsaddtask.pl - add taskids (issues) to child workspaces
2004-06-25 18:23:20 -05:00
#
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);
2004-06-25 18:23:20 -05:00
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.5 $ ';
2004-06-25 18:23:20 -05:00
$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";
2004-06-25 18:23:20 -05:00
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] <taskID> ... \n";
print STDERR "Add one or more taskIDs to child workspace.\n";
print STDERR "Options:\n";
print STDERR " -h print this help\n";
}