From 3c615ed2e5426478959fa297fe123c63810e646f Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 23 Jun 2007 13:26:05 +0000 Subject: newinfra goes lives git-svn-id: svn://tug.org/texlive/trunk@4500 c570f23f-e606-0410-a88d-b1316a301751 --- Build/cdbuild/place | 127 +++++++++++++------- Build/cdbuild/place.newinfra | 268 ------------------------------------------- Build/tools/ctan2tl | 35 +----- Build/tools/ctan2tl.newinfra | 120 ------------------- 4 files changed, 89 insertions(+), 461 deletions(-) delete mode 100755 Build/cdbuild/place.newinfra delete mode 100755 Build/tools/ctan2tl.newinfra diff --git a/Build/cdbuild/place b/Build/cdbuild/place index 60381aa411d..dd45d025f55 100755 --- a/Build/cdbuild/place +++ b/Build/cdbuild/place @@ -8,9 +8,18 @@ # Basic usage: place PKG # to process Build/cdbuild/cooked/PKG. +BEGIN { + chomp ($mydir = `dirname $0`); + unshift (@INC, "$mydir/../../Master/tlpkg"); +} + use File::Basename; use File::Find; use Cwd; +use TeXLive::TLPSRC; +use TeXLive::TLPOBJ; +use TeXLive::TLPDB; +use TeXLive::TLTREE; $newpackage = 0; %dirs = (); # dirs we make changes in @@ -38,22 +47,85 @@ if (-d "texmf-dist") {$Root="texmf-dist"; } elsif (-d "texmf-doc") {$Root="texmf-doc"; } elsif (-d "texmf") {$Root="texmf"; } +# I moved this test BEFORE any action. For now I want this script ONLY to +# work with Documentation/Package and NOT with anything else!!! [np] +if ($Root eq 'texmf-doc') { + $Type = 'Documentation'; +} elsif ($Root eq 'texmf-dist') { + $Type = 'Package'; +} else { + die "cannot handle Root=$Root"; +} -# get list of existing files -my $listsfile = "$M/texmf/lists/$package"; -if (-f $listsfile) { - open (LIST, $listsfile) || die "open($listsfile) failed: $!"; - while () { - chomp; - s/\r$//; - $Old{$_} = 1 if /^[A-z]/; +# initialize TLPDB +my $tlpdb = new TeXLive::TLPDB ( location => "$M/texlive.tlpdb" ); +# create TLTREE from stuff in cooked/$pkg +my $tltree = TeXLive::TLTREE->new( 'svnroot' => "$mydir/$package" ); +$tltree->init_from_files; + +# get package from TLPDB; +my $tlpold = $tlpdb->get_package("$package"); +if (defined($tlpold)) { + # what to do with binfiles, but they are not place-ed!!! + foreach ($tlpold->srcfiles, $tlpold->runfiles, $tlpold->docfiles) { + $Old{$_} = 1; } - close (LIST); +} else { + $newpackage = 1; } -else { - $newpackage=1; + +# create new tlpsrc and tlpobj +my $tlpsrc = TeXLive::TLPSRC; +if (! -r "$M/tlpkg/tlpsrc/$package.tlpsrc") { + $tlpsrc->name("$package"); + $tlpsrc->category($Type); + if (!$chicken) { + open TMP, ">$M/tlpkg/tlpsrc/$package.tlpsrc" or die "Cannot open tlpsrc file!"; + $tlpsrc->writeout(\*TMP); + close TMP + } +} else { + $tlpsrc->from_file("$M/tlpkg/tlpsrc/$package.tlpsrc"); } +my $tlpnew = $tlpsrc->make_tlpobj($tltree); + +# we took over the comparison of files from the ctan2tl script since +# we are here in perl world, which makes it easier ... +if (!defined($tlpold)) { + warn "place: $package not present in $M/texlive.tlpdb\n\n"; +} else { + print "\n\f new vs. present $package\n"; + my @oldfiles; + push @oldfiles, $tlpold->srcfiles; + push @oldfiles, $tlpold->runfiles; + push @oldfiles, $tlpold->docfiles; + `rm -f /tmp/pkgfiles.old`; + foreach (sort @oldfiles) { + `echo $_ >> /tmp/pkgfiles.old`; + } + my @newfiles; + push @newfiles, $tlpnew->srcfiles; + push @newfiles, $tlpnew->runfiles; + push @newfiles, $tlpnew->docfiles; + `rm -f /tmp/pkgfiles.new`; + foreach (sort @newfiles) { + `echo $_ >> /tmp/pkgfiles.new`; + } + print `comm -3 /tmp/pkgfiles.new /tmp/pkgfiles.old`; + my @difffiles = `comm -12 /tmp/pkgfiles.new /tmp/pkgfiles.old`; + chomp(@difffiles); + my $sum = 0; + foreach (@difffiles) { + my @foo = `diff --ignore-all-space -U 0 $M/$_ $mydir/$package/$_`; + $sum += ($#foo + 1); + } + my $nrcommfiles = $#difffiles + 1; + print "$nrcommfiles common files, ~$sum lines different\n\n\f\n"; + #`rm -f /tmp/pkgfiles.new /tmp/pkgfiles.old`; +} + + &xchdir ("$mydir/$package"); find (\&files,"."); foreach $file (sort keys %Old) { @@ -81,45 +153,18 @@ foreach $file (sort keys %New) { } } -my $tpmdir = "$M/$Root/tpm"; - xchdir ($mydir); &my_system ("mv $package $package.done"); -if ($Root eq 'texmf-doc') { - $Type = 'Documentation'; -} elsif ($Root eq 'texmf-dist') { - $Type = 'Package'; -} else { - die "cannot handle Root=$Root"; -} chomp (my $tools = `cd $mydir/../../tools && pwd`); -$SETUP = "$tools/tpm-factory.pl --master=$M --tpm_dir=$tpmdir" - . " --ftp_dir=/var/tmp --arch=all --patterns=auto" - . " --name=$Type/$package"; - -# create tpm if needed -&my_system ("perl $SETUP --new") unless -f "$tpmdir/$package.tpm"; - -# update tpm -&my_system ("perl $SETUP --clean"); - -# create/update lists file -&my_system ("xsltproc --stringparam ROOT $M" - . " $tools/tpm2list.xsl $M/$Root/tpm/$package.tpm"); - - -# add tpm and lists files after they are created. if ($newpackage) { - &add_file ($listsfile); - &add_file ("$tpmdir/$package.tpm"); + &add_file ("$M/tlpkg/tlpsrc/$package.tlpsrc"); } # these two dirs will essentially always change, so just list them. -$dirs{$tpmdir}++; -$dirs{"$M/texmf/lists"}++; +$dirs{"$M/tlpkg/tlpsrc/$package.tlpsrc"}++; # print dirs with changed files, for svn commit purposes. # if other files have been modified in those same dirs, though, this @@ -138,6 +183,8 @@ for my $dir (sort keys %dirs) { # close (DIRLIST) || warn "close($DIRLIST) failed: $!"; +warn "WARNING WARNING Things we SHOULD/COULD do here:\n - Update the texlive.tlpdb\n - Compare the files ACTUALLY present in cooked/package with those included via tlpsrc/tltree generation!!!\n - Create list file\n - Update the list of available packages for web update\n - Create zip file(s)\n\n\n"; + exit (0); diff --git a/Build/cdbuild/place.newinfra b/Build/cdbuild/place.newinfra deleted file mode 100755 index 915d32db543..00000000000 --- a/Build/cdbuild/place.newinfra +++ /dev/null @@ -1,268 +0,0 @@ -#!/usr/bin/env perl -# $Id: place 2045 2006-08-27 18:21:49Z karl $ -# License: public domain. Originally written by Sebastian Rahtz. -# -# Process a tree in the Build/cdbuild/cooked directory (probably created -# by ctan2tds.pl) and integrate into the main texmf trees. -# -# Basic usage: place PKG -# to process Build/cdbuild/cooked/PKG. - -BEGIN { - chomp ($mydir = `dirname $0`); - unshift (@INC, "$mydir/../../Master/tlpkg"); -} - -use File::Basename; -use File::Find; -use Cwd; -use TeXLive::TLPSRC; -use TeXLive::TLPOBJ; -use TeXLive::TLPDB; -use TeXLive::TLTREE; - -$newpackage = 0; -%dirs = (); # dirs we make changes in - -if ($ARGV[0] eq "-n") { - $chicken = 1; - shift; -} else { - $chicken = 0; -} -print "place: chicken mode = $chicken\n"; - -die "usage: $0 PKGNAME\n" unless @ARGV == 1; -$package = $ARGV[0]; - -xchdir (dirname($0) . "/cooked"); -$mydir = getcwd(); --d "$mydir/$package" || die "$0: No such package in $mydir: $package\n"; - -xchdir ("../../../Master"); -$M = getcwd(); - -xchdir ("$mydir/$package"); -if (-d "texmf-dist") {$Root="texmf-dist"; } -elsif (-d "texmf-doc") {$Root="texmf-doc"; } -elsif (-d "texmf") {$Root="texmf"; } - -# I moved this test BEFORE any action. For now I want this script ONLY to -# work with Documentation/Package and NOT with anything else!!! [np] -if ($Root eq 'texmf-doc') { - $Type = 'Documentation'; -} elsif ($Root eq 'texmf-dist') { - $Type = 'Package'; -} else { - die "cannot handle Root=$Root"; -} - -# initialize TLPDB -my $tlpdb = new TeXLive::TLPDB ( location => "$M/texlive.tlpdb" ); -# create TLTREE from stuff in cooked/$pkg -my $tltree = TeXLive::TLTREE->new( 'svnroot' => "$mydir/$package" ); -$tltree->init_from_files; - -# get package from TLPDB; -my $tlpold = $tlpdb->get_package("$package"); -if (defined($tlpold)) { - # what to do with binfiles, but they are not place-ed!!! - foreach ($tlpold->srcfiles, $tlpold->runfiles, $tlpold->docfiles) { - $Old{$_} = 1; - } -} else { - $newpackage = 1; -} - -# create new tlpsrc and tlpobj -my $tlpsrc = TeXLive::TLPSRC; -if (! -r "$M/tlpkg/tlpsrc/$package.tlpsrc") { - $tlpsrc->name("$package"); - $tlpsrc->category($Type); - if (!$chicken) { - open TMP, ">$M/tlpkg/tlpsrc/$package.tlpsrc" or die "Cannot open tlpsrc file!"; - $tlpsrc->writeout(\*TMP); - close TMP - } -} else { - $tlpsrc->from_file("$M/tlpkg/tlpsrc/$package.tlpsrc"); -} - -my $tlpnew = $tlpsrc->make_tlpobj($tltree); - -# we took over the comparison of files from the ctan2tl script since -# we are here in perl world, which makes it easier ... -if (!defined($tlpold)) { - warn "place: $package not present in $M/texlive.tlpdb\n\n"; -} else { - print "\n\f new vs. present $package\n"; - my @oldfiles; - push @oldfiles, $tlpold->srcfiles; - push @oldfiles, $tlpold->runfiles; - push @oldfiles, $tlpold->docfiles; - `rm -f /tmp/pkgfiles.old`; - foreach (sort @oldfiles) { - `echo $_ >> /tmp/pkgfiles.old`; - } - my @newfiles; - push @newfiles, $tlpnew->srcfiles; - push @newfiles, $tlpnew->runfiles; - push @newfiles, $tlpnew->docfiles; - `rm -f /tmp/pkgfiles.new`; - foreach (sort @newfiles) { - `echo $_ >> /tmp/pkgfiles.new`; - } - print `comm -3 /tmp/pkgfiles.new /tmp/pkgfiles.old`; - my @difffiles = `comm -12 /tmp/pkgfiles.new /tmp/pkgfiles.old`; - chomp(@difffiles); - my $sum = 0; - foreach (@difffiles) { - my @foo = `diff --ignore-all-space -U 0 $M/$_ $mydir/$package/$_`; - $sum += ($#foo + 1); - } - my $nrcommfiles = $#difffiles + 1; - print "$nrcommfiles common files, ~$sum lines different\n\n\f\n"; - #`rm -f /tmp/pkgfiles.new /tmp/pkgfiles.old`; -} - - -&xchdir ("$mydir/$package"); -find (\&files,"."); -foreach $file (sort keys %Old) { - print "* $file: [retained=$New{$file}]\n"; - - # and if the file does not exist, don't try to remove it -- we - # probably did so by hand and didn't bother to update the tpm. - next unless -f "$M/$file"; - - # don't remove tpm or lists file, they won't be in the new package. - if (! $New{$file} && $file !~ /\.tpm$/ && $file !~ m,/lists/[^/]+$,) { - &my_system ("svn remove $M/$file"); - } - $dirs{dirname ("$M/$file")}++; -} - -# copy files -my $Job = "tar cf - . | (cd $M && tar xf - )"; -&my_system ($Job); - -# sort so dirs will be added before subdirs. -foreach $file (sort keys %New) { - if (! $Old{$file}) { - &add_file ("$M/$file"); - } -} - -xchdir ($mydir); -&my_system ("mv $package $package.done"); - - -chomp (my $tools = `cd $mydir/../../tools && pwd`); - -if ($newpackage) { - &add_file ("$M/tlpkg/tlpsrc/$package.tlpsrc"); -} - -# these two dirs will essentially always change, so just list them. -$dirs{"$M/tlpkg/tlpsrc/$package.tlpsrc"}++; - -# print dirs with changed files, for svn commit purposes. -# if other files have been modified in those same dirs, though, this -# won't detect it. It would be better to list exactly the *files* which -# should be committed, but ... lazy. -# -# also write dir list to a separate file, for easy passing to a commit. -# -$DIRLIST = ">" . ($ENV{"TMPDIR"} || "/tmp") . "/tlplace.dirs"; -open (DIRLIST) || die "open($DIRLIST) failed: $!"; -# -for my $dir (sort keys %dirs) { - print "$dir\n"; - print DIRLIST "$dir\n"; -} -# -close (DIRLIST) || warn "close($DIRLIST) failed: $!"; - -warn "WARNING WARNING Things we SHOULD/COULD do here:\n - Update the texlive.tlpdb\n - Compare the files ACTUALLY present in cooked/package with those included via tlpsrc/tltree generation!!!\n - Create list file\n - Update the list of available packages for web update\n - Create zip file(s)\n\n\n"; - -exit (0); - - - -#-------------------------------------- -sub dirs -{ - local @filenames; - if (-d) { - @filenames=&buildfilelist($File::Find::name); - if (!@filenames) { rmdir $File::Find::name;} - }} - -sub buildfilelist -{ - my($me) = @_; - my @files; - opendir(DIR,$me) || cleanup ("cannot open directory $me"); - @files =grep(!/^\.\.?/,readdir(DIR)); - closedir(DIR); - return @files; -} - - -sub files -{ - if (-f) { - $This=$File::Find::name; - $This =~ s/^\.\///; - $New{$This}=1; - } -} - - -# add a file to the repository. for svn, we also have to add the -# containing dir, and the parent of that dir, if they are new. -# (Should really just traverse ) -# -sub add_file -{ - my ($newfile) = @_; - - my $newdir = dirname ($newfile); - - # when it's needed, parent must come first, else have svn "not working copy". - my $parentdir = dirname ($newdir); - unless (-d "$parentdir/.svn") { - &my_system ("svn add -N $parentdir"); - $dirs{$parentdir}++; - } - - unless (-d "$newdir/.svn") { - &my_system ("svn add -N $newdir"); - } - - &my_system ("svn add $newfile"); - - # remember that we changed this directory. - $dirs{$newdir}++; -} - - -sub xchdir -{ - my ($dir) = @_; - chdir ($dir) || die "chdir($dir) failed: $!"; - print "place: chdir($dir)\n"; -} - - -sub my_system -{ - my ($cmd) = @_; - - print "place: SYSTEM $cmd\n"; - - unless ($chicken) { - my $ret = system ($cmd); - die "`$cmd' failed, status=$ret, goodbye\n" if $ret != 0; - } -} diff --git a/Build/tools/ctan2tl b/Build/tools/ctan2tl index 24973d47cfa..5d8b43cba55 100755 --- a/Build/tools/ctan2tl +++ b/Build/tools/ctan2tl @@ -111,40 +111,9 @@ printf "\n\f cooked\n" find -depth -type d | xargs rmdir 2>/dev/null find $pkg \! -type d -printf "%TY%Tm%Td.%TH%TM %p\n" | sort -r +1 -# compare to tpm. -Master=../../../Master -tpmfile=`ls $Master/texmf*/tpm/$pkg.tpm 2>/dev/null` -if test -z "$tpmfile"; then - echo "$0: no tpm file for $pkg in `cd $Master; pwd`." >&2 -else - printf "\n\f new vs. present $tpmfile\n" - rm -f /tmp/pkgfiles.* - # remove leading text in case of lines starting with texmf. - # Then assume all actual files do start with texmf. - sed -n -e '/TPM:.*Files/,$s,^texmf,./texmf,p' $tpmfile \ - | grep -v '\.tpm$' \ - | sort >/tmp/pkgfiles.tpm - # - # list of files in the new package we've just cooked. - (cd $pkg && find \! -type d -print) | grep -v '/cooked/' \ - | sort >/tmp/pkgfiles.new - # - comm -3 /tmp/pkgfiles.new /tmp/pkgfiles.tpm - # - comm -12 /tmp/pkgfiles.new /tmp/pkgfiles.tpm >/tmp/tldiff.com - # - for common_file in `cat /tmp/tldiff.com`; do - diff --ignore-all-space -u0 $Master/$common_file $pkg/$common_file - done >/tmp/tldiff - diff_lines=`wc -l &2 - exit 1 -fi - -ctan_dir1=`tlpkginfo --ctan-dir $pkg` -if test -z "$ctan_dir1"; then - echo "$0: can't find CTAN directory for $pkg." >&2 - exit 1 -fi -echo "$0: ctan dir for $pkg" -echo "$0: is $ctan_dir1" - -if $copy_from_ctan; then - -# remove whatever old stuff we might have. -rm -rf $pkg - -# An important special case: the latex-tds project contains tds-ready -# zip files for the base latex distribution and amslatex. -# We want to use them. -corelatex_tds_pkglist="babel|cyrillic|graphics|latex|psnfss|tools" -amslatex_tds_pkglist="ams|amscls|amsltx2|amsmath|amsrefs" # dup in tlpkginfo -latex_tds_pkglist="latex-tds|$amslatex_tds_pkglist|$corelatex_tds_pkglist" - -if echo "$pkg" | egrep "^($latex_tds_pkglist)\$" >/dev/null; then - mkdir $pkg - ctan_root=`tlpkginfo --ctan-root` - # - # complications: the latex-tds package, for our purposes, is the - # sources for the tools that do the process; that's in the zip file - # source.zip, in the latex-tds directory. Similarly, the zip file for - # latex itself is named "base.zip". Finally, amslatex.zip actually - # contains several packages (= directories) -- such as ams, amscls, - # etc. AMS sets it up that way. - # - if test $pkg = latex-tds; then - zipname=source.zip - elif test $pkg = latex; then - zipname=base.zip - elif echo "$pkg" | egrep "^($amslatex_tds_pkglist)\$" >/dev/null; then - zipname=amslatex.zip - else - zipname=$pkg.zip - fi - (cd $pkg && unzip -qq $ctan_root/macros/latex/contrib/latex-tds/$zipname) - -elif test "$pkg" = genmisc; then - # do not copy subdirs, symlinks, or any files but .sty and .tex - # (that is, no patch.doc or pmat.zip). - mkdir -p $pkg - cp -p \ - `find $ctan_dir1/* '(' -type d -o -type l ')' -prune -o \ - '(' -name '*.sty' -o -name *.tex ')' -print` \ - $pkg - -else - # normal case (/. to deref symlinks, e.g., arabtex) - cp -pr $ctan_dir1/. $pkg -fi - -fi # end of copying from CTAN. - - -# -printf "\n ctan2tds\n" -rm -rf ../cooked/$pkg -test -d ../cooked || mkdir ../cooked -../ctan2tds.pl $pkg || exit 1 - -cd ../cooked || exit 1 -printf "\n\f cooked\n" -find -depth -type d | xargs rmdir 2>/dev/null -find $pkg \! -type d -printf "%TY%Tm%Td.%TH%TM %p\n" | sort -r +1 - -printf "\n\f place.newinfra $place_chicken\n" -rm -rf $pkg.done -../place.newinfra $place_chicken $pkg -status=$? - -rm -rf ../raw/$pkg -exit $status -- cgit v1.2.3