From: Ian Jackson Date: Sat, 23 Feb 2013 15:50:46 +0000 (+0000) Subject: automatic agpl compliance: fixes X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=4e254e72c7879e561dc7c9a2521f00cb2954eb68;p=cgi-auth-flexible.git automatic agpl compliance: fixes --- diff --git a/cgi-auth-flexible.pm b/cgi-auth-flexible.pm index ea83348..a6fb33c 100644 --- a/cgi-auth-flexible.pm +++ b/cgi-auth-flexible.pm @@ -232,16 +232,19 @@ sub srcdump_process_dir ($$$$$$) { return () if $v->_ch('srcdump_system_dir', $incdir); my $upwards = $incdir; for (;;) { - $upwards =~ s#/+##; + $upwards =~ s#/+$##; last unless $upwards =~ m#[^/]#; foreach my $try (@{ $v->{S}{srcdump_vcs_dirs} }) { +#print STDERR "TRY $incdir $upwards $try\n"; if (!stat "$upwards/$try") { $!==&ENOENT or die "check $upwards/$try $!"; next; } - $try =~ m/\w+/ or die; +#print STDERR "VCS $incdir $upwards $try\n"; return if $dirsdone->{$upwards}++; - return $v->_ch(('srcdump_byvcs_'.lc $try), +#print STDERR "VCS $incdir $upwards $try GO\n"; + $try =~ m/\w+/ or die; + return $v->_ch(('srcdump_byvcs_'.lc $&), $dumpdir, $upwards, $tarballcounter); } $upwards =~ s#/*[^/]+##; @@ -261,9 +264,10 @@ sub srcdump_novcs ($$$$$) { sub srcdump_byvcs_git ($$$$$) { my ($c, $v, $dumpdir, $dir, $tarballcounter) = @_; +#print STDERR "BYVCS GIT $dir\n"; return srcdump_dir_cpio($c,$v,$dumpdir,$dir,$tarballcounter," - git-ls-files -z; - git-ls-files -z --others --exclude-from=.gitignore; + git ls-files -z + git ls-files -z --others --exclude-from=.gitignore find .git -print0 "); } @@ -271,12 +275,17 @@ sub srcdump_byvcs_git ($$$$$) { sub srcdump_dir_cpio ($$$$$) { my ($c,$v,$dumpdir,$dir,$tarballcounter,$script) = @_; my $outfile = "$dumpdir/$$tarballcounter.tar"; +#print STDERR "CPIO $dir >$script<\n"; my $pid = fork(); defined $pid or die $!; if (!$pid) { + $SIG{__DIE__} = sub { + print STDERR "CGI::Auth::Flexible srcdump error: $@\n"; + exit 127; + }; open STDOUT, ">", $outfile or die "$outfile $!"; chdir $dir or die "chdir $dir: $!"; - exec '/bin/bash','-ec',''," + exec '/bin/bash','-ec'," set -o pipefail ( $script @@ -310,10 +319,22 @@ sub srcdump_dirscan_prepare ($$) { or die "$v->{S}{srcdump_licence_path} $!"; $needlicence = undef; } + unlink <"$dumpdir/[a-z][a-z][a-z].tar">; my $srctarballcounter = 'aaa'; my %dirsdone; my @srcfiles = ("$dumpdir/licence.data"); foreach my $incdir ($v->_ch('srcdump_includedirs')) { + if ($incdir eq '.' && $v->{S}{srcdump_filter_cwd}) { + my @bad = grep { !m#^/# } values %INC; + die "filtering . from srcdump dirs and \@INC but already". + " included @bad " if @bad; + @INC = grep { $_ ne '.' } @INC; + next; + } + if (!stat "$incdir/.") { + next if $!==&ENOENT; + die "stat $incdir $!"; + }; if (defined $needlicence) { foreach my $try (@{ $v->{S}{srcdump_licence_files} }) { last if copy("$incdir/$try", $needlicence); @@ -407,6 +428,7 @@ sub new_verifier { srcdump_licence_path => undef, srcdump_licence_files => [qw(AGPLv3 CGI/Auth/Flexible/AGPLv3)], srcdump_includedirs => sub { return @INC; }, + srcdump_filter_cwd => 1, srcdump_system_dir => sub { $_[2] =~ m#^/etc/|^/usr/(?!local/)#; }, srcdump_process_dir => \&srcdump_process_dir, srcdump_vcs_dirs => [qw(.git .hg .svn CVS)],