chiark / gitweb /
automatic agpl compliance: fixes
[cgi-auth-flexible.git] / cgi-auth-flexible.pm
index 8c3cb49d4cc33e172d281c0d94b66679668b68b7..bb359c152ef332858e688f653783e760ca4c4ee4 100644 (file)
@@ -50,6 +50,7 @@ use Data::Dumper;
 use File::Copy;
 use Cwd qw/realpath/;
 
+
 #---------- public utilities ----------
 
 sub flatten_params ($) {
@@ -236,6 +237,7 @@ sub srcdump_process_item ($$$$$$) {
     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";
@@ -244,13 +246,17 @@ sub srcdump_process_item ($$$$$$) {
                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);
 }
@@ -264,7 +270,7 @@ sub srcdump_novcs ($$$$$) {
            $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 {
@@ -275,7 +281,7 @@ sub srcdump_novcs ($$$$$) {
 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
@@ -288,9 +294,9 @@ sub srcdump_file ($$$$) {
     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 $!;
@@ -359,14 +365,14 @@ sub srcdump_dirscan_prepare ($$) {
        }
        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");
            }
        }