I have made a patch to fix this bug. Please leave a comment if the
solution is good enough to merge. To test you need to unpack synaptic
0.62.x or later and then do:

$ patch synaptic-0.62.x/common/rconfiguration.cc <attached>.patch

The problem I found: synaptic once changed its config location
to /root/.synaptic/synaptic.conf. And because no other tool would ever
read this file, synaptic filters out all config tags that do not start
with "Synaptic::". That's why "APT::Install-Recommends" does not get
stored anymore.

In distros like Ubuntu it was decided in 2008 that the built-in default
"false" is not optimal. Therefore a file /etc/apt/apt.conf.d/01ubuntu
was created, containing one line:

APT::Install-Recommends "true";

With that in mind I tried to make my patch as minimal-invasive and
robust as possible: whenever synaptic stores its config, a
file /etc/apt/apt.conf.d/99synaptic is also written, containing the
above line ending with "true" if the corresponding checkbox is checked
or "false" otherwise. This file overrides preceding files
like /01ubuntu. And if writing fails for some reason then the only
consequence is a message sent to stderr.

I tested this patch against synaptic-0.62.7 and it works for me.

+++ Oliver

--- synaptic-0.62.7ubuntu6/common/rconfiguration.cc.orig	2009-10-15 18:58:25.000000000 +0200
+++ synaptic-0.62.7ubuntu6/common/rconfiguration.cc	2010-02-22 02:44:25.000000000 +0100
@@ -98,6 +98,22 @@
 
    cfile.close();
 
+   // quick fix to store the option 'consider recommended packages as dependencies'
+   string aptConfPath = _config->Find("Dir", "/")
+                      + _config->Find("Dir::Etc", "etc/apt/")
+                      + _config->Find("Dir::Etc:parts", "apt.conf.d")
+                      + "/99synaptic";
+   ofstream aptfile(aptConfPath.c_str(), ios::out);
+   if (!aptfile != 0) {
+      cerr << "couldn't open " << aptConfPath.c_str() << " for writing APT::Install-Recommends" << endl;
+   } else {
+      if (_config->FindB("APT::Install-Recommends", false))
+         aptfile << "APT::Install-Recommends \"true\";" << endl;
+      else
+         aptfile << "APT::Install-Recommends \"false\";" << endl;
+      aptfile.close();
+   }
+
    return true;
 }
 

Reply via email to