Fix typoes and grammar

Signed-off-by: Adam D. Barratt <adam@adam-barratt.org.uk>
bzr-import-20160707
Adam D. Barratt 15 years ago
parent 54b3a81ddb
commit 4557c21e53

@ -25,7 +25,7 @@ they have undergone some degree of testing in unstable. The goal of
this software is to do this task in a smart way, allowing testing this software is to do this task in a smart way, allowing testing
to be always fully installable and close to being a release candidate. to be always fully installable and close to being a release candidate.
Britney source code is splitted in two different but related tasks: Britney's source code is split between two different but related tasks:
the first one is the generation of the update excuses, while the the first one is the generation of the update excuses, while the
second tries to update testing with the valid candidates; first second tries to update testing with the valid candidates; first
each package alone, then larger and even larger sets of packages each package alone, then larger and even larger sets of packages
@ -36,14 +36,14 @@ after the update than before.
In order to analyze the entire Debian distribution, Britney needs to In order to analyze the entire Debian distribution, Britney needs to
load in memory the whole archive: this means more than 10.000 packages load in memory the whole archive: this means more than 10.000 packages
for twelve architectures, as well as the dependency interconnection for twelve architectures, as well as the dependency interconnections
between them. For this reason, the memory requirement for running this between them. For this reason, the memory requirements for running this
software are quite high and at least 1 gigabyte of RAM should be available. software are quite high and at least 1 gigabyte of RAM should be available.
Britney loads the source packages from the `Sources' file and the binary Britney loads the source packages from the `Sources' file and the binary
packages from the `Packages_${arch}' files, where ${arch} is substituted packages from the `Packages_${arch}' files, where ${arch} is substituted
with the supported architectures. While loading the data, the software with the supported architectures. While loading the data, the software
analyze the dependencies and build a directed weighted graph in memory analyzes the dependencies and builds a directed weighted graph in memory
with all the interconnections between the packages (see Britney.read_sources with all the interconnections between the packages (see Britney.read_sources
and Britney.read_binaries). and Britney.read_binaries).
@ -93,12 +93,12 @@ does for the generation of the update excuses.
1. If there is a `remove' hint for the source package, the package 1. If there is a `remove' hint for the source package, the package
is ignored: it will be removed and not updated. is ignored: it will be removed and not updated.
2. For every binary package build from the new source, it checks 2. For every binary package built from the new source, it checks
for unsatisfied dependencies, new binary package and updated for unsatisfied dependencies, new binary package and updated
binary package (binNMU) excluding the architecture-independent binary package (binNMU) excluding the architecture-independent
ones and the packages not built from the same source. ones and the packages not built from the same source.
3. For every binary package build from the old source, it checks 3. For every binary package built from the old source, it checks
if it is still built from the new source; if this is not true if it is still built from the new source; if this is not true
and the package is not architecture-independent, the script and the package is not architecture-independent, the script
removes it from testing. removes it from testing.
@ -133,7 +133,7 @@ does for the generation of the update excuses.
a subsequent `unblock-udeb' hint. a subsequent `unblock-udeb' hint.
7. If the suite is unstable, the update can go ahead only if the 7. If the suite is unstable, the update can go ahead only if the
upload happend more then the minimum days specified by the upload happened more than the minimum days specified by the
urgency of the upload; if this is not true, the package is urgency of the upload; if this is not true, the package is
ignored as `too-young'. Note that the urgency is sticky, meaning ignored as `too-young'. Note that the urgency is sticky, meaning
that the highest urgency uploaded since the previous testing that the highest urgency uploaded since the previous testing
@ -214,12 +214,12 @@ RCONFLICTS = 10
class Britney: class Britney:
"""Britney, the debian testing updater script """Britney, the Debian testing updater script
This is the script that updates the testing_ distribution. It is executed This is the script that updates the testing distribution. It is executed
each day after the installation of the updated packages. It generates the each day after the installation of the updated packages. It generates the
`Packages' files for the testing distribution, but it does so in an `Packages' files for the testing distribution, but it does so in an
intelligent manner; it try to avoid any inconsistency and to use only intelligent manner; it tries to avoid any inconsistency and to use only
non-buggy packages. non-buggy packages.
For more documentation on this script, please read the Developers Reference. For more documentation on this script, please read the Developers Reference.
@ -366,7 +366,7 @@ class Britney:
An easy-and-simple log method which prints messages to the standard An easy-and-simple log method which prints messages to the standard
output. The type parameter controls the urgency of the message, and output. The type parameter controls the urgency of the message, and
can be equal to `I' for `Information', `W' for `Warning' and `E' for can be equal to `I' for `Information', `W' for `Warning' and `E' for
`Error'. Warnings and errors are always printed, and information are `Error'. Warnings and errors are always printed, and information is
printed only if the verbose logging is enabled. printed only if the verbose logging is enabled.
""" """
if self.options.verbose or type in ("E", "W"): if self.options.verbose or type in ("E", "W"):
@ -442,7 +442,7 @@ class Britney:
The method returns a tuple. The first element is a list where The method returns a tuple. The first element is a list where
every item represents a binary package as a dictionary; the second every item represents a binary package as a dictionary; the second
element is a dictionary which maps virtual packages to real element is a dictionary which maps virtual packages to real
packages that provide it. packages that provide them.
""" """
packages = {} packages = {}
@ -542,7 +542,7 @@ class Britney:
# register real packages # register real packages
if a[0] in packages and (not check_doubles or pkg not in packages[a[0]][RDEPENDS]): if a[0] in packages and (not check_doubles or pkg not in packages[a[0]][RDEPENDS]):
packages[a[0]][RDEPENDS].append(pkg) packages[a[0]][RDEPENDS].append(pkg)
# register packages which provides a virtual package # register packages which provide a virtual package
elif a[0] in provides: elif a[0] in provides:
for i in provides.get(a[0]): for i in provides.get(a[0]):
if i not in packages: continue if i not in packages: continue
@ -705,7 +705,7 @@ class Britney:
l = line.split() l = line.split()
if len(l) != 3: continue if len(l) != 3: continue
# read the minimum days associated to the urgencies # read the minimum days associated with the urgencies
urgency_old = urgencies.get(l[0], self.options.default_urgency) urgency_old = urgencies.get(l[0], self.options.default_urgency)
mindays_old = self.MINDAYS.get(urgency_old, self.MINDAYS[self.options.default_urgency]) mindays_old = self.MINDAYS.get(urgency_old, self.MINDAYS[self.options.default_urgency])
mindays_new = self.MINDAYS.get(l[2], self.MINDAYS[self.options.default_urgency]) mindays_new = self.MINDAYS.get(l[2], self.MINDAYS[self.options.default_urgency])
@ -732,9 +732,9 @@ class Britney:
def read_hints(self, basedir): def read_hints(self, basedir):
"""Read the hint commands from the specified directory """Read the hint commands from the specified directory
The hint commands are read from the files contained by the `Hints' The hint commands are read from the files contained in the `Hints'
directory within the directory specified as `basedir' parameter. directory within the directory specified as `basedir' parameter.
The name of the files has to be the same of the authorized users The names of the files have to be the same as the authorized users
for the hints. for the hints.
The file contains rows with the format: The file contains rows with the format:
@ -824,7 +824,7 @@ class Britney:
def write_controlfiles(self, basedir, suite): def write_controlfiles(self, basedir, suite):
"""Write the control files """Write the control files
This method write the control files for the binary packages of all This method writes the control files for the binary packages of all
the architectures and for the source packages. the architectures and for the source packages.
""" """
sources = self.sources[suite] sources = self.sources[suite]
@ -992,7 +992,7 @@ class Britney:
packages = [self.binaries[suite][arch][0][p][SOURCE] for p in packages] packages = [self.binaries[suite][arch][0][p][SOURCE] for p in packages]
# if the dependency can be satisfied by the same source package, skip the block: # if the dependency can be satisfied by the same source package, skip the block:
# obviously both binary packages will enter testing togheter # obviously both binary packages will enter testing together
if src in packages: continue if src in packages: continue
# if no package can satisfy the dependency, add this information to the excuse # if no package can satisfy the dependency, add this information to the excuse
@ -1011,21 +1011,21 @@ class Britney:
return True return True
# Package analisys methods # Package analysis methods
# ------------------------ # ------------------------
def should_remove_source(self, pkg): def should_remove_source(self, pkg):
"""Check if a source package should be removed from testing """Check if a source package should be removed from testing
This method checks if a source package should be removed from the This method checks if a source package should be removed from the
testing distribution; this happen if the source package is not testing distribution; this happens if the source package is not
present in the unstable distribution anymore. present in the unstable distribution anymore.
It returns True if the package can be removed, False otherwise. It returns True if the package can be removed, False otherwise.
In the former case, a new excuse is appended to the the object In the former case, a new excuse is appended to the the object
attribute excuses. attribute excuses.
""" """
# if the soruce package is available in unstable, then do nothing # if the source package is available in unstable, then do nothing
if pkg in self.sources['unstable']: if pkg in self.sources['unstable']:
return False return False
# otherwise, add a new excuse for its removal and return True # otherwise, add a new excuse for its removal and return True
@ -1048,11 +1048,11 @@ class Britney:
return True return True
def should_upgrade_srcarch(self, src, arch, suite): def should_upgrade_srcarch(self, src, arch, suite):
"""Check if binary package should be upgraded """Check if a binary package should be upgraded
This method checks if a binary package should be upgraded; this can This method checks if a binary package should be upgraded; this can
happen also if the binary package is a binary-NMU for the given arch. happen also if the binary package is a binary-NMU for the given arch.
The analisys is performed for the source package specified by the The analysis is performed for the source package specified by the
`src' parameter, checking the architecture `arch' for the distribution `src' parameter, checking the architecture `arch' for the distribution
`suite'. `suite'.
@ -1071,7 +1071,7 @@ class Britney:
source_u[MAINTAINER] and excuse.set_maint(source_u[MAINTAINER].strip()) source_u[MAINTAINER] and excuse.set_maint(source_u[MAINTAINER].strip())
source_u[SECTION] and excuse.set_section(source_u[SECTION].strip()) source_u[SECTION] and excuse.set_section(source_u[SECTION].strip())
# if there is a `remove' hint and the requested version is the same of the # if there is a `remove' hint and the requested version is the same as the
# version in testing, then stop here and return False # version in testing, then stop here and return False
if src in self.hints["remove"] and \ if src in self.hints["remove"] and \
self.same_source(source_t[VERSION], self.hints["remove"][src][0]): self.same_source(source_t[VERSION], self.hints["remove"][src][0]):
@ -1132,7 +1132,7 @@ class Britney:
anyworthdoing = True anyworthdoing = True
# if there is nothing wrong and there is something worth doing or the source # if there is nothing wrong and there is something worth doing or the source
# package is not fake, then check what packages shuold be removed # package is not fake, then check what packages should be removed
if not anywrongver and (anyworthdoing or not self.sources[suite][src][FAKESRC]): if not anywrongver and (anyworthdoing or not self.sources[suite][src][FAKESRC]):
srcv = self.sources[suite][src][VERSION] srcv = self.sources[suite][src][VERSION]
ssrc = self.same_source(source_t[VERSION], srcv) ssrc = self.same_source(source_t[VERSION], srcv)
@ -1148,7 +1148,7 @@ class Britney:
excuse.addhtml("Removed binary: %s %s" % (pkg, tpkgv)) excuse.addhtml("Removed binary: %s %s" % (pkg, tpkgv))
if ssrc: anyworthdoing = True if ssrc: anyworthdoing = True
# if there is nothing wrong and there is something worth doing, this is valid candidate # if there is nothing wrong and there is something worth doing, this is a valid candidate
if not anywrongver and anyworthdoing: if not anywrongver and anyworthdoing:
excuse.addhtml("Valid candidate") excuse.addhtml("Valid candidate")
self.excuses.append(excuse) self.excuses.append(excuse)
@ -1164,7 +1164,7 @@ class Britney:
def should_upgrade_src(self, src, suite): def should_upgrade_src(self, src, suite):
"""Check if source package should be upgraded """Check if source package should be upgraded
This method checks if a source package should be upgraded. The analisys This method checks if a source package should be upgraded. The analysis
is performed for the source package specified by the `src' parameter, is performed for the source package specified by the `src' parameter,
checking the architecture `arch' for the distribution `suite'. checking the architecture `arch' for the distribution `suite'.
@ -1210,7 +1210,7 @@ class Britney:
excuse.addhtml("Ignoring %s urgency setting for NEW package" % (urgency)) excuse.addhtml("Ignoring %s urgency setting for NEW package" % (urgency))
urgency = self.options.default_urgency urgency = self.options.default_urgency
# if there is a `remove' hint and the requested version is the same of the # if there is a `remove' hint and the requested version is the same as the
# version in testing, then stop here and return False # version in testing, then stop here and return False
if src in self.hints["remove"]: if src in self.hints["remove"]:
if source_t and self.same_source(source_t[VERSION], self.hints['remove'][src][0]) or \ if source_t and self.same_source(source_t[VERSION], self.hints['remove'][src][0]) or \
@ -1273,7 +1273,7 @@ class Britney:
else: else:
update_candidate = False update_candidate = False
# at this point, we check what is the status of the builds on all the supported architectures # at this point, we check the status of the builds on all the supported architectures
# to catch the out-of-date ones # to catch the out-of-date ones
pkgs = {src: ["source"]} pkgs = {src: ["source"]}
for arch in self.options.architectures: for arch in self.options.architectures:
@ -1417,7 +1417,7 @@ class Britney:
if invalid[i] not in revdeps: if invalid[i] not in revdeps:
i += 1 i += 1
continue continue
# if there dependency can be satisfied by a testing-proposed-updates excuse, skip the item # if the dependency can be satisfied by a testing-proposed-updates excuse, skip the item
if (invalid[i] + "_tpu") in valid: if (invalid[i] + "_tpu") in valid:
i += 1 i += 1
continue continue
@ -1441,7 +1441,7 @@ class Britney:
"""Produce and write the update excuses """Produce and write the update excuses
This method handles the update excuses generation: the packages are This method handles the update excuses generation: the packages are
looked to determine whether they are valid candidates. For the details looked at to determine whether they are valid candidates. For the details
of this procedure, please refer to the module docstring. of this procedure, please refer to the module docstring.
""" """
@ -1496,7 +1496,7 @@ class Britney:
if ("-"+src) in upgrade_me: continue if ("-"+src) in upgrade_me: continue
if src not in sources['testing']: continue if src not in sources['testing']: continue
# check if the version specified in the hint is the same of the considered package # check if the version specified in the hint is the same as the considered package
tsrcv = sources['testing'][src][VERSION] tsrcv = sources['testing'][src][VERSION]
if not self.same_source(tsrcv, self.hints["remove"][src][0]): continue if not self.same_source(tsrcv, self.hints["remove"][src][0]): continue
@ -1546,7 +1546,7 @@ class Britney:
def newlyuninst(self, nuold, nunew): def newlyuninst(self, nuold, nunew):
"""Return a nuninst statstic with only new uninstallable packages """Return a nuninst statstic with only new uninstallable packages
This method subtract the uninstallabla packages of the statistic This method subtracts the uninstallable packages of the statistic
`nunew` from the statistic `nuold`. `nunew` from the statistic `nuold`.
It returns a dictionary with the architectures as keys and the list It returns a dictionary with the architectures as keys and the list
@ -1563,8 +1563,8 @@ class Britney:
To calculate the uninstallability counters, the method checks the To calculate the uninstallability counters, the method checks the
installability of all the packages for all the architectures, and installability of all the packages for all the architectures, and
tracking dependencies in a recursive way. The architecture tracks dependencies in a recursive way. The architecture
indipendent packages are checked only for the `nobreakall` independent packages are checked only for the `nobreakall`
architectures. architectures.
It returns a dictionary with the architectures as keys and the list It returns a dictionary with the architectures as keys and the list
@ -1576,14 +1576,14 @@ class Britney:
nuninst = {} nuninst = {}
# local copies for better performances # local copies for better performance
binaries = self.binaries['testing'] binaries = self.binaries['testing']
systems = self.systems systems = self.systems
# for all the architectures # for all the architectures
for arch in self.options.architectures: for arch in self.options.architectures:
if requested_arch and arch != requested_arch: continue if requested_arch and arch != requested_arch: continue
# if it is in the nobreakall ones, check arch-indipendent packages too # if it is in the nobreakall ones, check arch-independent packages too
if arch not in self.options.nobreakall_arches.split(): if arch not in self.options.nobreakall_arches.split():
skip_archall = True skip_archall = True
else: skip_archall = False else: skip_archall = False
@ -1596,7 +1596,7 @@ class Britney:
if not r: if not r:
nuninst[arch].add(pkg_name) nuninst[arch].add(pkg_name)
# if they are not required, removed architecture-indipendent packages # if they are not required, remove architecture-independent packages
nuninst[arch + "+all"] = nuninst[arch].copy() nuninst[arch + "+all"] = nuninst[arch].copy()
if skip_archall: if skip_archall:
for pkg in nuninst[arch + "+all"]: for pkg in nuninst[arch + "+all"]:
@ -1786,7 +1786,7 @@ class Britney:
# If a conflict is detected, it tries to handle it calling the handle_conflict # If a conflict is detected, it tries to handle it calling the handle_conflict
# method; if it can't be resolved, then it returns False. # method; if it can't be resolved, then it returns False.
def satisfy(pkg, pkg_alt=None, pkg_from=None, system=system, conflicts=conflicts, excluded=[]): def satisfy(pkg, pkg_alt=None, pkg_from=None, system=system, conflicts=conflicts, excluded=[]):
# if it is real package and it is already installed, skip it and return True # if it is a real package and it is already installed, skip it and return True
if pkg in binaries[0]: if pkg in binaries[0]:
if pkg in system: if pkg in system:
if type(pkg_from) == list: if type(pkg_from) == list:
@ -1856,7 +1856,7 @@ class Britney:
if conflicting in binary_u[PROVIDES] and system[conflicting][1] == [pkg]: continue if conflicting in binary_u[PROVIDES] and system[conflicting][1] == [pkg]: continue
if op == '' and version == '' or check_depends(binary_u[VERSION], op, version): if op == '' and version == '' or check_depends(binary_u[VERSION], op, version):
# if conflict is found, check if it can be solved removing # if conflict is found, check if it can be solved removing
# already-installed packages without broking the system; if # already-installed packages without breaking the system; if
# this is not possible, give up and return False # this is not possible, give up and return False
output = handle_conflict(pkg, conflicting, system.copy(), conflicts.copy()) output = handle_conflict(pkg, conflicting, system.copy(), conflicts.copy())
if output: if output:
@ -1878,7 +1878,7 @@ class Britney:
else: binary_c = None else: binary_c = None
if op == '' and version == '' or binary_c and check_depends(binary_c[VERSION], op, version): if op == '' and version == '' or binary_c and check_depends(binary_c[VERSION], op, version):
# if conflict is found, check if it can be solved removing # if conflict is found, check if it can be solved removing
# already-installed packages without broking the system; if # already-installed packages without breaking the system; if
# this is not possible, give up and return False # this is not possible, give up and return False
output = handle_conflict(pkg, name, system.copy(), conflicts.copy()) output = handle_conflict(pkg, name, system.copy(), conflicts.copy())
if output: if output:
@ -1887,7 +1887,7 @@ class Britney:
del system[pkg] del system[pkg]
unregister_conflicts(pkg, conflicts) unregister_conflicts(pkg, conflicts)
return False return False
# register the conflict) # register the conflict
if block[0] not in conflicts: if block[0] not in conflicts:
conflicts[block[0]] = [] conflicts[block[0]] = []
conflicts[block[0]].append((name, version, op, pkg)) conflicts[block[0]].append((name, version, op, pkg))
@ -1928,7 +1928,7 @@ class Britney:
def doop_source(self, pkg): def doop_source(self, pkg):
"""Apply a change to the testing distribution as requested by `pkg` """Apply a change to the testing distribution as requested by `pkg`
This method apply the changes required by the action `pkg` tracking This method applies the changes required by the action `pkg` tracking
them so it will be possible to revert them. them so it will be possible to revert them.
The method returns a list of the package name, the suite where the The method returns a list of the package name, the suite where the
@ -2093,8 +2093,8 @@ class Britney:
def iter_packages(self, packages, selected, hint=False, nuninst=None): def iter_packages(self, packages, selected, hint=False, nuninst=None):
"""Iter on the list of actions and apply them one-by-one """Iter on the list of actions and apply them one-by-one
This method apply the changes from `packages` to testing, checking the uninstallability This method applies the changes from `packages` to testing, checking the uninstallability
counters for every action performed. If the action do not improve the it, it is reverted. counters for every action performed. If the action does not improve them, it is reverted.
The method returns the new uninstallability counters and the remaining actions if the The method returns the new uninstallability counters and the remaining actions if the
final result is successful, otherwise (None, None). final result is successful, otherwise (None, None).
""" """
@ -2109,7 +2109,7 @@ class Britney:
else: else:
nuninst_comp = self.nuninst_orig.copy() nuninst_comp = self.nuninst_orig.copy()
# local copies for better performances # local copies for better performance
binaries = self.binaries['testing'] binaries = self.binaries['testing']
sources = self.sources sources = self.sources
systems = self.systems systems = self.systems
@ -2517,7 +2517,7 @@ class Britney:
def hint_tester(self): def hint_tester(self):
"""Run a command line interface to test hints """Run a command line interface to test hints
This methods provides a command line interface for the release team to This method provides a command line interface for the release team to
try hints and evaulate the results. try hints and evaulate the results.
""" """
self.__log("> Calculating current uninstallability counters", type="I") self.__log("> Calculating current uninstallability counters", type="I")
@ -2555,7 +2555,7 @@ class Britney:
"""Process hints """Process hints
This method process `easy`, `hint` and `force-hint` hints. If the This method process `easy`, `hint` and `force-hint` hints. If the
requested version is not in unstable, than the hint is skipped. requested version is not in unstable, then the hint is skipped.
""" """
hintinfo = {"easy": "easy", hintinfo = {"easy": "easy",
"hint": 0, "hint": 0,
@ -2598,8 +2598,8 @@ class Britney:
def sort_actions(self): def sort_actions(self):
"""Sort actions in a smart way """Sort actions in a smart way
This method sorts the list of actions in a smart way. In details, it uses This method sorts the list of actions in a smart way. In detail, it uses
as base sort the number of days the excuse is old, then reordering packages as the base sort the number of days the excuse is old, then reorders packages
so the ones with most reverse dependencies are at the end of the loop. so the ones with most reverse dependencies are at the end of the loop.
If an action depends on another one, it is put after it. If an action depends on another one, it is put after it.
""" """
@ -2670,7 +2670,7 @@ class Britney:
def old_libraries(self): def old_libraries(self):
"""Detect old libraries left in testing for smooth transitions """Detect old libraries left in testing for smooth transitions
This method detect old libraries which are in testing but no longer This method detects old libraries which are in testing but no longer
built from the source package: they are still there because other built from the source package: they are still there because other
packages still depend on them, but they should be removed as soon packages still depend on them, but they should be removed as soon
as possible. as possible.

Loading…
Cancel
Save