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:
Faik Uygur
2009-06-19 08:44:40 +00:00
parent 28e5235766
commit 9a194f9e2e
3 changed files with 44 additions and 13 deletions
+17 -4
View File
@@ -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
View File
@@ -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)
+5 -3
View File
@@ -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