summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2013-03-12 03:47:56 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2013-03-12 03:47:56 +0100
commitf2c410e72b7bc54be0dcb3f88ae9f06a9934ceaf (patch)
tree508bb88438d97ee6369199a842c56b5138514a60
parentaf94542b8d938dd931c07d439e9eb6437aab38bf (diff)
downloadbcfg2-f2c410e72b7bc54be0dcb3f88ae9f06a9934ceaf.tar.gz
bcfg2-f2c410e72b7bc54be0dcb3f88ae9f06a9934ceaf.tar.bz2
bcfg2-f2c410e72b7bc54be0dcb3f88ae9f06a9934ceaf.zip
Plugins/Packages: backported get_new_packages
1.3.0 uses get_new_packages to calculate the differencies between the configured packages and all packages with deps. This could be overwritten if some plugin for Packages needs to do something special (e.g. if the names of the packages are specialized during dependency calculation).
-rw-r--r--debian/changelog3
-rw-r--r--src/lib/Server/Plugins/Packages/Collection.py18
-rw-r--r--src/lib/Server/Plugins/Packages/__init__.py2
3 files changed, 21 insertions, 2 deletions
diff --git a/debian/changelog b/debian/changelog
index 084417388..9a48e79d4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,10 @@
bcfg2 (1.2.3-11) UNRELEASED; urgency=low
+ * Plugins/Packages: backported get_new_packages
* Plugins/Packages: backported packages_form_entry/_to_entry
* Plugins/PkgVars: new plugin to set various vars per package
- -- Alexander Sulfrian <alex@spline.inf.fu-berlin.de> Fri, 01 Mar 2013 03:29:05 +0100
+ -- Alexander Sulfrian <alex@spline.inf.fu-berlin.de> Fri, 22 Feb 2013 04:16:25 +0100
bcfg2 (1.2.3-9) unstable; urgency=low
diff --git a/src/lib/Server/Plugins/Packages/Collection.py b/src/lib/Server/Plugins/Packages/Collection.py
index f5e5bbe02..269ce90f5 100644
--- a/src/lib/Server/Plugins/Packages/Collection.py
+++ b/src/lib/Server/Plugins/Packages/Collection.py
@@ -191,6 +191,24 @@ class Collection(Bcfg2.Server.Plugin.Debuggable):
default="auto"),
type=self.ptype, origin='Packages')
+ def get_new_packages(self, initial, complete):
+ """ Compute the difference between the complete package list
+ (as returned by :func:`complete`) and the initial package list
+ computed from the specification. This is necessary because
+ the format may be different between the two lists due to
+ :func:`packages_to_entry` and :func:`packages_from_entry`. See
+ :ref:`pkg-objects` for more details.
+
+ :param initial: The initial package list
+ :type initial: set of strings, but see :ref:`pkg-objects`
+ :param complete: The final package list
+ :type complete: set of strings, but see :ref:`pkg-objects`
+ :return: set of strings, but see :ref:`pkg-objects` - the set
+ of packages that are in ``complete`` but not in
+ ``initial``
+ """
+ return list(complete.difference(initial))
+
def complete(self, packagelist, pinnings=None, recommended=None):
'''Build the transitive closure of all package dependencies
diff --git a/src/lib/Server/Plugins/Packages/__init__.py b/src/lib/Server/Plugins/Packages/__init__.py
index d998f1c8b..66b597bd6 100644
--- a/src/lib/Server/Plugins/Packages/__init__.py
+++ b/src/lib/Server/Plugins/Packages/__init__.py
@@ -185,7 +185,7 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
if unknown:
self.logger.info("Packages: Got %d unknown entries" % len(unknown))
self.logger.info("Packages: %s" % list(unknown))
- newpkgs = list(packages.difference(initial))
+ newpkgs = collection.get_new_packages(initial, packages)
self.debug_log("Packages: %d initial, %d complete, %d new" %
(len(initial), len(packages), len(newpkgs)))
newpkgs.sort()