* Significant cleanup of list2cds. Closes: #451237

This commit is contained in:
Steve McIntyre 2008-01-11 01:04:28 +00:00
parent eeb3b9abfc
commit 4c2837c737
3 changed files with 31 additions and 82 deletions

View File

@ -17,9 +17,6 @@
ifndef VERBOSE_MAKE ifndef VERBOSE_MAKE
Q=@ Q=@
endif endif
ifndef SIZELIMIT
SIZELIMIT=2000000000000
endif
ifndef TASK ifndef TASK
TASK=$(BASEDIR)/tasks/Debian_$(CODENAME) TASK=$(BASEDIR)/tasks/Debian_$(CODENAME)
endif endif
@ -361,7 +358,7 @@ $(BDIR)/list.exclude: $(BDIR)/rawlist-exclude
image-trees: ok genlist image-trees: ok genlist
# Use list2cds to do the dependency sorting # Use list2cds to do the dependency sorting
$(Q)for ARCH in $(ARCHES_NOSRC); do \ $(Q)for ARCH in $(ARCHES_NOSRC); do \
ARCH=$$ARCH $(list2cds) $(BDIR)/list $(SIZELIMIT); \ ARCH=$$ARCH $(list2cds) $(BDIR)/list; \
done done
$(Q)if [ "$(SOURCEONLY)"x = "yes"x ] ; then \ $(Q)if [ "$(SOURCEONLY)"x = "yes"x ] ; then \
$(grab_source_list) $(BDIR) $(ADIR) $(BDIR)/list $(BDIR)/packages; \ $(grab_source_list) $(BDIR) $(ADIR) $(BDIR)/list $(BDIR)/packages; \

5
debian/changelog vendored
View File

@ -72,7 +72,10 @@ debian-cd (3.0.4) UNRELEASED; urgency=low
if there is no Packages file for the local section. Create an empty Packages if there is no Packages file for the local section. Create an empty Packages
file if one is missing. file if one is missing.
-- Frans Pop <fjp@debian.org> Sun, 06 Jan 2008 00:44:19 +0100 [ Steve McIntyre ]
* Significant cleanup of list2cds. Closes: #451237
-- Frans Pop <fjp@debian.org> Mon, 17 Dec 2007 21:54:11 +0100
debian-cd (3.0.3) unstable; urgency=low debian-cd (3.0.3) unstable; urgency=low

View File

@ -3,16 +3,15 @@
# Copyright 1999 Raphaël Hertzog <hertzog@debian.org> # Copyright 1999 Raphaël Hertzog <hertzog@debian.org>
# See the README file for the license # See the README file for the license
# #
# This script takes 2 arguments on input : # This script takes 1 argument on input :
# - a filename listing all the packages to include # - a filename listing all the packages to include
# - a size-limit for each CD #
# and it sorts those packages such that dependencies are met in order
# #
use strict; use strict;
my $list = shift; my $list = shift;
my $deflimit = $ENV{'SIZELIMIT'} || shift || 639631360;
my $limit = $ENV{'SIZELIMIT1'} || $deflimit;
my $nonfree = $ENV{'NONFREE'} || 0; my $nonfree = $ENV{'NONFREE'} || 0;
my $extranonfree = $ENV{'EXTRANONFREE'} || 0; my $extranonfree = $ENV{'EXTRANONFREE'} || 0;
@ -21,7 +20,6 @@ my $complete = $ENV{'COMPLETE'} || 0;
my $exclude = "$list.exclude"; my $exclude = "$list.exclude";
my $norecommends = $ENV{'NORECOMMENDS'} || 0; my $norecommends = $ENV{'NORECOMMENDS'} || 0;
my $nosuggests = $ENV{'NOSUGGESTS'} || 1; my $nosuggests = $ENV{'NOSUGGESTS'} || 1;
my $maxcds = $ENV{'MAXCDS'} || 0;
my $apt = "$ENV{'BASEDIR'}/tools/apt-selection"; my $apt = "$ENV{'BASEDIR'}/tools/apt-selection";
my $adir = "$ENV{'APTTMP'}/$ENV{'CODENAME'}-$ENV{'ARCH'}"; my $adir = "$ENV{'APTTMP'}/$ENV{'CODENAME'}-$ENV{'ARCH'}";
@ -29,6 +27,8 @@ my $arch = "$ENV{'ARCH'}";
my $dir = "$ENV{'TDIR'}/$ENV{'CODENAME'}"; my $dir = "$ENV{'TDIR'}/$ENV{'CODENAME'}";
my $verbose = $ENV{'VERBOSE'} || 0; my $verbose = $ENV{'VERBOSE'} || 0;
my @output;
$| = 1; # Autoflush for debugging $| = 1; # Autoflush for debugging
open(LOG, ">$dir/log.list2cds.$arch") open(LOG, ">$dir/log.list2cds.$arch")
@ -119,7 +119,7 @@ foreach (keys %excluded) {
close (STATS); close (STATS);
# Browse the list of packages to include # Browse the list of packages to include
my ($total_size, $cd_size, $size, $cd) = (0, 0, 0, 1); my ($output_size, $size) = (0, 0, 0);
my %cds; my %cds;
# Generate a dependency tree for each package # Generate a dependency tree for each package
@ -165,7 +165,7 @@ while (defined($_ = <STATUS>)) {
add_package($p, ! $norecommends, ! $nosuggests); add_package($p, ! $norecommends, ! $nosuggests);
} }
close STATUS; close STATUS;
msg(0, " S/R/I/B packages take $cd_size bytes\n"); msg(0, " S/R/I/B packages take $output_size bytes\n");
# Now start to look for packages wanted by the user ... # Now start to look for packages wanted by the user ...
msg(0, " Adding the rest of the requested packages\n"); msg(0, " Adding the rest of the requested packages\n");
@ -187,14 +187,14 @@ while (defined($_=<LIST>)) {
# nevertheless ... this may be removed once the udebs have a # nevertheless ... this may be removed once the udebs have a
# better depencency system # better depencency system
if ($packages{$_}{"IsUdeb"}) { if ($packages{$_}{"IsUdeb"}) {
add_to_cd($cd, $packages{$_}{"Size"}, [$_]); add_to_output($packages{$_}{"Size"}, [$_]);
} else { } else {
add_package ($_, ! $norecommends, ! $nosuggests); add_package ($_, ! $norecommends, ! $nosuggests);
} }
} }
close LIST; close LIST;
msg(0, " Now up to $cd_size bytes\n"); msg(0, " Now up to $output_size bytes\n");
# All requested packages have been included # All requested packages have been included
# But we'll continue to add if $complete was requested # But we'll continue to add if $complete was requested
if ($complete) { if ($complete) {
@ -277,7 +277,6 @@ if ($extranonfree and (! $nonfree))
} }
} }
# msg(0, "CD $cd will only be filled with $cd_size bytes ...\n");
} }
# Remove old files # Remove old files
@ -285,26 +284,17 @@ foreach (glob("$dir/*.packages*")) {
unlink $_; unlink $_;
} }
# Now write the lists down # Now write the list down
my $numcds=0;
foreach (sort { $a <=> $b } keys %cds) {
if ($maxcds && $numcds+1 > $maxcds) {
msg(0, "Stopping at CD $numcds\n");
last;
}
$numcds++;
my $count = 0; my $count = 0;
open(CDLIST, "> $dir/packages.$arch") open(CDLIST, "> $dir/packages.$arch")
|| die "Can't write in $dir/$_.packages.$arch: $!\n"; || die "Can't write in $dir/$_.packages.$arch: $!\n";
foreach (@{$cds{$_}}) { foreach (@output) {
my $component = $packages{$_}{"Component"}; my $component = $packages{$_}{"Component"};
print CDLIST "$arch:$component:$_\n"; print CDLIST "$arch:$component:$_\n";
$count++; $count++;
} }
close CDLIST; close CDLIST;
msg(0, "Done: processed/sorted $count packages, total size $cd_size bytes.\n"); msg(0, "Done: processed/sorted $count packages, total size $output_size bytes.\n");
}
close LOG; close LOG;
@ -481,23 +471,7 @@ sub add_package {
# All packages are ok, now check for the size issue # All packages are ok, now check for the size issue
$size = get_size (\@dep); $size = get_size (\@dep);
add_to_output ($size, \@dep);
# Creation of a new CD when needed
if ($cd_size + $size > $limit) {
my $try_size = $cd_size + $size;
msg(0, "CD $cd filled with $cd_size bytes ... ",
"(limit was $limit, would have taken $try_size)\n");
$cd++;
$cd_size = 0;
# New limit
$limit = $ENV{"SIZELIMIT$cd"} || $deflimit;
msg(2, "Limit for CD $cd is $limit.\n");
# Unexclude packages
unexclude ($cd);
}
add_to_cd ($cd, $size, \@dep);
} }
sub accepted { sub accepted {
@ -679,44 +653,19 @@ sub check_list {
return ($fail ? $ok : 1); return ($fail ? $ok : 1);
} }
# Add packages to the current CD number $cd # Add packages to the output list
sub add_to_cd { sub add_to_output {
my $cd = shift;
my $size = shift; my $size = shift;
my $ref = shift; my $ref = shift;
msg(2, " \$cd_size = $cd_size, \$size = $size\n"); msg(2, " \$output_size = $output_size, \$size = $size\n");
$cd_size += $size; $output_size += $size;
$total_size += $size;
foreach my $pkg (@{$ref}) { foreach my $pkg (@{$ref}) {
$included{$pkg} = $cd; $included{$pkg} = 1;
}
$cds{$cd} = [] if not ref $cds{$cd};
msg(2, " Adding @{$ref} to CD $cd ...\n");
push(@{$cds{$cd}}, @{$ref});
}
# Unexclude packages before given CD is started
sub unexclude {
my $cd = shift;
my $unexclude = $ENV{"UNEXCLUDE$cd"} || "$list.unexclude$cd";
if (-e $unexclude) {
open (UNEXCL, "< $unexclude") || die "Can't open $unexclude : $!\n";
while (defined($_=<UNEXCL>)) {
chomp;
if (not exists $packages{$_}) {
msg(1, "Package '$_' is in unexcluded but " .
"doesn't exist. Ignored.\n");
next;
}
$excluded{$_} = 0;
msg(1, "Unexcluding package '$_'\n");
}
close UNEXCL;
} }
push(@output, @{$ref});
} }
sub yesno { sub yesno {