SkÃ¥ne Sjælland Linux User Group - http://www.sslug.dk Forside   Tilmelding   Postarkiv   Forum   Kalender   Søg
MhonArc Dato: [Date Prev] [Kronologisk oversigt] [Date Next]   TrÃ¥d: [Date Prev] [Oversigt trÃ¥de] [Date Next]   MhonArc
 

Re: [PERL] Forslag/Ønske cvs utility



On Tue, 25 Jul 2000, Peter Toft wrote:

> Jeg har diskuteret lidt med Ulrik Dichow (som ikke har
> tiden) om et nyt CVS værktøj jeg savner meget.
>
> [ ændrede CVS-filer ]

Sånoed ala nedenstående?

Er selve directories også i CVS? Jeg er gået ud fra at det er de ikke: At
vi kun kikker på filerne i subdirs. Hvis jeg tager fejl er det en minimal
ændring:

31c31
<       -d $dir_filename and do { push @subdirs, $dir_filename; next; };
---
>       -d $dir_filename and do { push @subdirs, $dir_filename; };
53c53
<     @{$files{New}} = grep { not -d $_ } @currentdir;
---
>     @{$files{New}} = @currentdir;


/Ole


#!/usr/bin/perl

# Usage:
# cvs-alter dir
#
# 2000-07-25  Ole Tange <sslug@sslug>

use Time::Local;
use strict;

my $startdir = shift || die("Usage:\n$0 dir\n");

cvs_changed_in_dir($startdir);

sub cvs_changed_in_dir($) {
    my $dir = shift;
    my ($line,
	$foo,$filename,$version,$date,$foo,$mtime,$date,
	$dir_filename,$cvstime,%files,%seen,%skip,@subdirs,
	@currentdir,$i);
    my %mon;
    @mon{qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)}=
	0..11; # Perl months are 0 .. 11

    open(ENTRIES,"$dir/CVS/Entries") || 
	die("Cannot open $dir/CVS/Entries");
    while($line=<ENTRIES>) {
	($foo,$filename,$version,$date,$foo) = split(m:/:, $line);
	$dir_filename=$dir."/".$filename;
	-d $dir_filename and do { push @subdirs, $dir_filename; next; };

	$mtime= (stat $dir_filename)[9]; # modification time of $filename

	$date=~/... (...) (\d+) (\d+):(\d+):(\d+) (\d{4})/ || 
	    die("$date not in ctime(3) format");
	$cvstime=timegm($5,$4,$3,$2,$mon{$1},$6);
	if($cvstime != $mtime) {
	    push @{$files{Changed}}, $dir_filename;
	} else {
	    push @{$files{Unchanged}}, $dir_filename;
	}
	$seen{$dir_filename}=1;
    }
    close ENTRIES;
    
    opendir(D,$dir) || die("Cannot open $dir");
    @skip{qw(. .. CVS)}=1..3; # Filenames that that we want to skip
    @currentdir= map { $dir."/".$_ }
    grep { not $skip{$_} and not $seen{$_} } readdir(D);
    closedir(D);

    @{$files{New}} = grep { not -d $_ } @currentdir;
    push @subdirs, grep { -d $_ } @currentdir;

    print ("Changed files\n",
	   "-------------\n",
	   map { "$_\n" } sort @{$files{Changed}});
    print "\n";
    
    print ("New files\n",
	   "---------\n",
	   map { "$_\n" } sort @{$files{New}});
    print "\n";
    
    print ("Unchanged files\n",
	   "---------------\n",
	   map { "$_\n" } sort @{$files{Unchanged}});
    print "\n";

    for $i (@subdirs) {	cvs_changed_in_dir($i); } # Recurse if any subdirs
}





 
Forside   Tilmelding   Postarkiv   Oversigt   Kalender   Søg

 
 
Henvendelse vedrørende websiderne til <www_admin>. Senest ændret 2005-08-10, klokken 19:52
Denne side vedligeholdes af MHonArc .