mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 03:50:24 +09:00
* Install debian/lib into headers-all package.
* Unlink version file before writing to them.
* debian/README: Remove outdated information.
r5275: waldi | 2006-01-05 14:00:15 +0100
* debian/lib/python/debian_linux/debian.py: Move package class from utils.
* debian/lib/python/debian_linux/utils.py: Use package class from debian.
r5277: waldi | 2006-01-05 14:41:45 +0100
* debian/lib/python/debian_linux/debian.py
- Add package_relation, package_relation_list and package_relation_group
classes.
- Use them in the package class.
* debian/lib/python/debian_linux/gencontrol.py
- Support new relation classes.
r5278: waldi | 2006-01-05 14:46:55 +0100
debian/bin/gencontrol.py: Use relation objects for tree entry.
r5279: waldi | 2006-01-05 15:20:00 +0100
* debian/bin/gencontrol.py: Don't fail if some relation fields are empty.
* debian/lib/python/debian_linux/debian.py: Merge relation entries.
r5280: waldi | 2006-01-05 15:24:08 +0100
* debian/arch/defines, debian/arch/hppa/defines: Set relations for compiler.
* debian/lib/python/debian_linux/gencontrol.py: Set compiler build dependencies
from config informations.
* debian/templates/control.source.in: Remove compiler from Build-Depends.
r5281: waldi | 2006-01-05 15:39:45 +0100
* debian/rules.real
- Install debian/lib into headers-all package.
- Call dh_python with python version 2.4.
* debian/templates/control.source.in:
Add python to build-depends, needed by dh_python.
r5282: waldi | 2006-01-05 16:36:33 +0100
debian/rules.real
- Remove outdated comment about include_common_config.
- Remove support for headers_dirs.
r5283: waldi | 2006-01-05 16:38:05 +0100
debian/arch/amd64/Makefile.inc, debian/arch/arm/Makefile.inc,
debian/arch/hppa/Makefile.inc, debian/arch/powerpc/Makefile.inc,
debian/arch/sparc/Makefile.inc: Remove not longer supported variables.
r5284: waldi | 2006-01-05 16:42:33 +0100
debian/lib/python/debian_linux/gencontrol.py:
Warn if the class setting is not available.
r5287: waldi | 2006-01-05 19:07:05 +0100
debian/arch/powerpc/defines: Set kernel-arch for all except powerpc64 to ppc.
r5288: waldi | 2006-01-05 19:08:35 +0100
debian/lib/python/debian_linux/config.py:
Only bail out if a section is not found in any config file.
r5294: waldi | 2006-01-05 19:26:57 +0100
debian/lib/python/debian_linux/gencontrol.py
- Support config underlay.
- Add some small default implementations.
r5295: waldi | 2006-01-05 19:39:55 +0100
debian/README: Remove outdated information.
r5325: waldi | 2006-01-06 22:40:17 +0100
debian/bin/apply.py
- Don't reference the debian_linux module, it is not available.
- Unlink version file before writing to them.
svn path=/dists/trunk/linux-2.6/; revision=5327
210 lines
5.6 KiB
Python
210 lines
5.6 KiB
Python
import itertools, re, utils
|
|
|
|
def read_changelog():
|
|
r = re.compile(r"""
|
|
^
|
|
(
|
|
(?P<header>
|
|
(?P<header_source>
|
|
\w[-+0-9a-z.]+
|
|
)
|
|
\
|
|
\(
|
|
(?P<header_version>
|
|
[^\(\)\ \t]+
|
|
)
|
|
\)
|
|
\s+
|
|
(?P<header_distribution>
|
|
[-0-9a-zA-Z]+
|
|
)
|
|
\;
|
|
)
|
|
)
|
|
""", re.VERBOSE)
|
|
f = file("debian/changelog")
|
|
entries = []
|
|
act_upstream = None
|
|
while True:
|
|
line = f.readline()
|
|
if not line:
|
|
break
|
|
line = line.strip('\n')
|
|
match = r.match(line)
|
|
if not match:
|
|
continue
|
|
if match.group('header'):
|
|
e = {}
|
|
e['Distribution'] = match.group('header_distribution')
|
|
e['Source'] = match.group('header_source')
|
|
version = parse_version(match.group('header_version'))
|
|
e['Version'] = version
|
|
if act_upstream is None:
|
|
act_upstream = version['upstream']
|
|
elif version['upstream'] != act_upstream:
|
|
break
|
|
entries.append(e)
|
|
return entries
|
|
|
|
def parse_version(version):
|
|
version_re = ur"""
|
|
^
|
|
(?P<source>
|
|
(?P<parent>
|
|
\d+\.\d+\.\d+\+
|
|
)?
|
|
(?P<upstream>
|
|
(?P<version>
|
|
(?P<major>\d+\.\d+)
|
|
\.
|
|
\d+
|
|
)
|
|
(?:
|
|
-
|
|
(?P<modifier>
|
|
.+?
|
|
)
|
|
)?
|
|
)
|
|
-
|
|
(?P<debian>[^-]+)
|
|
)
|
|
$
|
|
"""
|
|
match = re.match(version_re, version, re.X)
|
|
if match is None:
|
|
raise ValueError
|
|
ret = match.groupdict()
|
|
if ret['parent'] is not None:
|
|
ret['source_upstream'] = ret['parent'] + ret['upstream']
|
|
else:
|
|
ret['source_upstream'] = ret['upstream']
|
|
return ret
|
|
|
|
class package_relation(object):
|
|
__slots__ = "name", "version", "arches"
|
|
|
|
_re = re.compile(r'^(\S+)(?: \(([^)]+)\))?(?: \[([^]]+)\])?$')
|
|
|
|
def __init__(self, value = None):
|
|
if value is not None:
|
|
match = self._re.match(value)
|
|
if match is None:
|
|
raise RuntimeError, "Can't parse dependency %s" % value
|
|
match = match.groups()
|
|
self.name = match[0]
|
|
self.version = match[1]
|
|
if match[2] is not None:
|
|
self.arches = re.split('\s+', match[2])
|
|
else:
|
|
self.arches = []
|
|
else:
|
|
self.name = None
|
|
self.version = None
|
|
self.arches = []
|
|
|
|
def __str__(self):
|
|
ret = [self.name]
|
|
if self.version is not None:
|
|
ret.extend([' (', self.version, ')'])
|
|
if self.arches:
|
|
ret.extend([' [', ' '.join(self.arches), ']'])
|
|
return ''.join(ret)
|
|
|
|
class package_relation_list(list):
|
|
def __init__(self, value = None):
|
|
if isinstance(value, (list, tuple)):
|
|
self.extend(value)
|
|
elif value is not None:
|
|
self.extend(value)
|
|
|
|
def __str__(self):
|
|
return ', '.join([str(i) for i in self])
|
|
|
|
def _match(self, value):
|
|
for i in self:
|
|
if i._match(value):
|
|
return i
|
|
return None
|
|
|
|
def extend(self, value):
|
|
if isinstance(value, basestring):
|
|
value = [package_relation_group(j.strip()) for j in re.split(',', value.strip())]
|
|
for i in value:
|
|
if isinstance(i, basestring):
|
|
i = package_relation_group(i)
|
|
j = self._match(i)
|
|
if j:
|
|
j._update_arches(i)
|
|
else:
|
|
self.append(i)
|
|
|
|
class package_relation_group(list):
|
|
def __init__(self, value = None):
|
|
if isinstance(value, package_relation_list):
|
|
self.extend(value)
|
|
elif value is not None:
|
|
self._extend(value)
|
|
|
|
def __str__(self):
|
|
return ' | '.join([str(i) for i in self])
|
|
|
|
def _extend(self, value):
|
|
self.extend([package_relation(j.strip()) for j in re.split('\|', value.strip())])
|
|
|
|
def _match(self, value):
|
|
for i, j in itertools.izip(self, value):
|
|
if i.name != j.name or i.version != j.version:
|
|
return None
|
|
return self
|
|
|
|
def _update_arches(self, value):
|
|
for i, j in itertools.izip(self, value):
|
|
if i.arches:
|
|
for arch in j.arches:
|
|
if arch not in i.arches:
|
|
i.arches.append(arch)
|
|
|
|
class package(dict):
|
|
_fields = utils.sorted_dict((
|
|
('Package', str),
|
|
('Source', str),
|
|
('Architecture', utils.field_list),
|
|
('Section', str),
|
|
('Priority', str),
|
|
('Maintainer', str),
|
|
('Uploaders', str),
|
|
('Standards-Version', str),
|
|
('Build-Depends', package_relation_list),
|
|
('Build-Depends-Indep', package_relation_list),
|
|
('Provides', package_relation_list),
|
|
('Depends', package_relation_list),
|
|
('Recommends', package_relation_list),
|
|
('Suggests', package_relation_list),
|
|
('Replaces', package_relation_list),
|
|
('Conflicts', package_relation_list),
|
|
('Description', utils.field_string),
|
|
))
|
|
|
|
def __setitem__(self, key, value):
|
|
try:
|
|
value = self._fields[key](value)
|
|
except KeyError: pass
|
|
super(package, self).__setitem__(key, value)
|
|
|
|
def iterkeys(self):
|
|
for i in self._fields.iterkeys():
|
|
if self.has_key(i) and self[i]:
|
|
yield i
|
|
|
|
def iteritems(self):
|
|
for i in self._fields.iterkeys():
|
|
if self.has_key(i) and self[i]:
|
|
yield (i, self[i])
|
|
|
|
def itervalues(self):
|
|
for i in self._fields.iterkeys():
|
|
if self.has_key(i) and self[i]:
|
|
yield self[i]
|
|
|