#!/usr/bin/perl -w # $Id$ # # bugzilla - a command line tool to add bugs to a bugzilla installation # # Copyright (C) 2004 Brian Caswell # use strict; use warnings; use WWW::Bugzilla; use Term::ReadPassword; use Getopt::Long; my %config = ( server => 'landfill.bugzilla.org/bugzilla-2.16.5/', username => 'krang_test@yahoo.com', password => 'shredder', ); GetOptions(\%config, 'username=s','server=s','password=s', 'help', 'product=s'); pod2usage(1) if ($config{'help'}); if (!defined($config{'password'})) { while (1) { $config{'password'}= read_password("Enter password: "); } redo if (!length($config{'password'})); } my $bug = WWW::Bugzilla->new( server => $config{'server'}, email => $config{'username'}, password => $config{'password'}, product => $config{'product'}, ); $bug->product(ask_from_list("product", $bug->available('product'))) if !$config{'product'}; $bug->component(ask_from_list("component", $bug->available('component'))); $bug->version(ask_from_list("version", $bug->available('version'))); $bug->os(ask_from_list("os", $bug->available('os'))); $bug->platform(ask_from_list("platform", $bug->available('platform'))); $bug->summary(ask("summary")); $bug->assigned_to(ask("assigned_to", 1)); $bug->description(ask_long("description")); print $bug->commit; sub ask_from_list { my ($question, @answers) = @_; my $size = scalar(@answers); while (1) { print "$question?\n"; for (my $i = 0 ; $i < $size ; $i++) { print "$i : $answers[$i]\n"; } my $result = ; chomp($result); return ($answers[$result]) if ($result >= 0 && $size >= $result); } } sub ask { my ($question, $accept_blank) = @_; while (1) { print $question . "\n"; my $result = ; chomp($result); return $result if (length($result) || $accept_blank); } } sub ask_long { my ($question) = @_; while (1) { print $question . "\n"; print "(when you are finished typing your answer, type '.'\n"; my $text; while (1) { my $line = ; chomp($line); if ($line =~ /^\.$/) { if (length($text)) { return ($text); } else { last; } } $text .= $line; } } }