Migrate to python-apt 0.7.100 API

Refreshed original patch and added some minor clean up.

Signed-off-by: Niels Thykier <niels@thykier.net>
Closes: #645818
master
Mehdi Dogguy 13 years ago committed by Niels Thykier
parent a717404f0d
commit cabb9deec0

@ -418,14 +418,11 @@ class Britney:
sources = {} sources = {}
filename = os.path.join(basedir, "Sources") filename = os.path.join(basedir, "Sources")
self.__log("Loading source packages from %s" % filename) self.__log("Loading source packages from %s" % filename)
try:
Packages = apt_pkg.TagFile(open(filename)) Packages = apt_pkg.TagFile(open(filename))
get_field = Packages.section.get get_field = Packages.section.get
step = Packages.step step = Packages.step
except AttributeError:
Packages = apt_pkg.ParseTagFile(open(filename))
get_field = Packages.Section.get
step = Packages.Step
while step(): while step():
pkg = get_field('Package') pkg = get_field('Package')
ver = get_field('Version') ver = get_field('Version')
@ -433,7 +430,7 @@ class Britney:
# (in unstable) if some architectures have out-of-date # (in unstable) if some architectures have out-of-date
# binaries. We only ever consider the source with the # binaries. We only ever consider the source with the
# largest version for migration. # largest version for migration.
if pkg in sources and apt_pkg.VersionCompare(sources[pkg][0], ver) > 0: if pkg in sources and apt_pkg.version_compare(sources[pkg][0], ver) > 0:
continue continue
sources[pkg] = [ver, sources[pkg] = [ver,
get_field('Section'), get_field('Section'),
@ -473,14 +470,11 @@ class Britney:
filename = os.path.join(basedir, "Packages_%s" % arch) filename = os.path.join(basedir, "Packages_%s" % arch)
self.__log("Loading binary packages from %s" % filename) self.__log("Loading binary packages from %s" % filename)
try:
Packages = apt_pkg.TagFile(open(filename)) Packages = apt_pkg.TagFile(open(filename))
get_field = Packages.section.get get_field = Packages.section.get
step = Packages.step step = Packages.step
except AttributeError:
Packages = apt_pkg.ParseTagFile(open(filename))
get_field = Packages.Section.get
step = Packages.Step
while step(): while step():
pkg = get_field('Package') pkg = get_field('Package')
version = get_field('Version') version = get_field('Version')
@ -489,7 +483,7 @@ class Britney:
# (in unstable) if some architectures have out-of-date # (in unstable) if some architectures have out-of-date
# binaries. We only ever consider the package with the # binaries. We only ever consider the package with the
# largest version for migration. # largest version for migration.
if pkg in packages and apt_pkg.VersionCompare(packages[pkg][0], version) > 0: if pkg in packages and apt_pkg.version_compare(packages[pkg][0], version) > 0:
continue continue
final_conflicts_list = [] final_conflicts_list = []
@ -547,7 +541,7 @@ class Britney:
# return a tuple with the list of real and virtual packages # return a tuple with the list of real and virtual packages
return (packages, provides) return (packages, provides)
def register_reverses(self, pkg, packages, provides, check_doubles=True, parse_depends=apt_pkg.ParseDepends): def register_reverses(self, pkg, packages, provides, check_doubles=True, parse_depends=apt_pkg.parse_depends):
"""Register reverse dependencies and conflicts for the specified package """Register reverse dependencies and conflicts for the specified package
This method registers the reverse dependencies and conflicts for This method registers the reverse dependencies and conflicts for
@ -643,7 +637,7 @@ class Britney:
for arch in self.options.architectures: for arch in self.options.architectures:
if pkg not in self.binaries[dist][arch][0]: continue if pkg not in self.binaries[dist][arch][0]: continue
pkgv = self.binaries[dist][arch][0][pkg][VERSION] pkgv = self.binaries[dist][arch][0][pkg][VERSION]
if maxver == None or apt_pkg.VersionCompare(pkgv, maxver) > 0: if maxver == None or apt_pkg.version_compare(pkgv, maxver) > 0:
maxver = pkgv maxver = pkgv
return maxver return maxver
@ -745,12 +739,12 @@ class Britney:
# if the package exists in testing and it is more recent, do nothing # if the package exists in testing and it is more recent, do nothing
tsrcv = self.sources['testing'].get(l[0], None) tsrcv = self.sources['testing'].get(l[0], None)
if tsrcv and apt_pkg.VersionCompare(tsrcv[VERSION], l[1]) >= 0: if tsrcv and apt_pkg.version_compare(tsrcv[VERSION], l[1]) >= 0:
continue continue
# if the package doesn't exist in unstable or it is older, do nothing # if the package doesn't exist in unstable or it is older, do nothing
usrcv = self.sources['unstable'].get(l[0], None) usrcv = self.sources['unstable'].get(l[0], None)
if not usrcv or apt_pkg.VersionCompare(usrcv[VERSION], l[1]) < 0: if not usrcv or apt_pkg.version_compare(usrcv[VERSION], l[1]) < 0:
continue continue
# update the urgency for the package # update the urgency for the package
@ -810,7 +804,7 @@ class Britney:
if package in z and z[package] != key: if package in z and z[package] != key:
hint2 = z[package][0] hint2 = z[package][0]
if x in ['unblock', 'unblock-udeb']: if x in ['unblock', 'unblock-udeb']:
if apt_pkg.VersionCompare(hint2.version, hint.version) < 0: if apt_pkg.version_compare(hint2.version, hint.version) < 0:
# This hint is for a newer version, so discard the old one # This hint is for a newer version, so discard the old one
self.__log("Overriding %s[%s] = ('%s', '%s') with ('%s', '%s')" % self.__log("Overriding %s[%s] = ('%s', '%s') with ('%s', '%s')" %
(x, package, hint2.version, hint2.user, hint.version, hint.user), type="W") (x, package, hint2.version, hint2.user, hint.version, hint.user), type="W")
@ -970,7 +964,7 @@ class Britney:
"""Find the packages which satisfy a dependency block """Find the packages which satisfy a dependency block
This method returns the list of packages which satisfy a dependency This method returns the list of packages which satisfy a dependency
block (as returned by apt_pkg.ParseDepends) for the given architecture block (as returned by apt_pkg.parse_depends) for the given architecture
and distribution. and distribution.
It returns a tuple with two items: the first is a boolean which is It returns a tuple with two items: the first is a boolean which is
@ -989,7 +983,7 @@ class Britney:
if name in binaries[0]: if name in binaries[0]:
package = binaries[0][name] package = binaries[0][name]
# check the versioned dependency (if present) # check the versioned dependency (if present)
if op == '' and version == '' or apt_pkg.CheckDep(package[VERSION], op, version): if op == '' and version == '' or apt_pkg.check_dep(package[VERSION], op, version):
packages.append(name) packages.append(name)
# look for the package in the virtual packages list and loop on them # look for the package in the virtual packages list and loop on them
@ -1000,7 +994,7 @@ class Britney:
# TODO: this is forbidden by the debian policy, which says that versioned # TODO: this is forbidden by the debian policy, which says that versioned
# dependencies on virtual packages are never satisfied. The old britney # dependencies on virtual packages are never satisfied. The old britney
# does it and we have to go with it, but at least a warning should be raised. # does it and we have to go with it, but at least a warning should be raised.
if op == '' and version == '' or not strict and apt_pkg.CheckDep(package[VERSION], op, version): if op == '' and version == '' or not strict and apt_pkg.check_dep(package[VERSION], op, version):
packages.append(prov) packages.append(prov)
return (len(packages) > 0, packages) return (len(packages) > 0, packages)
@ -1020,7 +1014,7 @@ class Britney:
binary_u = self.binaries[suite][arch][0][pkg] binary_u = self.binaries[suite][arch][0][pkg]
# local copies for better performances # local copies for better performances
parse_depends = apt_pkg.ParseDepends parse_depends = apt_pkg.parse_depends
get_dependency_solvers = self.get_dependency_solvers get_dependency_solvers = self.get_dependency_solvers
strict = True # not self.options.compatible strict = True # not self.options.compatible
@ -1170,7 +1164,7 @@ class Britney:
# at this point, the binary package is present in testing, so we can compare # at this point, the binary package is present in testing, so we can compare
# the versions of the packages ... # the versions of the packages ...
vcompare = apt_pkg.VersionCompare(binary_t[VERSION], binary_u[VERSION]) vcompare = apt_pkg.version_compare(binary_t[VERSION], binary_u[VERSION])
# ... if updating would mean downgrading, then stop here: there is something wrong # ... if updating would mean downgrading, then stop here: there is something wrong
if vcompare > 0: if vcompare > 0:
@ -1229,7 +1223,7 @@ class Britney:
if src in self.sources['testing']: if src in self.sources['testing']:
source_t = self.sources['testing'][src] source_t = self.sources['testing'][src]
# if testing and unstable have the same version, then this is a candidate for binary-NMUs only # if testing and unstable have the same version, then this is a candidate for binary-NMUs only
if apt_pkg.VersionCompare(source_t[VERSION], source_u[VERSION]) == 0: if apt_pkg.version_compare(source_t[VERSION], source_u[VERSION]) == 0:
return False return False
else: else:
source_t = None source_t = None
@ -1245,7 +1239,7 @@ class Britney:
update_candidate = True update_candidate = True
# if the version in unstable is older, then stop here with a warning in the excuse and return False # if the version in unstable is older, then stop here with a warning in the excuse and return False
if source_t and apt_pkg.VersionCompare(source_u[VERSION], source_t[VERSION]) < 0: if source_t and apt_pkg.version_compare(source_u[VERSION], source_t[VERSION]) < 0:
excuse.addhtml("ALERT: %s is newer in testing (%s %s)" % (src, source_t[VERSION], source_u[VERSION])) excuse.addhtml("ALERT: %s is newer in testing (%s %s)" % (src, source_t[VERSION], source_u[VERSION]))
self.excuses.append(excuse) self.excuses.append(excuse)
return False return False
@ -2583,10 +2577,10 @@ class Britney:
continue continue
inunstable = pkg.package in self.sources['unstable'] inunstable = pkg.package in self.sources['unstable']
rightversion = inunstable and (apt_pkg.VersionCompare(self.sources['unstable'][pkg.package][VERSION], pkg.version) == 0) rightversion = inunstable and (apt_pkg.version_compare(self.sources['unstable'][pkg.package][VERSION], pkg.version) == 0)
if pkg.suite == 'unstable' and not rightversion: if pkg.suite == 'unstable' and not rightversion:
for suite in ['pu', 'tpu']: for suite in ['pu', 'tpu']:
if pkg.package in self.sources[suite] and apt_pkg.VersionCompare(self.sources[suite][pkg.package][VERSION], pkg.version) == 0: if pkg.package in self.sources[suite] and apt_pkg.version_compare(self.sources[suite][pkg.package][VERSION], pkg.version) == 0:
pkg.suite = suite pkg.suite = suite
_pkgvers[idx] = pkg _pkgvers[idx] = pkg
break break
@ -2594,7 +2588,7 @@ class Britney:
# handle *-proposed-updates # handle *-proposed-updates
if pkg.suite in ['pu', 'tpu']: if pkg.suite in ['pu', 'tpu']:
if pkg.package not in self.sources[pkg.suite]: continue if pkg.package not in self.sources[pkg.suite]: continue
if apt_pkg.VersionCompare(self.sources[pkg.suite][pkg.package][VERSION], pkg.version) != 0: if apt_pkg.version_compare(self.sources[pkg.suite][pkg.package][VERSION], pkg.version) != 0:
self.output_write(" Version mismatch, %s %s != %s\n" % (pkg.package, pkg.version, self.sources[pkg.suite][pkg.package][VERSION])) self.output_write(" Version mismatch, %s %s != %s\n" % (pkg.package, pkg.version, self.sources[pkg.suite][pkg.package][VERSION]))
ok = False ok = False
# does the package exist in unstable? # does the package exist in unstable?

Loading…
Cancel
Save