cvstime.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:29 2010 from cvstime.pl 2009/01/18 4.6 KB.

#!/perl -w
# NAME: cvstime.pl
# AIM: To examine an input directory, seeking CVS folders and files,
# and reporting when the last update was done.
# 15/08/2007 - geoff mclane - geoffair.net/mperl
# SEE cvsversion.pl for the latest, and greatest ;=))
use strict;
use warnings;
use File::stat; # to get the file date
use File::Basename;
### prt( "$0 ... Hello, World ...\n" );
my $in_folder = 'C:/FGCVS/xmlrpc-c';
###my $in_folder = 'C:/FGCVS/Tidy';
my @fnd_files = ();
my @fnd_cvs = ();
my %cvs_names = ();
my ($fcnt, $ccnt, $msg);
my $mxlen = 0;
my $mxsiz = 0;
my $szlen = 0;
my $latest = 0;
my $largest = 0;
# debug
my $dbg1 = 0;   # show processing folders ...
my $dbg2 = 0;   # show CVS/SVN file entries
my $dbg3 = 0;   # show CVS/SVN file types
parse_args(@ARGV);
prt( "Processing $in_folder ...\n" );
process_dir( $in_folder );
$fcnt = scalar @fnd_files;
$ccnt = scalar @fnd_cvs;
prt( "Found $fcnt files, $ccnt in CVS/SVN folders ...\n" );
for (my $i = 0; $i < $ccnt; $i++) {
   my $ff = $fnd_cvs[$i][0];
   my $sz = $fnd_cvs[$i][2];
   my $sf = substr($ff, (length($in_folder) + 1));
   my $len = length($sf);
   if ($len > $mxlen) {
      $mxlen = $len;
   }
   if ($sz > $mxsiz) {
      $mxsiz = $sz;
   }
}
$msg = get_nn($mxsiz);
$szlen = length($msg) + 1;
for (my $i = 0; $i < $ccnt; $i++) {
   my $ff = $fnd_cvs[$i][0];
   my $tm = $fnd_cvs[$i][1];
   my $sz = $fnd_cvs[$i][2];
   my $sf = substr($ff, (length($in_folder) + 1));
   ###my ($nm, $dir, $ext) = fileparse( $sf, qr/\.[^.]*/ );
   my ($nm, $dir) = fileparse( $sf );
   if (defined $cvs_names{$nm}) {
      $cvs_names{$nm}++;
   } else {
      $cvs_names{$nm} = 1;
   }
   if ($sz > $largest) {
      $largest = $sz;
   }
   my $nsz = get_nn($sz);
   while(length($nsz) < $szlen) {
      $nsz = ' ' . $nsz;
   }
   $msg = $sf;
   while(length($msg) < $mxlen) {
      $msg .= ' ';
   }
   if ($tm > $latest) {
      $latest = $tm;
   }
   prt( "$msg ". localtime($tm). " $nsz\n" ) if ($dbg2);
}
foreach my $key (keys %cvs_names) {
   my $val = $cvs_names{$key};
   prt( "$key $val\n" ) if ($dbg3);
}
my $nsz = get_nn($largest);
while(length($nsz) < $szlen) {
   $nsz = ' ' . $nsz;
}
$msg = "Latest (largest)";
##while(length($msg) < $mxlen) {
##   $msg .= ' ';
##}
prt( "$msg ". localtime($latest). " $nsz\n" );
exit(0);
##########################
##### subs
sub prt {
   my ($m) = shift;
   print $m;
}
sub mydie {
   my ($m) = shift;
   die $m;
}
sub process_dir {
   my ($inf) = shift;
   prt( "Processing $inf folder ...\n" ) if ($dbg1);
   if ( opendir( DIR, $inf ) ) {
      my @files = readdir(DIR);
      closedir DIR;
      foreach my $fl (@files) {
         if (($fl eq '.') || ($fl eq '..')) {
            next;
         }
         my $ff = $inf . "/" . $fl;
         if (-d $ff) {
            process_dir( $ff );
         } else {
            my $sb = stat($ff);
            if (($ff =~ /\/CVS\//i)||($ff =~ /\/\.svn\//i)) {
               push(@fnd_cvs, [$ff, $sb->mtime, $sb->size ] );
            } else {
               push(@fnd_files, [$ff, $sb->mtime, $sb->size ] );
            }
         }
      }
   } else {
      prt( "WARNING: Can NOT open $inf ... $! ...\n" );
   }
}
sub give_help {
   prt( "$0 [OPTIONS] in_folder\n" );
   prt( "OPTIONS:\n" );
   prt( " -? or -h - This brief help.\n" );
   prt( " -d1      - show processing folders.\n" );
   prt( " -d2      - show CVS/SVN file entries.\n" );
   prt( " -d3      - show CVS/SVN file types.\n" );
   mydie("In folder must exist ...\n");
}
sub parse_args { # @ARGV
   my (@av) = @_;
   while (@av) {
      my $arg = $av[0];
      if (substr($arg,0,1) eq '-') {
         if (($arg eq '-?')||($arg eq '-h')) {
            give_help();
         } elsif ($arg eq '-d1') {
            $dbg1 = 1;
            prt( "Show folder processing ...\n" );
         } elsif ($arg eq '-d2') {
            $dbg2 = 1;
            prt( "Show CVS/SVN file entries ...\n" );
         } elsif ($arg eq '-d3') {
            $dbg3 = 1;
            prt( "Show CVS/SVN file types ...\n" );
         } else {
            mydie( "ERROR: Unknown option [$arg] ... aborting ...\n" );
         }
      } else {
         # bare item - assume INPUT folder
         $in_folder = dos_2_unix($arg);
         prt( "Set in folder to $in_folder ...\n" );
      }
      shift @av;
   }
}
sub dos_2_unix($) {
   my ($du) = shift;
   $du =~ s/\\/\//g;
   return $du;
}
##################################################
# My particular 'nice number'
sub get_nn { # perl nice number nicenum add commas
   my ($n) = shift;
   if (length($n) > 3) {
      my $mod = length($n) % 3;
      my $ret = (($mod > 0) ? substr( $n, 0, $mod ) : '');
      my $mx = int( length($n) / 3 );
      for (my $i = 0; $i < $mx; $i++ ) {
         if (($mod == 0) && ($i == 0)) {
            $ret .= substr( $n, ($mod+(3*$i)), ($mod+(3*$i)+3) );
         } else {
            $ret .= ',' . substr( $n, ($mod+(3*$i)), ($mod+(3*$i)+3) );
         }
      }
      return $ret;
   }
   return $n;
}
# eof - cvstime.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional