If the package is from the same distribution and the distro release is bigger than the
current package's, mark it as upgradable without looking to anything else.
This commit is contained in:
+17
-4
@@ -110,10 +110,7 @@ class InstallDB(lazydb.LazyDB):
|
||||
found.append(name)
|
||||
return found
|
||||
|
||||
def get_version(self, package):
|
||||
metadata_xml = os.path.join(self.package_path(package), ctx.const.metadata_xml)
|
||||
|
||||
meta_doc = piksemel.parse(metadata_xml)
|
||||
def __get_version(self, meta_doc):
|
||||
history = meta_doc.getTag("Package").getTag("History")
|
||||
build = meta_doc.getTag("Package").getTagData("Build")
|
||||
version = history.getTag("Update").getTagData("Version")
|
||||
@@ -121,6 +118,22 @@ class InstallDB(lazydb.LazyDB):
|
||||
|
||||
return version, release, build and int(build)
|
||||
|
||||
def __get_distro_release(self, meta_doc):
|
||||
distro = meta_doc.getTag("Package").getTagData("Distribution")
|
||||
release = meta_doc.getTag("Package").getTagData("DistributionRelease")
|
||||
|
||||
return distro, release
|
||||
|
||||
def get_version_and_distro_release(self, package):
|
||||
metadata_xml = os.path.join(self.package_path(package), ctx.const.metadata_xml)
|
||||
meta_doc = piksemel.parse(metadata_xml)
|
||||
return self.__get_version(meta_doc) + self.__get_distro_release(meta_doc)
|
||||
|
||||
def get_version(self, package):
|
||||
metadata_xml = os.path.join(self.package_path(package), ctx.const.metadata_xml)
|
||||
meta_doc = piksemel.parse(metadata_xml)
|
||||
return self.__get_version(meta_doc)
|
||||
|
||||
def get_files(self, package):
|
||||
files = pisi.files.Files()
|
||||
files_xml = os.path.join(self.package_path(package), ctx.const.files_xml)
|
||||
|
||||
+22
-6
@@ -97,17 +97,33 @@ class PackageDB(lazydb.LazyDB):
|
||||
found.append(name)
|
||||
return found
|
||||
|
||||
def __get_version(self, meta_doc):
|
||||
history = meta_doc.getTag("History")
|
||||
build = meta_doc.getTagData("Build")
|
||||
version = history.getTag("Update").getTagData("Version")
|
||||
release = history.getTag("Update").getAttribute("release")
|
||||
|
||||
return version, release, build and int(build)
|
||||
|
||||
def __get_distro_release(self, meta_doc):
|
||||
distro = meta_doc.getTagData("Distribution")
|
||||
release = meta_doc.getTagData("DistributionRelease")
|
||||
|
||||
return distro, release
|
||||
|
||||
def get_version_and_distro_release(self, name, repo):
|
||||
if not self.has_package(name, repo):
|
||||
raise Exception(_('Package %s not found.') % name)
|
||||
|
||||
pkg_doc = piksemel.parseString(self.pdb.get_item(name, repo))
|
||||
return self.__get_version(pkg_doc) + self.__get_distro_release(pkg_doc)
|
||||
|
||||
def get_version(self, name, repo):
|
||||
if not self.has_package(name, repo):
|
||||
raise Exception(_('Package %s not found.') % name)
|
||||
|
||||
pkg_doc = piksemel.parseString(self.pdb.get_item(name, repo))
|
||||
history = pkg_doc.getTag("History")
|
||||
build = pkg_doc.getTagData("Build")
|
||||
version = history.getTag("Update").getTagData("Version")
|
||||
release = history.getTag("Update").getAttribute("release")
|
||||
|
||||
return version, release, build and int(build)
|
||||
return self.__get_version(pkg_doc)
|
||||
|
||||
def get_package_repo(self, name, repo=None):
|
||||
pkg, repo = self.pdb.get_item_repo(name, repo)
|
||||
|
||||
@@ -262,16 +262,18 @@ def is_upgradable(name, ignore_build = False):
|
||||
if not installdb.has_package(name):
|
||||
return False
|
||||
|
||||
(i_version, i_release, i_build) = installdb.get_version(name)
|
||||
(i_version, i_release, i_build, i_distro, i_distro_release) = installdb.get_version_and_distro_release(name)
|
||||
|
||||
try:
|
||||
version, release, build = packagedb.get_version(name, packagedb.which_repo(name))
|
||||
version, release, build, distro, distro_release = packagedb.get_version_and_distro_release(name, packagedb.which_repo(name))
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except Exception: #FIXME: what exception could we catch here, replace with that.
|
||||
return False
|
||||
|
||||
if ignore_build or (not i_build) or (not build):
|
||||
if distro == i_distro and pisi.version.Version(distro_release) > pisi.version.Version(i_distro_release):
|
||||
return True
|
||||
elif ignore_build or (not i_build) or (not build):
|
||||
return pisi.version.Version(i_release) < pisi.version.Version(release)
|
||||
else:
|
||||
return i_build < build
|
||||
|
||||
Reference in New Issue
Block a user