mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-11 18:41:30 +00:00
optionally merge packages from testing to unstable, to cope with a partial unstable suite
This commit is contained in:
parent
82a1d9f15d
commit
9a714f2213
@ -3,6 +3,7 @@
|
|||||||
# Paths for control files
|
# Paths for control files
|
||||||
TESTING = data/testing
|
TESTING = data/testing
|
||||||
UNSTABLE = data/unstable
|
UNSTABLE = data/unstable
|
||||||
|
PARTIAL_UNSTABLE = yes
|
||||||
|
|
||||||
# Output
|
# Output
|
||||||
NONINST_STATUS = data/non-installable-status
|
NONINST_STATUS = data/non-installable-status
|
||||||
|
70
britney.py
70
britney.py
@ -308,6 +308,8 @@ class Britney(object):
|
|||||||
if 'testing' not in self.sources:
|
if 'testing' not in self.sources:
|
||||||
self.sources['testing'] = self.read_sources(self.options.testing)
|
self.sources['testing'] = self.read_sources(self.options.testing)
|
||||||
self.sources['unstable'] = self.read_sources(self.options.unstable)
|
self.sources['unstable'] = self.read_sources(self.options.unstable)
|
||||||
|
if hasattr(self.options, 'partial_unstable'):
|
||||||
|
self.merge_sources('testing', 'unstable')
|
||||||
if hasattr(self.options, 'tpu'):
|
if hasattr(self.options, 'tpu'):
|
||||||
self.sources['tpu'] = self.read_sources(self.options.tpu)
|
self.sources['tpu'] = self.read_sources(self.options.tpu)
|
||||||
else:
|
else:
|
||||||
@ -328,6 +330,8 @@ class Britney(object):
|
|||||||
if arch not in self.binaries['testing']:
|
if arch not in self.binaries['testing']:
|
||||||
self.binaries['testing'][arch] = self.read_binaries(self.options.testing, "testing", arch)
|
self.binaries['testing'][arch] = self.read_binaries(self.options.testing, "testing", arch)
|
||||||
self.binaries['unstable'][arch] = self.read_binaries(self.options.unstable, "unstable", arch)
|
self.binaries['unstable'][arch] = self.read_binaries(self.options.unstable, "unstable", arch)
|
||||||
|
if hasattr(self.options, 'partial_unstable'):
|
||||||
|
self.merge_binaries('testing', 'unstable', arch)
|
||||||
if hasattr(self.options, 'tpu'):
|
if hasattr(self.options, 'tpu'):
|
||||||
self.binaries['tpu'][arch] = self.read_binaries(self.options.tpu, "tpu", arch)
|
self.binaries['tpu'][arch] = self.read_binaries(self.options.tpu, "tpu", arch)
|
||||||
if hasattr(self.options, 'pu'):
|
if hasattr(self.options, 'pu'):
|
||||||
@ -624,6 +628,72 @@ class Britney(object):
|
|||||||
if not check_doubles or pkg not in packages[i][RCONFLICTS]:
|
if not check_doubles or pkg not in packages[i][RCONFLICTS]:
|
||||||
packages[i][RCONFLICTS].append(pkg)
|
packages[i][RCONFLICTS].append(pkg)
|
||||||
|
|
||||||
|
def merge_sources(self, source, target):
|
||||||
|
"""Merge sources from `source' into partial suite `target'."""
|
||||||
|
source_sources = self.sources[source]
|
||||||
|
target_sources = self.sources[target]
|
||||||
|
for pkg, value in source_sources.items():
|
||||||
|
if pkg in target_sources:
|
||||||
|
continue
|
||||||
|
target_sources[pkg] = value
|
||||||
|
target_sources[pkg][BINARIES] = list(
|
||||||
|
target_sources[pkg][BINARIES])
|
||||||
|
|
||||||
|
def merge_binaries(self, source, target, arch):
|
||||||
|
"""Merge `arch' binaries from `source' into partial suite `target'."""
|
||||||
|
source_sources = self.sources[source]
|
||||||
|
source_binaries, _ = self.binaries[source][arch]
|
||||||
|
target_sources = self.sources[target]
|
||||||
|
target_binaries, target_provides = self.binaries[target][arch]
|
||||||
|
oodsrcs = set()
|
||||||
|
for pkg, value in source_binaries.items():
|
||||||
|
if pkg in target_binaries:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Don't merge binaries rendered stale by new sources in target
|
||||||
|
# that have built on this architecture.
|
||||||
|
if value[SOURCE] not in oodsrcs:
|
||||||
|
source_version = source_sources[value[SOURCE]][VERSION]
|
||||||
|
target_version = target_sources[value[SOURCE]][VERSION]
|
||||||
|
if source_version != target_version:
|
||||||
|
current_arch = value[ARCHITECTURE]
|
||||||
|
built = False
|
||||||
|
for b in target_sources[value[SOURCE]][BINARIES]:
|
||||||
|
binpkg, binarch = b.split('/')
|
||||||
|
if binarch == arch:
|
||||||
|
target_value = target_binaries[binpkg]
|
||||||
|
if current_arch == target_value[ARCHITECTURE]:
|
||||||
|
built = True
|
||||||
|
break
|
||||||
|
if built:
|
||||||
|
continue
|
||||||
|
oodsrcs.add(value[SOURCE])
|
||||||
|
|
||||||
|
if pkg in target_binaries:
|
||||||
|
for p in target_binaries[pkg][PROVIDES]:
|
||||||
|
target_provides[p].remove(pkg)
|
||||||
|
if not target_provides[p]:
|
||||||
|
del target_provides[p]
|
||||||
|
|
||||||
|
target_binaries[pkg] = value
|
||||||
|
|
||||||
|
pkg_arch = pkg + "/" + arch
|
||||||
|
if pkg_arch not in target_sources[value[SOURCE]][BINARIES]:
|
||||||
|
target_sources[value[SOURCE]][BINARIES].append(pkg_arch)
|
||||||
|
|
||||||
|
for p in value[PROVIDES]:
|
||||||
|
if p not in target_provides:
|
||||||
|
target_provides[p] = []
|
||||||
|
target_provides[p].append(pkg)
|
||||||
|
|
||||||
|
for pkg, value in target_binaries.items():
|
||||||
|
value[RDEPENDS] = []
|
||||||
|
value[RCONFLICTS] = []
|
||||||
|
register_reverses = self.register_reverses
|
||||||
|
for pkg in target_binaries:
|
||||||
|
register_reverses(
|
||||||
|
pkg, target_binaries, target_provides, check_doubles=False)
|
||||||
|
|
||||||
def read_bugs(self, basedir):
|
def read_bugs(self, basedir):
|
||||||
"""Read the release critial bug summary from the specified directory
|
"""Read the release critial bug summary from the specified directory
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user