Alt-App-makepatch
view release on metacpan or search on metacpan
script/makepatch view on Meta::CPAN
split(/\n/, $pat);
}
sub cvs_excludes($$$) {
my ($f, $dir, $disp) = @_;
my @list = cvs_ignore($f);
return "" unless @list;
for ( $dir, $disp ) {
$_ = "" unless defined $_;
$_ .= '/' if $_ && $_ !~ /\/$/;
$_ = '\A' . quotemeta($_);
}
my $ret = "";
foreach my $pat ( @list ) {
my $re = shellpat($pat);
debug ("$f: '$pat' -> '$re'\n");
eval { '' =~ /$re/ };
if ( $@ ) {
$@ =~ s/ at .* line.*$//;
warn("$f: invalid pattern '$pat'");
next;
}
push(@opt_exclude_regex, $dir.$re.'\Z');
$ret .= "($re)|";
}
if ( $ret ) {
chop($ret);
$ret = '('.$disp.'('.$ret.')\Z)';
}
debug ("Exclude pattern ($f): $ret\n");
$ret;
}
sub make_filelist ($;$) {
my ($dir, $disp) = @_;
# Return a list of files, sorted, for this directory.
# Recurses if $opt_recurse.
my $dh = new IO::File;
trace ("+ recurse $dir\n");
opendir ($dh, $dir) || die ("$dir: $!\n");
my @tmp = readdir ($dh);
closedir ($dh);
debug ("Dir $dir: ", scalar(@tmp), " entries\n");
my @ret = ();
my $file;
my $excl = $exclude_pat;
for ( catfile($dir, ".cvsignore") ) {
$excl = '('.$excl.'|'.cvs_excludes($_,$dir,$disp).')' if -s $_;
debug("Exclude pattern: $excl\n");
}
foreach $file ( @tmp ) {
# Skip unwanted files.
next if $file =~ /^\.\.?$/; # dot and dotdot
next if $file =~ /~$/; # editor backup files
my $realname = catfile ($dir, $file);
my $display_name = defined $disp ? catfile($disp,$file) : $file;
# Skip exclusions.
if ( defined $excl && $display_name =~ /$excl/mso ) {
verbose ("Excluding $display_name\n");
$excluded++;
next;
}
# Push on the list.
if ( -d $realname && ( $opt_follow || ! -l $realname ) ) {
next unless $opt_recurse;
# Recurse.
push (@ret, make_filelist ($realname, $display_name));
}
elsif ( -f _ ) {
debug("+ file $display_name\n");
push (@ret, $display_name);
}
else {
verbose ("WARNING: Not a file: $realname -- skipped\n");
$skipped++;
}
}
@ret = sort @ret if $opt_sort;
@ret;
}
sub make_filelist_from_manifest ($) {
# Return a list of files, optionally sorted, from a manifest file.
my ($man) = @_;
my $fh = new IO::File;
my @ret = ();
local ($_);
$fh->open($man) || die ("$man: $!\n");
binmode($fh);
while ( <$fh> ) {
if ( $. == 2 && /^[-=_\s]*$/ ) {
@ret = ();
next;
}
next if /^#/;
next unless /\S/;
$_ = $1 if /^(\S+)\s/;
if ( defined $exclude_pat && /$exclude_pat/mso ) {
verbose ("Excluding $_\n");
$excluded++;
next;
}
push (@ret, $_);
}
$fh->close;
@ret = sort @ret if $opt_sort;
@ret;
}
( run in 3.045 seconds using v1.01-cache-2.11-cpan-13bb782fe5a )