Kaydet (Commit) 0ef315a5 authored tarafından Eray Özkural's avatar Eray Özkural

* implement index integrity, skip if not up to date

* small fixes for fetcher (explicitly check perms for dest file)
* packagedb: method call fix
üst 929902e9
......@@ -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())
......
......@@ -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:
......
......@@ -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
......
......@@ -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):
......
......@@ -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]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment