#!/usr/bin/perl -wl use Getopt::Std; $dir = ''; getopts('av', \%opts); $| = 1; open(CVS, "cvs -n status @ARGV 2>&1 |") or die "cvs status failed: $!\n"; open(STDERR, ">&STDOUT") or die "Can't dup stdout"; while () { chomp; if (/cvs (?:status|server): Examining (.*)/) { $dir = "$1/"; } elsif (/^File:\s+(.*)\s+Status:\s+(.*)/) { ($file, $status) = ($1, $2); $file =~ s/no file //; next if ($status eq 'Up-to-date' && ! $opts{'a'}); printf "File: %-45s Status: $status\n", "$dir$file"; } elsif (/revision/ && $opts{'v'}) { next if ($status eq 'Up-to-date' && ! $opts{'a'}); print; } elsif (/^cvs status:/ || /password:/i) { print; } } close(CVS);