use File::Copy;
use Cwd qw/realpath/;
+
#---------- public utilities ----------
sub flatten_params ($) {
my $upwards = $item;
for (;;) {
$upwards =~ s#/+$##;
+ $upwards =~ s#/+\.$##;
last unless $upwards =~ m#[^/]#;
foreach my $try (@{ $v->{S}{srcdump_vcs_dirs} }) {
#print STDERR "TRY $item $upwards $try\n";
next;
}
#print STDERR "VCS $item $upwards $try\n";
- return if $dirsdone->{$upwards}++;
+ if ($dirsdone->{$upwards}++) {
+ $outfn->("srcdump_process_item: did $upwards,".
+ " skipping $item");
+ return;
+ }
#print STDERR "VCS $item $upwards $try GO\n";
$try =~ m/\w+/ or die;
return $v->_ch(('srcdump_byvcs_'.lc $&),
$dumpdir, $upwards, $outfn);
}
- $upwards =~ s#/*[^/]+##;
+ $upwards =~ s#/*[^/]+$##;
}
return $v->_ch('srcdump_novcs', $dumpdir, $item, $outfn);
}
$script .= " \\! -name '$excl'";
}
$script .= " -print0";
- return srcdump_dir_cpio($c,$v,$dumpdir,$item,$outfn,$script);
+ return srcdump_dir_cpio($c,$v,$dumpdir,$item,$outfn,'novcs',$script);
} elsif (-f _) {
return srcdump_file($c,$v,$dumpdir,$item,$outfn);
} else {
sub srcdump_byvcs_git ($$$$$) {
my ($c, $v, $dumpdir, $dir, $outfn) = @_;
#print STDERR "BYVCS GIT $dir\n";
- return srcdump_dir_cpio($c,$v,$dumpdir,$dir,$outfn,"
+ return srcdump_dir_cpio($c,$v,$dumpdir,$dir,$outfn,'git',"
git ls-files -z
git ls-files -z --others --exclude-from=.gitignore
find .git -print0
copy($file,$outfile) or die "$file $outfile $!";
}
-sub srcdump_dir_cpio ($$$$$) {
- my ($c,$v,$dumpdir,$dir,$outfn,$script) = @_;
- my $outfile = $outfn->("srcdump_dir_cpio saved $dir", "tar");
+sub srcdump_dir_cpio ($$$$$$$) {
+ my ($c,$v,$dumpdir,$dir,$outfn,$how,$script) = @_;
+ my $outfile = $outfn->("srcdump_dir_cpio $how saved $dir", "tar");
#print STDERR "CPIO $dir >$script<\n";
my $pid = fork();
defined $pid or die $!;
}
if (!lstat "$item") {
die "stat $item $!" unless $!==&ENOENT;
- $outfn->("srcdump_dirscan_prepare stat ENOENT: skipping $item");
+ $outfn->("srcdump_dirscan_prepare stat ENOENT, skipping $item");
next;
};
if (-l _) {
$item = realpath($item);
if (!defined $item) {
die "realpath $item $!" unless $!==&ENOENT;
- $outfn->("srcdump_dirscan_prepare realpath ENOENT:".
+ $outfn->("srcdump_dirscan_prepare realpath ENOENT,".
" skipping $item");
}
}