debian.py: Implement stable order of fields in debian/tests/control

Move the field ordering control from the Package class to a new
superclass of Package and TestsControl.
This commit is contained in:
Ben Hutchings 2016-01-08 12:08:28 +00:00
parent 71c199151b
commit dc3b21cc1a
2 changed files with 45 additions and 46 deletions

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
linux (4.3.3-6) UNRELEASED; urgency=medium
* debian.py: Implement stable order of fields in debian/tests/control
-- Ben Hutchings <ben@decadent.org.uk> Fri, 08 Jan 2016 12:08:13 +0000
linux (4.3.3-5) unstable; urgency=medium
* [armhf] udeb: Fix duplication and circular dependency between core-modules

View File

@ -396,7 +396,35 @@ class PackageRelationEntry(object):
self.restrictions = []
class Package(dict):
class _ControlFileDict(dict):
def __setitem__(self, key, value):
try:
cls = self._fields[key]
if not isinstance(value, cls):
value = cls(value)
except KeyError:
pass
super(_ControlFileDict, self).__setitem__(key, value)
def keys(self):
keys = set(super(_ControlFileDict, self).keys())
for i in self._fields.keys():
if i in self:
keys.remove(i)
yield i
for i in keys:
yield i
def items(self):
for i in self.keys():
yield (i, self[i])
def values(self):
for i in self.keys():
yield self[i]
class Package(_ControlFileDict):
_fields = collections.OrderedDict((
('Package', str),
('Source', str),
@ -419,49 +447,14 @@ class Package(dict):
('Description', PackageDescription),
))
def __setitem__(self, key, value):
try:
cls = self._fields[key]
if not isinstance(value, cls):
value = cls(value)
except KeyError:
pass
super(Package, self).__setitem__(key, value)
def keys(self):
keys = set(super(Package, self).keys())
for i in self._fields.keys():
if i in self:
keys.remove(i)
yield i
for i in keys:
yield i
def items(self):
for i in self.keys():
yield (i, self[i])
def values(self):
for i in self.keys():
yield self[i]
class TestsControl(dict):
_fields = {
'Tests': str,
'Test-Command': str,
'Restrictions': str,
'Features': str,
'Depends': PackageRelation,
'Tests-Directory': str,
'Classes': str,
}
def __setitem__(self, key, value):
try:
cls = self._fields[key]
if not isinstance(value, cls):
value = cls(value)
except KeyError:
pass
super(TestsControl, self).__setitem__(key, value)
class TestsControl(_ControlFileDict):
_fields = collections.OrderedDict((
('Tests', str),
('Test-Command', str),
('Restrictions', str),
('Features', str),
('Depends', PackageRelation),
('Tests-Directory', str),
('Classes', str),
))