[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#601203: debian-cd: Recommended packages should be included recursively for apt to find



I got a working patch, but while testing and trying to get my patch
working, I discovered that the current handling of NORECOMMENDS=0 is
completely broken.

The Perl code in sort_deps to read this value look like this:

  my $norecommends = $ENV{'NORECOMMENDS'} || 1;

When one ask for recommended packages to be included, the
$ENV{'NORECOMMENDS'} content resolve to "0" which is false for perl
and thus trigger the '|| 1' part, causing the opposite of the intended
effect.

This patch seem to solve this:

diff -urw debian-cd.unpatched.squeeze/tools/sort_deps debian-cd/tools/sort_deps
--- debian-cd.unpatched.squeeze/tools/sort_deps 2010-10-23 08:48:16.000000000 +02
00
+++ debian-cd/tools/sort_deps   2010-10-26 00:01:04.000000000 +0200
@@ -21,7 +21,7 @@
 my $force_firmware = $ENV{'FORCE_FIRMWARE'} || 0;
 my $local = $ENV{'LOCAL'} || 0;
 my $complete = $ENV{'COMPLETE'} || 0;
-my $norecommends = $ENV{'NORECOMMENDS'} || 1;
+my $norecommends = (defined $ENV{'NORECOMMENDS'} ? $ENV{'NORECOMMENDS'} : 1);
 my $nosuggests = $ENV{'NOSUGGESTS'} || 1;

 my $apt = "$ENV{'BASEDIR'}/tools/apt-selection";

Here is the complete patch to add recommended packages, including lots
of debug output I added to try to figure out why everything I tried
failed.  I'll provide a cleaner patch as soon as possible, but thought
it best to get feedback on the current changes.

diff -urw debian-cd.unpatched.squeeze/tools/sort_deps debian-cd/tools/sort_deps
--- debian-cd.unpatched.squeeze/tools/sort_deps	2010-10-23 08:48:16.000000000 +0200
+++ debian-cd/tools/sort_deps	2010-10-26 00:01:04.000000000 +0200
@@ -21,7 +21,7 @@
 my $force_firmware = $ENV{'FORCE_FIRMWARE'} || 0;
 my $local = $ENV{'LOCAL'} || 0;
 my $complete = $ENV{'COMPLETE'} || 0;
-my $norecommends = $ENV{'NORECOMMENDS'} || 1;
+my $norecommends = (defined $ENV{'NORECOMMENDS'} ? $ENV{'NORECOMMENDS'} : 1);
 my $nosuggests = $ENV{'NOSUGGESTS'} || 1;
 
 my $apt = "$ENV{'BASEDIR'}/tools/apt-selection";
@@ -50,7 +50,7 @@
 my %excluded;
 my %packages;
 
-msg(0, "Running sort_deps to sort packages for $arch:\n");
+msg(0, "Running sort_deps to sort packages for $arch (edu):\n");
 msg(1, "======================================================================
 Here are the settings you've chosen for making the list:
 Architecture: $arch
@@ -63,6 +63,8 @@
 msg(1, yesno($nonfree)."\n");
 msg(1, "Force inclusion of firmware packages: ");
 msg(1, yesno($force_firmware)."\n");
+msg(1, "Include recommended packages: ");
+msg(1, yesno(!$norecommends)."\n");
 msg(1, "======================================================================
 ");
 
@@ -449,7 +451,7 @@
 	}
 	
 	# Get all dependencies (not yet included) of each package
-	my (@dep) = (get_missing ($p));
+	my (@dep) = (get_missing ($p, $add_rec));
 
 	# Stop here if apt failed
 	if (not scalar(@dep)) {
@@ -477,7 +479,7 @@
 	
 	if ($add_rec) {
 	    #TODO: Look for recommends (not yet included !!)
-	    add_recommends (\@dep);
+	    add_recommends (\@dep, $add_rec);
 	    # Check again but doesn't fail if one of the package cannot be
 	    # installed, just ignore it (it will be removed from @dep)
 		($ok, $reasons) = check_list (\@dep, 0);
@@ -520,30 +522,38 @@
 	my @copy = @{$list}; # A copy is needed since I'll modify the array
 	
 	foreach $p (@copy) {
-		add_missing($list, $packages{$p}{"Suggests"}, $p);
+		add_missing($list, $packages{$p}{"Suggests"}, $p, 0);
 	}
 		
 }
 
 sub add_recommends {
 	my $list = shift;
+	my $add_rec = shift; # Do we look for recommends
 	my $p; # = shift;
 	my @copy = @{$list}; # A copy is needed since I'll modify the array
 	
 	foreach $p (@copy) {
-		add_missing($list, $packages{$p}{"Recommends"}, $p);
+		add_missing($list, $packages{$p}{"Recommends"}, $p, $add_rec);
 	}
 		
 }
 
 sub get_missing {
 	my $p = shift;
+	my $add_rec = shift; # Do we look for recommends
 	my @list = ();
 	
-	if (not add_missing (\@list, $packages{$p}{"Depends"}, $p)) {
+	msg(0, "Looking for Depends for $p (add-rec = $add_rec)\n");
+	if (not add_missing (\@list, $packages{$p}{"Depends"}, $p, $add_rec)) {
 		return ();
 	}
 
+	if ($add_rec) {
+		msg(0, "Looking for Recommends for $p\n");
+		add_missing (\@list, $packages{$p}{"Recommends"}, $p, $add_rec);
+	}
+
 	remove_entry($p, \@list);
 	push @list, $p;
 	return (@list);
@@ -554,6 +564,7 @@
 	my $list = shift;
 	my $new = shift;
 	my $pkgin = shift;
+	my $add_rec = shift; # Do we look for recommends
 	my @backup = @{$list};
 	my $ok = 1;
 	
@@ -596,7 +607,7 @@
 					# Stop after the first package that is
 					# added successfully
 					push (@{$list}, $pkg);
-					if (add_missing ($list, $packages{$pkg}{"Depends"}, $pkg)) {
+					if (add_missing ($list, $packages{$pkg}{"Depends"}, $pkg, $add_rec)) {
 						$or_ok = 1;
 						remove_entry($pkg, $list);
 						push @{$list}, $pkg;
@@ -622,11 +633,16 @@
 			next if $included{lc $_}; # Already included, don't worry
 			next if is_in (lc $_, $list);
 			push @{$list}, lc $_;
-			if (not add_missing ($list, $packages{lc $_}{"Depends"}, lc $_)) {
+			if (not add_missing ($list, $packages{lc $_}{"Depends"}, lc $_, $add_rec)) {
 				msg(1, "couldn't add $_ ...\n");
 				msg(1, "$pkgin failed, couldn't satisfy dep on $_\n");
 				pop @{$list};
 				$ok = 0;
+			} elsif ($add_rec) {
+				my $reclist = $packages{lc $_}{"Recommends"};
+				msg(0, "trying to add recommends $reclist ...\n");
+				# depends added successfully, add recommends too
+				add_missing ($list, $reclist, lc $_, $add_rec);
 			}
 			remove_entry(lc $_, $list);
 			push @{$list}, lc $_;


Happy hacking,
-- 
Petter Reinholdtsen



Reply to: