From 7413f317f64a8f1eaa0327fc1c838ac0cea561b6 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 31 Oct 2012 20:26:38 +0000 Subject: mark dependencies as automatic installed --- src/lib/Client/Tools/APT.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src') diff --git a/src/lib/Client/Tools/APT.py b/src/lib/Client/Tools/APT.py index db8cd56e7..dc6c9e6aa 100644 --- a/src/lib/Client/Tools/APT.py +++ b/src/lib/Client/Tools/APT.py @@ -22,6 +22,7 @@ var_path = setup['var_path'] etc_path = setup['etc_path'] DEBSUMS = '%s/bin/debsums' % install_path APTGET = '%s/bin/apt-get' % install_path +APTMARK = '%s/bin/apt-mark' % install_path DPKG = '%s/bin/dpkg' % install_path class APT(Bcfg2.Client.Tools.Tool): @@ -76,6 +77,23 @@ class APT(Bcfg2.Client.Tools.Tool): self.logger.info("Failed to initialize APT cache: %s" % e) raise Bcfg2.Client.Tools.toolInstantiationError self.pkg_cache.update() + # 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" % (APTMARK, (" ".join(mark)))) + if unmark: + self.cmd.run("%s unmarkauto %s" % (APTMARK, (" ".join(unmark)))) self.pkg_cache = apt.cache.Cache() if 'req_reinstall_pkgs' in dir(self.pkg_cache): self._newapi = True @@ -262,10 +280,15 @@ class APT(Bcfg2.Client.Tools.Tool): self.logger.error("APT command failed") self.pkg_cache = apt.cache.Cache() self.extra = self.FindExtra() + mark = [] 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" % (APTMARK, (" ".join(mark)))) def VerifyPath(self, entry, _): """Do nothing here since we only verify Path type=ignore.""" -- cgit v1.2.3-1-g7c22