- #!perl -w
-
- # Copyright (C) 1997 Capella Computers Ltd.
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 2
- # of the License, or (at your option) any later version.
- #
- # 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 GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- # :FILE:
- # List all jobs (with optional filtering by status or user).
-
- use strict;
- use English;
- use P4;
-
- # Mask of status and users to print.
- my %status_mask;
- my %user_mask;
-
- # Set mask for status.
- sub set_status {
- my $status = shift; # Status to set ('Status' for all).
- my $to = shift; # What to set it to.
-
- if ($status =~ /^n|new/i) {
- $status_mask{new} = $to;
- } elsif ($status =~ /^w|work/i) {
- $status_mask{work} = $to;
- } elsif ($status =~ /^r|review/i) {
- $status_mask{review} = $to;
- } elsif ($status =~ /^i|integ/i) {
- $status_mask{integ} = $to;
- } elsif ($status =~ /^f|fail/i) {
- $status_mask{fail} = $to;
- } elsif ($status =~ /^p|pass/i) {
- $status_mask{pass} = $to;
- } elsif ($status =~ /^c|clear/i) {
- $status_mask{clear} = $to;
- } elsif ($status =~ /^d|done/i) {
- $status_mask{done} = $to;
- } elsif ($status eq '_') {
- $status_mask{'_new'} = $to;
- $status_mask{'_work'} = $to;
- $status_mask{'_review'} = $to;
- $status_mask{'_integ'} = $to;
- $status_mask{'_fail'} = $to;
- $status_mask{'_pass'} = $to;
- $status_mask{'_clear'} = $to;
- $status_mask{'_done'} = $to;
- } elsif ($status =~ /^s|status/i) {
- $status_mask{new} = $to;
- $status_mask{work} = $to;
- $status_mask{review} = $to;
- $status_mask{integ} = $to;
- $status_mask{fail} = $to;
- $status_mask{pass} = $to;
- $status_mask{clear} = $to;
- $status_mask{done} = $to;
- $status_mask{'_new'} = $to;
- $status_mask{'_work'} = $to;
- $status_mask{'_review'} = $to;
- $status_mask{'_integ'} = $to;
- $status_mask{'_fail'} = $to;
- $status_mask{'_pass'} = $to;
- $status_mask{'_clear'} = $to;
- $status_mask{'_done'} = $to;
- } else {
- P4::crash("Specified status should be one of: Status (all), ",
- "_ (All), New, Work, Review, Fail, Pass, Integ, Clear or Done.");
- }
-
- # Be nice.
- return 1;
- }
-
- # Set mask for a user.
- sub set_user {
- my $user = shift; # User to set it to ('User' for all).
- my $to = shift; # What to set it to.
-
- if ($user =~ /u|user/i) {
- %user_mask = ( 'default' => $to );
- } elsif ($user =~ /m|me/i) {
- $user_mask{P4::current_user()} = $to;
- } else {
- $user_mask{$user} = $to;
- }
-
- # Be nice.
- return 1;
- }
-
- # By default, print all.
- set_status('Status', 1);
- set_user('User', 1);
-
- # These are used to reverse the default if first option is with a '+'.
- my $first_status = 1;
- my $first_user = 1;
-
- # Command line argument specify which status jobs to print.
- my $opt;
- while ($opt = shift(@ARGV)) {
-
- # +u turns on a specific user.
- if ($opt eq '+u' || $opt eq '+U') {
-
- # If the first user-related command is +u,
- # no user will be printed by default.
- if ($first_user) {
- set_user('User', 0);
- $first_user = 0;
- }
-
- $opt = shift(@ARGV);
- defined($opt)
- || P4::crash("+u flag requires an argument.");
- set_user($opt, 1);
-
- # -u turns off a specific user.
- } elsif ($opt eq '-u' || $opt eq '-U') {
- $opt = shift(@ARGV);
- defined($opt)
- || P4::crash("+u flag requires an argument.");
- set_user($opt, 0);
-
- # -X turns off a specific status.
- } elsif ($opt =~ /^-(.*)/) {
- set_status($1, 0);
-
- # +X turns on a specific status.
- } elsif($opt =~ /^\+(.*)/) {
-
- # If the first status related command -s +X,
- # no status will be printed by default.
- if ($first_status) {
- set_status('Status', 0);
- $first_user = 0;
- }
-
- set_status($1, 1);
-
- } else {
- # Whoever can understand this usage probably doesn't need it :-)
- P4::crash("Usage: p4jl ",
- "[{ {+/-}{Status|New|Work|Review|Fail|Pass|Integ|Clear} | ",
- "{+/-}u {User|Me|<user-name>} } ...]");
- }
- }
-
- # No need to lock since this is a harmless read-only operation.
-
- # Obtain full list of jobs.
- my %jobs = P4::jobs();
-
- # Print column titles.
- print "Job\tCreated Re\tUser\tReview\tStatus\tTitle\n";
- print "---\t---------- --\t----\t------\t------\t-----\n";
-
- # Print all jobs, sorted by reversed ID (more recent first).
- my $job;
- foreach $job (reverse(sort(keys(%jobs)))) {
-
- # Parse record.
- my $record = $jobs{$job};
- my $user = $record->{user};
- my $created = $record->{created};
- my $status = $record->{status};
- my $retry = $record->{retry};
- my $reviewer = $record->{reviewer};
- my $version = $record->{version};
- my $title = $record->{title};
-
- # Filter out undesired jobs.
- next if !$status_mask{$status};
- if (defined($user_mask{$user})) {
- next if !$user_mask{$user};
- } else {
- next if !$user_mask{default};
- }
-
- # This saves a column.
- if ($status eq 'done') {
- $status = $version;
- }
-
- # Print it nicely.
- print $job, "\t";
- print $created, ' ';
- print $retry, "\t";
- print $user, "\t";
- print $reviewer, "\t";
- print $status, "\t";
- print $title, "\n";
- }
-
- # Be nice.
- 1;
# |
Change |
User |
Description |
Committed |
|
#1
|
8451 |
michael |
Move old aegis app into correct archived directory. |
11 years ago
|
|
//public/perforce/archive/utils/aegis/p4jl |
#1
|
8256 |
michael |
Archiving aegis project |
12 years ago
|
|
//guest/perforce_software/utils/aegis/p4jl |
#1
|
17 |
Perforce maintenance |
Added p4-Aegis wrappers, version 0.1 |
26 years ago
|
|