#!/usr/bin/perl -w
#$Id: c4_job_edit 709 2005-05-03 21:32:07Z wsnyder $
######################################################################
#
# Copyright 2002-2005 by Wilson Snyder. This program is free software;
# you can redistribute it and/or modify it under the terms of either the GNU
# General Public License or the Perl Artistic License.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the Perl Artistic License
# along with this module; see the file COPYING. If not, see
# www.cpan.org
#
######################################################################
require 5.006_001;
use lib "blib/lib";
use lib "blib/arch";
use Getopt::Long;
use IO::File;
use Pod::Usage;
use strict;
use vars qw ($Debug);
#======================================================================
# main
$Debug = 0;
our @Opt_Params = ();
our $Opt_Filename;
Getopt::Long::config ("pass_through", "no_auto_abbrev");
if (! GetOptions (
"help" => \&usage,
"debug" => \&debug,
"<>" => \¶meter,
)) {
usage();
}
if (!defined $Opt_Filename) {
warn "%Error: $0: Can't determine filename to edit\n";
usage();
}
edit_comment_jobs($Opt_Filename);
exec @Opt_Params;
die "%Error: $0: ".join(' ',@Opt_Params);
#----------------------------------------------------------------------
sub usage {
print '$Id: c4_job_edit 709 2005-05-03 21:32:07Z wsnyder $ ', "\n";
pod2usage(-verbose=>2, -exitval => 2);
exit (1);
}
sub debug {
$Debug = 1;
}
sub parameter {
my $param = shift;
push @Opt_Params, $param;
if ($param !~ /^-/) {
$Opt_Filename = $param;
}
}
#######################################################################
#######################################################################
#######################################################################
sub edit_comment_jobs {
my $filename = shift;
print "edit_comment_jobs $filename\n" if $Debug;
# Read the template
my $ifh = IO::File->new($filename) or die "%Error: $! $filename,";
my $wholefile = join('',$ifh->getlines);
$ifh->close();
# Edits
my $out = "";
my $jobs;
my $change_spec;
foreach my $line (split /\n/, $wholefile) {
$line =~ s/\b(Host:\t)\S+/$1/mg;
if ($line =~ /A Perforce Change Spec/i) {
$change_spec = 1;
} elsif ($change_spec && $line =~ /^Jobs:/) {
$jobs=1;
}
elsif ($jobs) {
if ($line !~ /^\t/i) {
$jobs=0;
} elsif ($line !~ /^\#/i) {
$out .= "#";
}
}
$out .= "$line\n";
}
# Write it back
if ($out ne $wholefile) {
my $fh = IO::File->new($filename,"w") or die "%Error: $! $filename,";
print $fh $out;
$fh->close();
}
}
#######################################################################
__END__
=pod
=head1 NAME
c4_job_edit - Pass command line on to editor after commenting out Jobs
=head1 SYNOPSIS
c4_job_edit [editor_arguments]
=head1 DESCRIPTION
C4_job_edit edits the final non switch argument on the command line
to comment out all Job: lines. It then passes all remaining arguments
to the default editor program.
This prevents false closing of jobs by requiring the user to opt-in to
closing bugs, rather then the default opt-out policy.
To use this program, simply set the P4EDITOR environment variable in your
default startup script.
setenv EDITOR="emacs"
setenv P4EDITOR="c4_job_edit $EDITOR"
=head1 ARGUMENTS
=over 4
=item --help
Displays this message and program version and exits.
=back
=head1 DISTRIBUTION
The latest version is available from CPAN and from L.
Copyright 2002-2005 by Wilson Snyder. This package is free software; you
can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License or the Perl Artistic License.
=head1 AUTHORS
Wilson Snyder
=head1 SEE ALSO
L, L, L
=cut
######################################################################
### Local Variables:
### compile-command: "./c4_job_edit c4_job_edit"
### End: