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) found.append(name)
return found return found
def get_version(self, package): def __get_version(self, meta_doc):
metadata_xml = os.path.join(self.package_path(package), ctx.const.metadata_xml)
meta_doc = piksemel.parse(metadata_xml)
history = meta_doc.getTag("Package").getTag("History") history = meta_doc.getTag("Package").getTag("History")
build = meta_doc.getTag("Package").getTagData("Build") build = meta_doc.getTag("Package").getTagData("Build")
version = history.getTag("Update").getTagData("Version") version = history.getTag("Update").getTagData("Version")
@@ -121,6 +118,22 @@ class InstallDB(lazydb.LazyDB):
return version, release, build and int(build) 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): def get_files(self, package):
files = pisi.files.Files() files = pisi.files.Files()
files_xml = os.path.join(self.package_path(package), ctx.const.files_xml) 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) found.append(name)
return found 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): def get_version(self, name, repo):
if not self.has_package(name, repo): if not self.has_package(name, repo):
raise Exception(_('Package %s not found.') % name) raise Exception(_('Package %s not found.') % name)
pkg_doc = piksemel.parseString(self.pdb.get_item(name, repo)) pkg_doc = piksemel.parseString(self.pdb.get_item(name, repo))
history = pkg_doc.getTag("History") return self.__get_version(pkg_doc)
build = pkg_doc.getTagData("Build")
version = history.getTag("Update").getTagData("Version")
release = history.getTag("Update").getAttribute("release")
return version, release, build and int(build)
def get_package_repo(self, name, repo=None): def get_package_repo(self, name, repo=None):
pkg, repo = self.pdb.get_item_repo(name, repo) 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): if not installdb.has_package(name):
return False 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: 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: except KeyboardInterrupt:
raise raise
except Exception: #FIXME: what exception could we catch here, replace with that. except Exception: #FIXME: what exception could we catch here, replace with that.
return False 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) return pisi.version.Version(i_release) < pisi.version.Version(release)
else: else:
return i_build < build return i_build < build