From afddb5676933e7c56a70ab0670182d590afa5abb Mon Sep 17 00:00:00 2001 From: Faik Uygur Date: Tue, 23 Jan 2007 08:39:56 +0000 Subject: [PATCH] [merge] index command should only take the latest versioned pisi packages. --- pisi/index.py | 9 +++++++-- pisi/util.py | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/pisi/index.py b/pisi/index.py index fa801250..71872588 100644 --- a/pisi/index.py +++ b/pisi/index.py @@ -86,11 +86,12 @@ class Index(XmlFile): def index(self, repo_uri, skip_sources=False): self.repo_dir = repo_uri + + packages = [] for root, dirs, files in os.walk(repo_uri): for fn in files: if fn.endswith(ctx.const.package_suffix): - ctx.ui.info(_('Adding %s to package index') % fn) - self.add_package(os.path.join(root, fn), repo_uri) + packages.append(os.path.join(root, fn)) if fn == 'component.xml': ctx.ui.info(_('Adding %s to component index') % fn) self.add_component(os.path.join(root, fn)) @@ -99,6 +100,10 @@ class Index(XmlFile): if fn == 'distribution.xml': self.add_distro(os.path.join(root, fn)) + for pkg in util.filter_latest_packages(packages): + ctx.ui.info(_('Adding %s to package index') % pkg) + self.add_package(pkg, repo_uri) + def update_db(self, repo, txn = None): # FIXME: updating db takes too much time. So a notify mechanism is used to inform the status # of the operation. diff --git a/pisi/util.py b/pisi/util.py index c851ddb2..d2709b31 100644 --- a/pisi/util.py +++ b/pisi/util.py @@ -632,3 +632,24 @@ def parse_package_name(package_name): version = package_name[len(name) + 1:] return (name, version) + +def filter_latest_packages(package_paths): + """ For a given pisi package paths list where there may also be multiple versions + of the same package, filters only the latest versioned ones """ + + from pisi.version import Version + + latest = {} + for path in package_paths: + + root = os.path.dirname(path) + name, version = parse_package_name(os.path.basename(path[:-len(".pisi")])) + + if latest.has_key(name): + if Version(latest[name][2]) < Version(version): + latest[name] = (root, name, version) + else: + if version: + latest[name] = (root, name, version) + + return map(lambda x:"%s/%s-%s.pisi" % x, latest.values())