#!/usr/bin/perl use Cwd; use Data::Dumper; sub crawl { my ($p) = @_; opendir(my $d, $p) or return; my @items = grep(!/^\.\.?$/, readdir($d)); closedir $d; foreach my $sf (grep(/\.changes$/, @items)) { open(my $f, $p.'/'.$sf) or next; while(my $l = <$f>) { next unless($l =~ /^\s*([0-9]+)\s+([^\s]+)\s+([a-z]{1,3})\s+([^\s]+)\s+([^\s]+)/i); my $tstp = $1; my $ip = $2; my $op = $3; my $fid = $4; my $user = $5; if($op =~ /(C|cc|sc)/i) { $op = 'A'; }elsif($op =~ /(D|dc|hc)/i) { $op = 'D'; }else{ $op = 'M'; } $fid =~ s/:/\//g; $col{$fid} = color() unless($col{$fid}); push(@log, join('|', $tstp, $user, $op, $fid, $col{$fid})); } close $f; } foreach my $sd (grep(-d $p.'/'.$_, @items)) { crawl($p.'/'.$sd); } } sub color { my ($p) = @_; return sprintf('%02X%02X%02X', int(rand(256)), int(rand(256)), int(rand(256))); } my $path = getcwd(); $path .= '/data' if(-d $path.'/data' && $path !=~ /^(|\/)data(|\/)$/); $path .= '/meta' if(-d $path.'/meta' && $path !=~ /^(|\/)meta(|\/)$/); our @log = (); our %col = {}; crawl($path); print join("\n", sort @log); 0;