From 0ef315a589089f9180dc4ecb39b9c8b78bdcdbf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Fri, 24 Mar 2006 19:04:13 +0000 Subject: [PATCH] * implement index integrity, skip if not up to date * small fixes for fetcher (explicitly check perms for dest file) * packagedb: method call fix --- pisi/api.py | 9 ++++++--- pisi/fetcher.py | 5 ++++- pisi/index.py | 16 ++-------------- pisi/packagedb.py | 8 ++++---- pisi/uri.py | 3 ++- 5 files changed, 18 insertions(+), 23 deletions(-) diff --git a/pisi/api.py b/pisi/api.py index 6195e6fc..82afb6d0 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -319,11 +319,14 @@ def update_repo(repo): ctx.ui.info(_('* Updating repository: %s') % repo) index = Index() if ctx.repodb.has_repo(repo): - index.read_uri(ctx.repodb.get_repo(repo).indexuri.get_uri(), repo) + try: + index.read_uri(ctx.repodb.get_repo(repo).indexuri.get_uri(), repo) + ctx.txn_proc(lambda txn : index.update_db(repo, txn=txn)) + ctx.ui.info(_('* Package database updated.')) + except pisi.file.AlreadyHaveException, e: + ctx.ui.info(_('No updates available for repository %s.' % repo)) else: raise Error(_('No repository named %s found.') % repo) - ctx.txn_proc(lambda txn : index.update_db(repo, txn=txn)) - ctx.ui.info(_('\n* Package database updated.')) def delete_cache(): util.clean_dir(ctx.config.packages_dir()) diff --git a/pisi/fetcher.py b/pisi/fetcher.py index 4a86535a..7a917bed 100644 --- a/pisi/fetcher.py +++ b/pisi/fetcher.py @@ -79,6 +79,9 @@ class Fetcher: self.err(_('Access denied to write to destination directory')) archive_file = os.path.join(self.filedest, self.url.filename()) + + if os.path.exists(self.filedest) and not os.access(self.filedest, os.W_OK): + self.err(_('Access denied to destination file')) if self.url.is_local_file(): self.fetchLocalFile(archive_file + '.part') @@ -162,7 +165,7 @@ class Fetcher: else: dest = open(archive_file, 'wb') - uri = self.url.uri + uri = self.url.get_uri() flag = 1 try: diff --git a/pisi/index.py b/pisi/index.py index e99a06fe..f82b11e0 100644 --- a/pisi/index.py +++ b/pisi/index.py @@ -51,20 +51,8 @@ class Index(XmlFile): def read_uri(self, filename, repo = None): """Read PSPEC file""" - - self.filepath = filename - url = URI(filename) - if url.is_remote_file(): - from fetcher import fetch_url - assert repo - dest = os.path.join(ctx.config.index_dir(), repo) - if not os.path.exists(dest): - os.makedirs(dest) - fetch_url(url, dest, ctx.ui.Progress) - - self.filepath = os.path.join(dest, url.filename()) - - self.read(self.filepath) + tmpdir = os.path.join(ctx.config.index_dir(), repo) + self.read(filename, tmpdir, sha1sum=True) def index(self, repo_uri, skip_sources=False): self.repo_dir = repo_uri diff --git a/pisi/packagedb.py b/pisi/packagedb.py index d59add67..7d2e5488 100644 --- a/pisi/packagedb.py +++ b/pisi/packagedb.py @@ -63,15 +63,15 @@ class PackageDB(object): def get_package(self, name, repo=None, txn = None): try: - return self.d.get_item(name, repo, txn) + return self.d.get_item(name, repo, txn=txn) except pisi.itembyrepodb.NotfoundError, e: raise Error(_('Package %s not found') % name) def get_package_repo(self, name, repo=None, txn = None): - return self.d.get_item_repo(name, repo, txn) + return self.d.get_item_repo(name, repo, txn=txn) - def which_repo(self, name, repo=None, txn = None): - return self.d.which_repo(name, repo, txn) + def which_repo(self, name, txn = None): + return self.d.which_repo(name, txn=txn) def get_rev_deps(self, name): if self.dr.has_key(name): diff --git a/pisi/uri.py b/pisi/uri.py index 63baf2a8..86f8784a 100644 --- a/pisi/uri.py +++ b/pisi/uri.py @@ -27,7 +27,7 @@ class URI(object): def __init__(self, uri=None): if uri: - self.set_uri(uri) + self.set_uri(str(uri)) else: self.__scheme = None self.__location = None @@ -47,6 +47,7 @@ class URI(object): def set_uri(self, uri): # (scheme, location, path, params, query, fragment) + uri = str(uri) u = urlparse(uri, "file") self.__scheme = u[0] self.__location = u[1]