diff options
author | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2012-10-31 20:26:38 +0000 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2015-05-10 16:25:26 +0200 |
commit | 5b39d1c5735452fd1116f0218531a60fe2746956 (patch) | |
tree | 5be67f6d7870c1a08e5cce1f581c099e046a3a2d /src | |
parent | b933e161dcce5a178fc869d65044d0cf56df29fd (diff) | |
download | bcfg2-5b39d1c5735452fd1116f0218531a60fe2746956.tar.gz bcfg2-5b39d1c5735452fd1116f0218531a60fe2746956.tar.bz2 bcfg2-5b39d1c5735452fd1116f0218531a60fe2746956.zip |
mark dependencies as automatic installed
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/Bcfg2/Client/Tools/APT.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/APT.py b/src/lib/Bcfg2/Client/Tools/APT.py index 5a86e8cd4..b18fee359 100644 --- a/src/lib/Bcfg2/Client/Tools/APT.py +++ b/src/lib/Bcfg2/Client/Tools/APT.py @@ -35,6 +35,7 @@ class APT(Bcfg2.Client.Tools.Tool): self.debsums = '%s/bin/debsums' % Bcfg2.Options.setup.apt_install_path self.aptget = '%s/bin/apt-get' % Bcfg2.Options.setup.apt_install_path self.dpkg = '%s/bin/dpkg' % Bcfg2.Options.setup.apt_install_path + self.aptmark = '%s/bin/apt-mark' % Bcfg2.Options.setup.apt_install_path self.__execs__ = [self.debsums, self.aptget, self.dpkg] path_entries = os.environ['PATH'].split(':') @@ -87,6 +88,23 @@ class APT(Bcfg2.Client.Tools.Tool): except apt.cache.FetchFailedException: err = sys.exc_info()[1] self.logger.info("Failed to update APT cache: %s" % err) + # mark dependencies as being automatically installed and vice versa + mark = [] + unmark = [] + try: + installed_pkgs = [p.name for p in self.pkg_cache if p.is_installed] + except AttributeError: + installed_pkgs = [p.name for p in self.pkg_cache if p.isInstalled] + for pkg in self.getSupportedEntries(): + if pkg.get('name') in installed_pkgs: + if pkg.get('origin') == 'Packages': + mark.append(pkg.get('name')) + else: + unmark.append(pkg.get('name')) + if mark: + self.cmd.run("%s markauto %s" % (self.aptmark, (" ".join(mark)))) + if unmark: + self.cmd.run("%s unmarkauto %s" % (self.aptmark, (" ".join(unmark)))) self.pkg_cache = apt.cache.Cache() def FindExtra(self): @@ -241,11 +259,16 @@ class APT(Bcfg2.Client.Tools.Tool): self.logger.error("APT command failed") self.pkg_cache = apt.cache.Cache() self.extra = self.FindExtra() + mark = [] states = dict() for package in packages: states[package] = self.VerifyPackage(package, [], checksums=False) if states[package]: self.modified.append(package) + if package.get('origin') == 'Packages': + mark.append(package.get('name')) + if mark: + self.cmd.run("%s markauto %s" % (self.aptmark, (" ".join(mark)))) return states def VerifyPath(self, entry, _): # pylint: disable=W0613 |