[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#770822: unblock: reclass/1.4.1-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package reclass

There's been a bit of difficulty relating to the 1.4 upload to
unstable prior to the freeze resulting from another developer
uploading an NMU (1.3-2) that was required for another package
(boxer-data), which first needed to migrate to testing before we
could finally push 1.4-1. And then it turned out that 1.4-1 had
a bug, which we fixed by reverting the change upstream, resulting in
1.4.1-1, which missed the freeze window.

Due to this being a new upstream release, the diff is a little
longer than you'd want it, but I am annotating it and abbreviating
all the stuff that is related only to example data files:

diff -Nru reclass-1.3/ChangeLog.rst reclass-1.4.1/ChangeLog.rst
--- reclass-1.3/ChangeLog.rst   2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/ChangeLog.rst 2014-10-28 15:52:25.000000000 +0100
@@ -5,6 +5,14 @@
 ========= ========== ========================================================
 Version   Date       Changes
 ========= ========== ========================================================
+1.4.1     2014-10-28 * Revert debug logging, which wasn't fault-free and so
+                       it needs more time to mature.
+1.4       2014-10-25 * Add rudimentary debug logging
+                     * Prevent interpolate() from overwriting merged values
+                     * Look for "init" instead of "index" when being fed
+                       a directory.
+                     * Fix error reporting on node name collision across
+                       subdirectories.
 1.3       2014-03-01 * Salt: pillar data from previous pillars are now
                        available to reclass parameter interpolation
                      * yaml_fs: classes may be defined in subdirectories
diff -Nru reclass-1.3/debian/changelog reclass-1.4.1/debian/changelog
--- reclass-1.3/debian/changelog        2014-10-14 11:06:24.000000000 +0200
+++ reclass-1.4.1/debian/changelog      2014-10-28 15:57:42.000000000 +0100
@@ -1,4 +1,18 @@
-reclass (1.3-2) unstable; urgency=medium
+reclass (1.4.1-1) unstable; urgency=low
+
+  * New upstream release reverting the logging changes, which weren't ready
+    yet.
+
+ -- martin f. krafft <madduck@debian.org>  Tue, 28 Oct 2014 15:56:59 +0100
+
+reclass (1.4-1) unstable; urgency=low
+
+  * New upstream release (closes: #761952).
+  * Compliant with Debian Policy 3.9.6.
+
+ -- martin f. krafft <madduck@debian.org>  Sat, 25 Oct 2014 15:12:25 +0200
+
+reclass (1.3-2) UNRELEASED; urgency=medium
 
   * Add myself as uploader.
   * Update Vcs-Git and Vcs-Browser URLs.
@@ -6,7 +20,7 @@
   * Have python-reclass depend on python-pkg-resources.
     Closes: bug#757423.
 
- -- Jonas Smedegaard <dr@jones.dk>  Tue, 14 Oct 2014 11:06:20 +0200
+ -- Jonas Smedegaard <dr@jones.dk>  Wed, 17 Sep 2014 10:17:04 +0200
 
 reclass (1.3-1) unstable; urgency=low
 
diff -Nru reclass-1.3/debian/control reclass-1.4.1/debian/control
--- reclass-1.3/debian/control  2014-09-17 14:20:00.000000000 +0200
+++ reclass-1.4.1/debian/control        2014-10-25 20:45:57.000000000 +0200
@@ -2,9 +2,9 @@
 Section: python
 Priority: extra
 Maintainer: martin f. krafft <madduck@debian.org>
-Uploader: Jonas Smedegaard <dr@jones.dk>
+Uploaders: Jonas Smedegaard <dr@jones.dk>
 Build-Depends: python-setuptools, python, debhelper (>= 8.9.7), python-sphinx, python-yaml
-Standards-Version: 3.9.5
+Standards-Version: 3.9.6
 XS-Python-Version: all
 Homepage: http://reclass.pantsfullofunix.net/
 Vcs-Git: git://anonscm.debian.org/collab-maint/reclass.git
diff -Nru reclass-1.3/doc/source/extrefs.inc reclass-1.4.1/doc/source/extrefs.inc
--- reclass-1.3/doc/source/extrefs.inc  2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/doc/source/extrefs.inc        2014-10-28 15:52:25.000000000 +0100
@@ -2,5 +2,5 @@
 .. _Salt: http://saltstack.com/community
 .. _Ansible: http://www.ansibleworks.com
 .. _Hiera: http://projects.puppetlabs.com/projects/hiera
-.. _Artistic Licence 2.0: http://www.perlfoundation.org/legal/licenses/artistic-2_0.html
+.. _Artistic Licence 2.0: http://opensource.org/licenses/Artistic-2.0
 .. _Jinja2: http://jinja.pocoo.org
diff -Nru reclass-1.3/doc/source/index.rst reclass-1.4.1/doc/source/index.rst
--- reclass-1.3/doc/source/index.rst    2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/doc/source/index.rst  2014-10-28 15:52:25.000000000 +0100
@@ -34,7 +34,7 @@
 
 Licence
 -------
-|reclass| is © 2007–2013 by martin f. krafft and released under the terms of
+|reclass| is © 2007–2014 by martin f. krafft and released under the terms of
 the `Artistic Licence 2.0`_.
 
 Contents
diff -Nru reclass-1.3/doc/source/operations.rst reclass-1.4.1/doc/source/operations.rst
--- reclass-1.3/doc/source/operations.rst       2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/doc/source/operations.rst     2014-10-28 15:52:25.000000000 +0100
@@ -75,8 +75,9 @@
 Merging of parameters is done "deeply", meaning that lists and dictionaries
 are extended (recursively), rather than replaced. However, a scalar value
 *does* overwrite a dictionary or list value. While the scalar could be
-appended to an existing list, there is sane default assumption in the context
-of a dictionary, so this behaviour seems the most logical.
+appended to an existing list, there is no sane default assumption in the
+context of a dictionary, so this behaviour seems the most logical. Plus, it
+allows for a dictionary to be erased by overwriting it with the null value.
 
 After all classes (and the classes they reference) have been visited,
 |reclass| finally merges the applications list and parameters defined for the
diff -Nru reclass-1.3/doc/source/salt.rst reclass-1.4.1/doc/source/salt.rst
--- reclass-1.3/doc/source/salt.rst     2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/doc/source/salt.rst   2014-10-28 15:52:25.000000000 +0100
@@ -197,9 +197,19 @@
 feature is therefore turned off by default and must be explicitly enabled in
 the Salt master configuration file, like this::
 
-  reclass: &reclass
-      […]
-      propagate_pillar_data_to_reclass: True
+  ext_pillar:
+    - reclass:
+        […]
+        propagate_pillar_data_to_reclass: True
+
+Unfortunately, to use this, currently you cannot use YAML references (i.e.
+``*reclass``) as shown above, as the ``master_tops`` subsystem does not accept
+this configuration parameter, and there seems to be no way to extend an alias.
+Specifically, the following is not possible — let me know if it is!::
+
+  ext_pillar:
+    - reclass: *reclass    # WARNING: this does not work!
+        propagate_pillar_data_to_reclass: True
 
 .. include:: substs.inc
 .. include:: extrefs.inc
diff -Nru reclass-1.3/reclass/datatypes/parameters.py reclass-1.4.1/reclass/datatypes/parameters.py
--- reclass-1.3/reclass/datatypes/parameters.py 2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/reclass/datatypes/parameters.py       2014-10-28 15:52:25.000000000 +0100
@@ -70,6 +70,13 @@
         return self._base.copy()
 
     def _update_scalar(self, cur, new, path):
+        if isinstance(cur, RefValue) and path in self._occurrences:
+            # If the current value already holds a RefValue, we better forget
+            # the occurrence, or else interpolate() will later overwrite
+            # unconditionally. If the new value is a RefValue, the occurrence
+            # will be added again further on
+            del self._occurrences[path]
+
         if self.delimiter is None or not isinstance(new, (types.StringTypes,
                                                           RefValue)):
             # either there is no delimiter defined (and hence no references
diff -Nru reclass-1.3/reclass/datatypes/tests/test_parameters.py reclass-1.4.1/reclass/datatypes/tests/test_parameters.py
--- reclass-1.3/reclass/datatypes/tests/test_parameters.py      2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/reclass/datatypes/tests/test_parameters.py    2014-10-28 15:52:25.000000000 +0100
@@ -127,6 +127,12 @@
             self.assertIn(mock.call(key), b1.get.call_args_list)
             self.assertIn(mock.call(key, value), b1.__setitem__.call_args_list)
 
+    def test_stray_occurrence_overwrites_during_interpolation(self):
+        p1 = Parameters({'r' : mock.sentinel.ref, 'b': '${r}'})
+        p2 = Parameters({'b' : mock.sentinel.goal})
+        p1.merge(p2)
+        p1.interpolate()
+        self.assertEqual(p1.as_dict()['b'], mock.sentinel.goal)
 
 class TestParametersNoMock(unittest.TestCase):
 
diff -Nru reclass-1.3/reclass/errors.py reclass-1.4.1/reclass/errors.py
--- reclass-1.3/reclass/errors.py       2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/reclass/errors.py     2014-10-28 15:52:25.000000000 +0100
@@ -208,4 +208,4 @@
         msg = "{0}: Definition of node '{1}' in '{2}' collides with " \
               "definition in '{3}'. Nodes can only be defined once " \
               "per inventory."
-        return msg.format(storage, name, uris[1], uris[0])
+        return msg.format(self._storage, self._name, self._uris[1], self._uris[0])
diff -Nru reclass-1.3/reclass/storage/yaml_fs/__init__.py reclass-1.4.1/reclass/storage/yaml_fs/__init__.py
--- reclass-1.3/reclass/storage/yaml_fs/__init__.py     2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/reclass/storage/yaml_fs/__init__.py   2014-10-28 15:52:25.000000000 +0100
@@ -27,18 +27,24 @@
         super(ExternalNodeStorage, self).__init__(STORAGE_NAME)
 
         def name_mangler(relpath, name):
-            # nodes are identified just by their basename
-            return name
+            # nodes are identified just by their basename, so
+            # no mangling required
+            return relpath, name
         self._nodes_uri = nodes_uri
         self._nodes = self._enumerate_inventory(nodes_uri, name_mangler)
 
         def name_mangler(relpath, name):
             if relpath == '.':
-                return name
+                # './' is converted to None
+                return None, name
             parts = relpath.split(os.path.sep)
-            if name != 'index':
+            if name != 'init':
+                # "init" is the directory index, so only append the basename
+                # to the path parts for all other filenames. This has the
+                # effect that data in file "foo/init.yml" will be registered
+                # as data for class "foo", not "foo.init"
                 parts.append(name)
-            return '.'.join(parts)
+            return relpath, '.'.join(parts)
         self._classes_uri = classes_uri
         self._classes = self._enumerate_inventory(classes_uri, name_mangler)
 
@@ -56,13 +62,15 @@
                 name = os.path.splitext(f)[0]
                 relpath = os.path.relpath(dirpath, basedir)
                 if callable(name_mangler):
-                    name = name_mangler(relpath, name)
+                    relpath, name = name_mangler(relpath, name)
                 uri = os.path.join(dirpath, f)
                 if name in ret:
                     E = reclass.errors.DuplicateNodeNameError
-                    raise E(self._get_storage_name(), name,
+                    raise E(self.name, name,
                             os.path.join(basedir, ret[name]), uri)
-                ret[name] = os.path.join(relpath, f)
+                if relpath:
+                    f = os.path.join(relpath, f)
+                ret[name] = f
 
         d = Directory(basedir)
         d.walk(register_fn)
diff -Nru reclass-1.3/reclass/version.py reclass-1.4.1/reclass/version.py
--- reclass-1.3/reclass/version.py      2014-03-01 14:45:02.000000000 +0100
+++ reclass-1.4.1/reclass/version.py    2014-10-28 15:52:25.000000000 +0100
@@ -8,7 +8,7 @@
 #
 RECLASS_NAME = 'reclass'
 DESCRIPTION = 'merge data by recursive descent down an ancestry hierarchy'
-VERSION = '1.3'
+VERSION = '1.4.1'
 AUTHOR = 'martin f. krafft'
 AUTHOR_EMAIL = 'reclass@pobox.madduck.net'
 COPYRIGHT = 'Copyright © 2007–14 ' + AUTHOR

unblock reclass/1.4.1-1

-- System Information:
Debian Release: jessie/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 3.16-2-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_NZ, LC_CTYPE=en_NZ.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash


-- 
 .''`.   martin f. krafft <madduck@d.o> @martinkrafft
: :'  :  proud Debian developer
`. `'`   http://people.debian.org/~madduck
  `-  Debian - when you have better things to do than fixing systems

Attachment: digital_signature_gpg.asc
Description: Digital signature (see http://martin-krafft.net/gpg/sig-policy/999bbcc4/current)


Reply to: