[Cologne-pm] cvs development in Perl

Michael Lamertz mike at lamertz.net
Wed Dec 10 05:45:35 CST 2003


On Wed, Dec 10, 2003 at 10:44:53AM +0100, Bernd Bornhausen wrote:
> Hallo..
> das mit dem system und so klingt zwar recht gut, und würde natürlcih
> auch finktionieren, aber ich denke mal, dass da jede Menge Zeit bei
> drauf geht, wenn ich für ca 10.000 Files jedes mal ein System commando
> ausführe..;)..und ein 'cvs status' über diese Files macht auch nicht
> wirklich Spass..

a. Du musst cvs ja nur einmal aufrufen, da das Ding ja rekursiv
   arbeitet.
b. Das Ausgabeformat von 'cvs status' ist doch prima lesbar.  Setz $/
   auf 'File:' oder '======.....', dann splitte den Kram nach Zeilen,
   dann zerleg die Zeilen in 'key word:' 'value' Paare und steck sie in
   ein Hash.  Scheint mir nur bedingt schwierig.

Angehaengtes Script ist die Caveman(tm)-Implementation und dient nur als
Beispiel.

> Also hab ich mir gedacht, wenn libCVS schon behauptet " It does this
> by providing libraries..:" , dann sollte ich das auch
> benutzen...alleine schon wegen der Geschwindigkeit...speed is almost
> everything *g*..
> Ausserdem wollen wir (also meine Firma und ich) dass Ding vielleicht
> mal nem Kunden vorstellen, und dann sollte das schon wahnsinnig
> proffesionell aussehen ;)))

Na dann musst Du das ganze schon unter Java2 Enterprise Beans bauen,
denn wie wir alle wissen, ist ja alles andere Bastelware... *grummel*

(Klinge ich bitter?  Nein, das gestrige Meeting hier in der Firma hat
mir *nicht* die Laune fuer den Rest der Woche verdorben... ehrlich...
*fingerhinterrueckenkreuz*)

-- 
	    Well, then let's give that Java-Wussie a beating... (me)

Michael Lamertz                        |     +49 2234 204947 / +49 171 6900 310
Sandstr. 122                           |                       mike at lamertz.net
50226 Frechen                          |                 http://www.lamertz.net
Germany                                |               http://www.perl-ronin.de 
-------------- next part --------------
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
$|++;

$/ = "===================================================================\n";

our %cvs;

while (my $rec = <>) {
    chomp $rec;
    my @lines = split /\n/, $rec;

    my $id = shift @lines;

    my ($file, $status) = $id =~ /File:\s*(.*?)\s*Status:\s*(.*)$/
	or do {
	    warn "Can't identify record: >>$id<<\n";
	    next;
	};

    $cvs{$file}{status} = $status;

    foreach (@lines) {
	next if /^\s*$/;
	my ($key, $value) = /^\s*([^:]+):\s*(.*)$/
	    or do {
		warn "Cannot make sense of >>$_<<\n";
		next;
	    };

	$cvs{$file}{$key} = $value;
    }
}

print Dumper(\%cvs);


More information about the Cologne-pm mailing list