debian/bin,debian/control,debian/lib/python,debian/rules: Use Python 3

debian/lib/python: Sync with linux package
This commit is contained in:
Ben Hutchings 2015-09-25 19:26:03 +01:00
parent ad62cfffb2
commit 277d4945c7
9 changed files with 116 additions and 96 deletions

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python3
import sys import sys
sys.path.append("debian/lib/python") sys.path.append("debian/lib/python")
@ -21,7 +21,7 @@ class gencontrol(Gencontrol):
self.do_source(packages) self.do_source(packages)
self.do_main(packages, makefile) self.do_main(packages, makefile)
self.write_control(packages.itervalues()) self.write_control(packages.values())
self.write_makefile(makefile) self.write_makefile(makefile)
def do_source(self, packages): def do_source(self, packages):

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python3
import sys import sys
sys.path.append("debian/lib/python") sys.path.append("debian/lib/python")
@ -186,7 +186,7 @@ class Main(object):
try: try:
if os.spawnv(os.P_WAIT, '/bin/sh', ['sh', '-c', ' '.join(cmdline)]): if os.spawnv(os.P_WAIT, '/bin/sh', ['sh', '-c', ' '.join(cmdline)]):
raise RuntimeError("Can't patch source") raise RuntimeError("Can't patch source")
os.chmod(out, 0644) os.chmod(out, 0o644)
except: except:
try: try:
os.unlink(out) os.unlink(out)

4
debian/changelog vendored
View File

@ -2,6 +2,10 @@ linux-tools (4.2-1) UNRELEASED; urgency=medium
* New upstream release * New upstream release
[ Ben Hutchings ]
* debian/bin,debian/control,debian/lib/python,debian/rules: Use Python 3
- debian/lib/python: Sync with linux package
-- Ben Hutchings <ben@decadent.org.uk> Fri, 25 Sep 2015 18:42:20 +0100 -- Ben Hutchings <ben@decadent.org.uk> Fri, 25 Sep 2015 18:42:20 +0100
linux-tools (4.2~rc7-1~exp1) experimental; urgency=medium linux-tools (4.2~rc7-1~exp1) experimental; urgency=medium

View File

@ -1,9 +1,14 @@
import os import os
import os.path import os.path
import pickle
import re import re
import sys import sys
import textwrap import textwrap
import cPickle
try:
from configparser import RawConfigParser
except ImportError:
from ConfigParser import RawConfigParser
__all__ = [ __all__ = [
'ConfigCoreDump', 'ConfigCoreDump',
@ -22,6 +27,14 @@ class SchemaItemBoolean(object):
raise Error raise Error
class SchemaItemInteger(object):
def __call__(self, i):
try:
return int(i.strip(), 0)
except ValueError:
raise Error
class SchemaItemList(object): class SchemaItemList(object):
def __init__(self, type="\s+"): def __init__(self, type="\s+"):
self.type = type self.type = type
@ -78,12 +91,12 @@ class ConfigCore(dict):
return ret return ret
def dump(self, fp): def dump(self, fp):
cPickle.dump(self, fp, 0) pickle.dump(self, fp, 0)
class ConfigCoreDump(object): class ConfigCoreDump(object):
def __new__(self, fp): def __new__(self, fp):
return cPickle.load(fp) return pickle.load(fp)
class ConfigCoreHierarchy(object): class ConfigCoreHierarchy(object):
@ -98,7 +111,7 @@ class ConfigCoreHierarchy(object):
def __new__(cls, schema, dirs=[]): def __new__(cls, schema, dirs=[]):
schema_complete = cls.schema_base.copy() schema_complete = cls.schema_base.copy()
for key, value in schema.iteritems(): for key, value in schema.items():
schema_complete.setdefault(key, {}).update(value) schema_complete.setdefault(key, {}).update(value)
return cls.Reader(dirs, schema_complete)() return cls.Reader(dirs, schema_complete)()
@ -195,7 +208,6 @@ class ConfigParser(object):
def __init__(self, schemas): def __init__(self, schemas):
self.schemas = schemas self.schemas = schemas
from ConfigParser import RawConfigParser
self._config = config = RawConfigParser() self._config = config = RawConfigParser()
def __getitem__(self, key): def __getitem__(self, key):
@ -225,7 +237,7 @@ class ConfigParser(object):
def _convert_one(self, schema, data): def _convert_one(self, schema, data):
ret = {} ret = {}
for key, value in data.iteritems(): for key, value in data.items():
if key in schema: if key in schema:
value = schema[key](value) value = schema[key](value)
ret[key] = value ret[key] = value
@ -241,9 +253,9 @@ class ConfigParser(object):
if __name__ == '__main__': if __name__ == '__main__':
import sys import sys
sys.path.append('debian/lib/python') sys.path.append('debian/lib/python')
config = ConfigCoreDump(open('debian/config.defines.dump')) config = ConfigCoreDump(open('debian/config.defines.dump', 'rb'))
for section, items in sorted(config.iteritems()): for section, items in sorted(config.items(), key=lambda a:tuple(i or '' for i in a[0])):
print u"[%s]" % (section,) print(u"[%s]" % (section,))
for item, value in sorted(items.iteritems()): for item, value in sorted(items.items()):
print u"%s: %s" % (item, value) print(u"%s: %s" % (item, value))
print print()

View File

@ -1,5 +1,4 @@
import collections import collections
import itertools
import os.path import os.path
import re import re
@ -35,7 +34,7 @@ class Changelog(list):
def __init__(self, dir='', version=None): def __init__(self, dir='', version=None):
if version is None: if version is None:
version = Version version = Version
f = file(os.path.join(dir, "debian/changelog")) f = open(os.path.join(dir, "debian/changelog"), encoding="UTF-8")
while True: while True:
line = f.readline() line = f.readline()
if not line: if not line:
@ -53,7 +52,7 @@ class Changelog(list):
class Version(object): class Version(object):
_version_rules = ur""" _version_rules = r"""
^ ^
(?: (?:
(?P<epoch> (?P<epoch>
@ -82,7 +81,7 @@ $
self.upstream = match.group("upstream") self.upstream = match.group("upstream")
self.revision = match.group("revision") self.revision = match.group("revision")
def __unicode__(self): def __str__(self):
return self.complete return self.complete
@property @property
@ -105,14 +104,15 @@ $
class VersionLinux(Version): class VersionLinux(Version):
_version_linux_rules = ur""" _version_linux_rules = r"""
^ ^
(?P<version> (?P<version>
\d+\.\d+ \d+\.\d+
) )
(?P<update> (?P<update>
\.\d+ (?:\.\d+)?
)? (?:-[a-z]+\d+)?
)
(?: (?:
~ ~
(?P<modifier> (?P<modifier>
@ -130,13 +130,20 @@ class VersionLinux(Version):
(\.\d+)? (\.\d+)?
(?: (?:
(?P<revision_experimental> (?P<revision_experimental>
~experimental\.\d+ ~exp\d+
) )
| |
(?P<revision_security>
[~+]deb\d+u\d+
)?
(?P<revision_backports>
~bpo\d+\+\d+
)?
|
(?P<revision_other> (?P<revision_other>
[^-]+ [^-]+
) )
)? )
$ $
""" """
_version_linux_re = re.compile(_version_linux_rules, re.X) _version_linux_re = re.compile(_version_linux_rules, re.X)
@ -151,12 +158,14 @@ $
self.linux_version = d['version'] self.linux_version = d['version']
if d['modifier'] is not None: if d['modifier'] is not None:
assert not d['update'] assert not d['update']
self.linux_upstream = u'-'.join((d['version'], d['modifier'])) self.linux_upstream = '-'.join((d['version'], d['modifier']))
else: else:
self.linux_upstream = d['version'] self.linux_upstream = d['version']
self.linux_upstream_full = self.linux_upstream + (d['update'] or u'') self.linux_upstream_full = self.linux_upstream + d['update']
self.linux_dfsg = d['dfsg'] self.linux_dfsg = d['dfsg']
self.linux_revision_experimental = match.group('revision_experimental') and True self.linux_revision_experimental = match.group('revision_experimental') and True
self.linux_revision_security = match.group('revision_security') and True
self.linux_revision_backports = match.group('revision_backports') and True
self.linux_revision_other = match.group('revision_other') and True self.linux_revision_other = match.group('revision_other') and True
@ -177,8 +186,8 @@ class PackageArchitecture(collections.MutableSet):
def __len__(self): def __len__(self):
return self._data.__len__() return self._data.__len__()
def __unicode__(self): def __str__(self):
return u' '.join(sorted(self)) return ' '.join(sorted(self))
def add(self, value): def add(self, value):
self._data.add(value) self._data.add(value)
@ -187,7 +196,7 @@ class PackageArchitecture(collections.MutableSet):
self._data.discard(value) self._data.discard(value)
def extend(self, value): def extend(self, value):
if isinstance(value, basestring): if isinstance(value, str):
for i in re.split('\s', value.strip()): for i in re.split('\s', value.strip()):
self.add(i) self.add(i)
else: else:
@ -205,14 +214,14 @@ class PackageDescription(object):
self.append(long) self.append(long)
self.append_short(short) self.append_short(short)
def __unicode__(self): def __str__(self):
wrap = utils.TextWrapper(width=74, fix_sentence_endings=True).wrap wrap = utils.TextWrapper(width=74, fix_sentence_endings=True).wrap
short = u', '.join(self.short) short = ', '.join(self.short)
long_pars = [] long_pars = []
for i in self.long: for i in self.long:
long_pars.append(wrap(i)) long_pars.append(wrap(i))
long = u'\n .\n '.join([u'\n '.join(i) for i in long_pars]) long = '\n .\n '.join(['\n '.join(i) for i in long_pars])
return short + u'\n ' + long return short + '\n ' + long
def append(self, str): def append(self, str):
str = str.strip() str = str.strip()
@ -237,8 +246,8 @@ class PackageRelation(list):
if value: if value:
self.extend(value, override_arches) self.extend(value, override_arches)
def __unicode__(self): def __str__(self):
return u', '.join((unicode(i) for i in self)) return ', '.join(str(i) for i in self)
def _search_value(self, value): def _search_value(self, value):
for i in self: for i in self:
@ -247,7 +256,7 @@ class PackageRelation(list):
return None return None
def append(self, value, override_arches=None): def append(self, value, override_arches=None):
if isinstance(value, basestring): if isinstance(value, str):
value = PackageRelationGroup(value, override_arches) value = PackageRelationGroup(value, override_arches)
elif not isinstance(value, PackageRelationGroup): elif not isinstance(value, PackageRelationGroup):
raise ValueError(u"got %s" % type(value)) raise ValueError(u"got %s" % type(value))
@ -258,8 +267,8 @@ class PackageRelation(list):
super(PackageRelation, self).append(value) super(PackageRelation, self).append(value)
def extend(self, value, override_arches=None): def extend(self, value, override_arches=None):
if isinstance(value, basestring): if isinstance(value, str):
value = (j.strip() for j in re.split(u',', value.strip())) value = (j.strip() for j in re.split(',', value.strip()))
for i in value: for i in value:
self.append(i, override_arches) self.append(i, override_arches)
@ -269,31 +278,31 @@ class PackageRelationGroup(list):
if value: if value:
self.extend(value, override_arches) self.extend(value, override_arches)
def __unicode__(self): def __str__(self):
return u' | '.join((unicode(i) for i in self)) return ' | '.join(str(i) for i in self)
def _search_value(self, value): def _search_value(self, value):
for i, j in itertools.izip(self, value): for i, j in zip(self, value):
if i.name != j.name or i.version != j.version: if i.name != j.name or i.version != j.version:
return None return None
return self return self
def _update_arches(self, value): def _update_arches(self, value):
for i, j in itertools.izip(self, value): for i, j in zip(self, value):
if i.arches: if i.arches:
for arch in j.arches: for arch in j.arches:
if arch not in i.arches: if arch not in i.arches:
i.arches.append(arch) i.arches.append(arch)
def append(self, value, override_arches=None): def append(self, value, override_arches=None):
if isinstance(value, basestring): if isinstance(value, str):
value = PackageRelationEntry(value, override_arches) value = PackageRelationEntry(value, override_arches)
elif not isinstance(value, PackageRelationEntry): elif not isinstance(value, PackageRelationEntry):
raise ValueError raise ValueError
super(PackageRelationGroup, self).append(value) super(PackageRelationGroup, self).append(value)
def extend(self, value, override_arches=None): def extend(self, value, override_arches=None):
if isinstance(value, basestring): if isinstance(value, str):
value = (j.strip() for j in re.split('\|', value.strip())) value = (j.strip() for j in re.split('\|', value.strip()))
for i in value: for i in value:
self.append(i, override_arches) self.append(i, override_arches)
@ -313,12 +322,12 @@ class PackageRelationEntry(object):
OP_GT = 6 OP_GT = 6
operators = { operators = {
u'<<': OP_LT, '<<': OP_LT,
u'<=': OP_LE, '<=': OP_LE,
u'=': OP_EQ, '=': OP_EQ,
u'!=': OP_NE, '!=': OP_NE,
u'>=': OP_GE, '>=': OP_GE,
u'>>': OP_GT, '>>': OP_GT,
} }
operators_neg = { operators_neg = {
@ -330,7 +339,7 @@ class PackageRelationEntry(object):
OP_GT: OP_LE, OP_GT: OP_LE,
} }
operators_text = dict([(b, a) for a, b in operators.iteritems()]) operators_text = dict((b, a) for a, b in operators.items())
__slots__ = '_op', __slots__ = '_op',
@ -340,11 +349,11 @@ class PackageRelationEntry(object):
def __neg__(self): def __neg__(self):
return self.__class__(self.operators_text[self.operators_neg[self._op]]) return self.__class__(self.operators_text[self.operators_neg[self._op]])
def __unicode__(self): def __str__(self):
return self.operators_text[self._op] return self.operators_text[self._op]
def __init__(self, value=None, override_arches=None): def __init__(self, value=None, override_arches=None):
if not isinstance(value, basestring): if not isinstance(value, str):
raise ValueError raise ValueError
self.parse(value) self.parse(value)
@ -352,13 +361,13 @@ class PackageRelationEntry(object):
if override_arches: if override_arches:
self.arches = list(override_arches) self.arches = list(override_arches)
def __unicode__(self): def __str__(self):
ret = [self.name] ret = [self.name]
if self.operator is not None and self.version is not None: if self.operator is not None and self.version is not None:
ret.extend((u' (', unicode(self.operator), u' ', self.version, u')')) ret.extend((' (', str(self.operator), ' ', self.version, ')'))
if self.arches: if self.arches:
ret.extend((u' [', u' '.join(self.arches), u']')) ret.extend((' [', ' '.join(self.arches), ']'))
return u''.join(ret) return ''.join(ret)
def parse(self, value): def parse(self, value):
match = self._re.match(value) match = self._re.match(value)
@ -379,14 +388,14 @@ class PackageRelationEntry(object):
class Package(dict): class Package(dict):
_fields = collections.OrderedDict(( _fields = collections.OrderedDict((
('Package', unicode), ('Package', str),
('Source', unicode), ('Source', str),
('Architecture', PackageArchitecture), ('Architecture', PackageArchitecture),
('Section', unicode), ('Section', str),
('Priority', unicode), ('Priority', str),
('Maintainer', unicode), ('Maintainer', str),
('Uploaders', unicode), ('Uploaders', str),
('Standards-Version', unicode), ('Standards-Version', str),
('Build-Depends', PackageRelation), ('Build-Depends', PackageRelation),
('Build-Depends-Indep', PackageRelation), ('Build-Depends-Indep', PackageRelation),
('Provides', PackageRelation), ('Provides', PackageRelation),
@ -411,7 +420,7 @@ class Package(dict):
def iterkeys(self): def iterkeys(self):
keys = set(self.keys()) keys = set(self.keys())
for i in self._fields.iterkeys(): for i in self._fields.keys():
if i in self: if i in self:
keys.remove(i) keys.remove(i)
yield i yield i

View File

@ -29,9 +29,7 @@ class Makefile(object):
self.rules[i] = self.Rule(i) self.rules[i] = self.Rule(i)
def write(self, out): def write(self, out):
r = self.rules.keys() for i in sorted(self.rules.keys()):
r.sort()
for i in r:
self.rules[i].write(out) self.rules[i].write(out)
class Rule(object): class Rule(object):
@ -70,7 +68,7 @@ class MakeFlags(dict):
return "%s(%s)" % (self.__class__.__name__, repr) return "%s(%s)" % (self.__class__.__name__, repr)
def __str__(self): def __str__(self):
return ' '.join(["%s='%s'" % i for i in sorted(self.iteritems())]) return ' '.join("%s='%s'" % i for i in sorted(self.items()))
def copy(self): def copy(self):
return self.__class__(super(MakeFlags, self).copy()) return self.__class__(super(MakeFlags, self).copy())
@ -129,25 +127,21 @@ class Gencontrol(object):
if templates_extra is None: if templates_extra is None:
return return
packages.extend(self.process_packages(templates_extra, {})) packages_extra = self.process_packages(templates_extra, self.vars)
packages.extend(packages_extra)
extra_arches = {} extra_arches = {}
for package in templates_extra: for package in packages_extra:
arches = package['Architecture'] arches = package['Architecture']
for arch in arches: for arch in arches:
i = extra_arches.get(arch, []) i = extra_arches.get(arch, [])
i.append(package) i.append(package)
extra_arches[arch] = i extra_arches[arch] = i
archs = extra_arches.keys() for arch in sorted(extra_arches.keys()):
archs.sort()
for arch in archs:
cmds = [] cmds = []
for i in extra_arches[arch]: for i in extra_arches[arch]:
tmp = [] cmds.append("$(MAKE) -f debian/rules.real install-dummy ARCH='%s' DH_OPTIONS='-p%s'" % (arch, i['Package']))
if 'X-Version-Overwrite-Epoch' in i: makefile.add('binary-arch_%s' % arch, ['binary-arch_%s_extra' % arch])
tmp.append("-v1:%s" % self.version['source']) makefile.add("binary-arch_%s_extra" % arch, cmds = cmds)
cmds.append("$(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-p%s' GENCONTROL_ARGS='%s'" % (i['Package'], ' '.join(tmp)))
makefile.add('binary-arch_%s' % arch['binary-arch_%s_extra' % arch])
makefile.add("binary-arch_%s_extra" % arch, cmds=cmds)
def do_arch(self, packages, makefile, arch, vars, makeflags, extra): def do_arch(self, packages, makefile, arch, vars, makeflags, extra):
vars['arch'] = arch vars['arch'] = arch
@ -280,10 +274,10 @@ class Gencontrol(object):
def subst(match): def subst(match):
return vars[match.group(1)] return vars[match.group(1)]
return re.sub(r'@([-_a-z]+)@', subst, unicode(s)) return re.sub(r'@([-_a-z0-9]+)@', subst, str(s))
def write(self, packages, makefile): def write(self, packages, makefile):
self.write_control(packages.itervalues()) self.write_control(packages.values())
self.write_makefile(makefile) self.write_makefile(makefile)
def write_config(self): def write_config(self):
@ -295,7 +289,7 @@ class Gencontrol(object):
self.write_rfc822(codecs.open("debian/control", 'w', 'utf-8'), list) self.write_rfc822(codecs.open("debian/control", 'w', 'utf-8'), list)
def write_makefile(self, makefile): def write_makefile(self, makefile):
f = file("debian/rules.gen", 'w') f = open("debian/rules.gen", 'w')
makefile.write(f) makefile.write(f)
f.close() f.close()
@ -303,4 +297,4 @@ class Gencontrol(object):
for entry in list: for entry in list:
for key, value in entry.iteritems(): for key, value in entry.iteritems():
f.write(u"%s: %s\n" % (key, value)) f.write(u"%s: %s\n" % (key, value))
f.write(u'\n') f.write('\n')

View File

@ -19,13 +19,14 @@ class Templates(object):
def _read(self, name): def _read(self, name):
prefix, id = name.split('.', 1) prefix, id = name.split('.', 1)
for dir in self.dirs: for suffix in ['.in', '']:
filename = "%s/%s.in" % (dir, name) for dir in self.dirs:
if os.path.exists(filename): filename = "%s/%s%s" % (dir, name, suffix)
f = codecs.open(filename, 'r', 'utf-8') if os.path.exists(filename):
if prefix == 'control': f = codecs.open(filename, 'r', 'utf-8')
return read_control(f) if prefix == 'control':
return f.read() return read_control(f)
return f.read()
def get(self, key, default=None): def get(self, key, default=None):
if key in self._cache: if key in self._cache:
@ -57,11 +58,11 @@ def read_control(f):
break break
if line[0] in ' \t': if line[0] in ' \t':
if not last: if not last:
raise ValueError(u'Continuation line seen before first header') raise ValueError('Continuation line seen before first header')
lines.append(line.lstrip()) lines.append(line.lstrip())
continue continue
if last: if last:
e[last] = u'\n'.join(lines) e[last] = '\n'.join(lines)
i = line.find(':') i = line.find(':')
if i < 0: if i < 0:
raise ValueError(u"Not a header, not a continuation: ``%s''" % line) raise ValueError(u"Not a header, not a continuation: ``%s''" % line)

2
debian/rules vendored
View File

@ -41,7 +41,7 @@ maintainerclean:
clean: debian/control clean: debian/control
dh_testdir dh_testdir
make -C $(BUILD_DIR) clean top_srcdir=$(CURDIR) make -C $(BUILD_DIR) clean top_srcdir=$(CURDIR)
rm -rf $(STAMPS_DIR) debian/lib/python/debian_linux/*.pyc rm -rf $(STAMPS_DIR) debian/lib/python/debian_linux/__pycache__
dh_clean dh_clean
binary-indep: binary-indep:

View File

@ -5,7 +5,7 @@ Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
Uploaders: Bastian Blank <waldi@debian.org>, Ben Hutchings <ben@decadent.org.uk>, Jonathan Nieder <jrnieder@gmail.com> Uploaders: Bastian Blank <waldi@debian.org>, Ben Hutchings <ben@decadent.org.uk>, Jonathan Nieder <jrnieder@gmail.com>
Standards-Version: 3.9.4 Standards-Version: 3.9.4
Build-Depends: Build-Depends:
debhelper (>> 7), python, debhelper (>> 7), python3,
asciidoc, bison, flex, gcc-multilib [amd64 ppc64 s390x sparc64], libaudit-dev, libdw-dev, libelf-dev, libiberty-dev | binutils-dev (<< 2.23.91.20131123-1), libnewt-dev, libnuma-dev [amd64 arm64 hppa i386 mips mips64 mips64el mipsel powerpc powerpcspe ppc64 ppc64el sparc x32], libperl-dev, libunwind8-dev [amd64 armel armhf arm64 i386], python-dev, xmlto, asciidoc, bison, flex, gcc-multilib [amd64 ppc64 s390x sparc64], libaudit-dev, libdw-dev, libelf-dev, libiberty-dev | binutils-dev (<< 2.23.91.20131123-1), libnewt-dev, libnuma-dev [amd64 arm64 hppa i386 mips mips64 mips64el mipsel powerpc powerpcspe ppc64 ppc64el sparc x32], libperl-dev, libunwind8-dev [amd64 armel armhf arm64 i386], python-dev, xmlto,
autoconf, automake, libtool, libglib2.0-dev, libudev-dev, libwrap0-dev, autoconf, automake, libtool, libglib2.0-dev, libudev-dev, libwrap0-dev,
dh-systemd dh-systemd