summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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()