* database: filename + '.loc' seklinde lock dosyalarini ac
* packagedb: her repo icin bir tane destekle * repodb: ilk haline getir * repodb'ye erisim icin add-repo, remove-repo, list-repo, update-repo komutlarini yaz * database update'i bir repo'dan yapilir * dependency: eksik release karsilastirmalarini ekle * database'leri entry point'de Commands class'inde init_db'yle hazirla bunu database kullanan komutlarda cagir * seveyim boyle turkceyi
This commit is contained in:
+69
-17
@@ -17,7 +17,11 @@ def cmdObject(cmd, fail=False):
|
||||
"search-available": SearchAvailable,
|
||||
"remove": Remove,
|
||||
"index": Index,
|
||||
"updatedb": UpdateDB}
|
||||
"update-repo": UpdateRepo,
|
||||
"add-repo": AddRepo,
|
||||
"remove-repo": RemoveRepo,
|
||||
"list-repo": ListRepo
|
||||
}
|
||||
|
||||
if commands.has_key(cmd):
|
||||
obj = commands[cmd]()
|
||||
@@ -31,6 +35,7 @@ def cmdObject(cmd, fail=False):
|
||||
|
||||
class Command(object):
|
||||
"""generic help string for any command"""
|
||||
|
||||
def __init__(self):
|
||||
# now for the real parser
|
||||
self.parser = OptionParser(usage=usage_text,
|
||||
@@ -39,7 +44,7 @@ class Command(object):
|
||||
self.parser = commonopts(self.parser)
|
||||
(self.options, args) = self.parser.parse_args()
|
||||
self.args = args[1:]
|
||||
|
||||
|
||||
self.checkAuthInfo()
|
||||
|
||||
def options(self):
|
||||
@@ -54,11 +59,11 @@ class Command(object):
|
||||
# TODO: We'll get the username, password pair from a configuration
|
||||
# file from users home directory. Currently we need user to
|
||||
# give it from the user interface.
|
||||
# if not username and not password:
|
||||
# if someauthconfig.username and someauthconfig.password:
|
||||
# self.authInfo = (someauthconfig.username,
|
||||
# someauthconfig.password)
|
||||
# return
|
||||
# if not username and not password:
|
||||
# if someauthconfig.username and someauthconfig.password:
|
||||
# self.authInfo = (someauthconfig.username,
|
||||
# someauthconfig.password)
|
||||
# return
|
||||
if username and password:
|
||||
self.authInfo = (username, password)
|
||||
return
|
||||
@@ -70,6 +75,10 @@ class Command(object):
|
||||
else:
|
||||
self.authInfo = None
|
||||
|
||||
def init_db(self):
|
||||
from pisi.repodb import repodb
|
||||
repodb.init_dbs()
|
||||
|
||||
def help(self):
|
||||
print getattr(self, "__doc__")
|
||||
|
||||
@@ -116,6 +125,7 @@ class Install(Command):
|
||||
self.help()
|
||||
return
|
||||
|
||||
self.init_db()
|
||||
pisi.toplevel.install(self.args)
|
||||
|
||||
class Remove(Command):
|
||||
@@ -132,6 +142,7 @@ class Remove(Command):
|
||||
self.help()
|
||||
return
|
||||
|
||||
self.init_db()
|
||||
pisi.toplevel.remove(self.args)
|
||||
|
||||
class Info(Command):
|
||||
@@ -186,6 +197,7 @@ class ListInstalled(Command):
|
||||
default=False, help="show in long format")
|
||||
|
||||
def run(self):
|
||||
self.init_db()
|
||||
from pisi.installdb import installdb
|
||||
for pkg in installdb.list_installed():
|
||||
from pisi.packagedb import packagedb
|
||||
@@ -195,21 +207,60 @@ class ListInstalled(Command):
|
||||
else:
|
||||
print package
|
||||
|
||||
class UpdateDB(Command):
|
||||
"""updatedb: update source and package databases"""
|
||||
class UpdateRepo(Command):
|
||||
"""update-repo: update the databases of a repository
|
||||
usage: update-repo <repo1> <repo2> ...."""
|
||||
def __init__(self):
|
||||
super(UpdateDB, self).__init__()
|
||||
super(UpdateRepo, self).__init__()
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
indexfile = self.args[0]
|
||||
except IndexError:
|
||||
# doesn't have an index file, we'll use the repo url in
|
||||
# configuration file
|
||||
indexfile = None
|
||||
self.init_db()
|
||||
for repo in self.args:
|
||||
pisi.ui.info('Updating repository ' + repo + '\n')
|
||||
pisi.toplevel.update_repo(repo)
|
||||
|
||||
pisi.toplevel.updatedb(indexfile)
|
||||
class AddRepo(Command):
|
||||
"""add-repo: add a repository
|
||||
usage: add-repo <repo> <indexuri>"""
|
||||
def __init__(self):
|
||||
super(AddRepo, self).__init__()
|
||||
|
||||
def run(self):
|
||||
|
||||
if len(self.args)>=2:
|
||||
name = self.args[0]
|
||||
indexuri = self.args[1]
|
||||
pisi.toplevel.add_repo(name, indexuri)
|
||||
else:
|
||||
self.help()
|
||||
return
|
||||
|
||||
class RemoveRepo(Command):
|
||||
"""remove-repo: remove a repository
|
||||
usage: remove-repo <repo>"""
|
||||
def __init__(self):
|
||||
super(RemoveRepo, self).__init__()
|
||||
|
||||
def run(self):
|
||||
|
||||
if len(self.args)>=1:
|
||||
name = self.args[0]
|
||||
pisi.toplevel.remove_repo(name)
|
||||
else:
|
||||
self.help()
|
||||
return
|
||||
|
||||
class ListRepo(Command):
|
||||
"""list-repo: list repositories"""
|
||||
def __init__(self):
|
||||
super(ListRepo, self).__init__()
|
||||
|
||||
def run(self):
|
||||
|
||||
from pisi.repodb import repodb
|
||||
for repo in repodb.list():
|
||||
print repo
|
||||
print ' ', repodb.get_repo(repo).indexuri.getUri()
|
||||
|
||||
class ListAvailable(Command):
|
||||
"list-available: list the available packages in the repository"
|
||||
@@ -217,6 +268,7 @@ class ListAvailable(Command):
|
||||
super(ListAvailable, self).__init__()
|
||||
|
||||
def run(self):
|
||||
self.init_db()
|
||||
from pisi import util
|
||||
# FIXME: bu asagidaki code bayagi anlamsiz
|
||||
# neden bir packagedb'miz var?
|
||||
|
||||
+4
-1
@@ -10,7 +10,10 @@ install
|
||||
list-installed
|
||||
list-available
|
||||
remove
|
||||
updatedb
|
||||
add-repo
|
||||
remove-repo
|
||||
list-repo
|
||||
update-repo
|
||||
|
||||
Use \"%prog help <command>\" for help on a specific subcommand.
|
||||
|
||||
|
||||
+5
-1
@@ -2,7 +2,7 @@
|
||||
# Author: Eray Ozkural <eray@uludag.org.tr>
|
||||
|
||||
from installdb import installdb
|
||||
from packagedb import packagedb
|
||||
import packagedb
|
||||
from ui import ui
|
||||
from version import Version
|
||||
|
||||
@@ -17,6 +17,10 @@ def satisfiesDep(pkg, depinfo):
|
||||
ret &= Version(version) >= Version(depinfo.versionFrom)
|
||||
if depinfo.versionTo:
|
||||
ret &= Version(version) <= Version(depinfo.versionTo)
|
||||
if depinfo.releaseFrom:
|
||||
ret &= Version(release) <= Version(depinfo.releaseFrom)
|
||||
if depinfo.releaseTo:
|
||||
ret &= Version(release) <= Version(depinfo.releaseTo)
|
||||
return ret
|
||||
|
||||
def runtimeDeps(pkg):
|
||||
|
||||
+5
-4
@@ -5,7 +5,7 @@
|
||||
from package import Package
|
||||
from xmlfile import XmlFile
|
||||
import metadata
|
||||
from packagedb import packagedb
|
||||
import packagedb
|
||||
from ui import ui
|
||||
import util
|
||||
from config import config
|
||||
@@ -61,10 +61,11 @@ class Index(XmlFile):
|
||||
ui.info('Adding ' + fn + ' to package index\n')
|
||||
self.add_package(join(root, fn))
|
||||
|
||||
def update_db(self):
|
||||
packagedb.clear()
|
||||
def update_db(self, repo):
|
||||
pkgdb = packagedb.get_db(repo)
|
||||
pkgdb.clear()
|
||||
for pkg in self.packages:
|
||||
packagedb.add_package(pkg)
|
||||
pkgdb.add_package(pkg)
|
||||
|
||||
def add_package(self, path):
|
||||
package = Package(path, 'r')
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ from config import config
|
||||
from constants import const
|
||||
from ui import ui
|
||||
from installdb import installdb
|
||||
from packagedb import packagedb, inst_packagedb
|
||||
import packagedb
|
||||
import dependency
|
||||
from metadata import MetaData
|
||||
import comariface
|
||||
|
||||
+22
-4
@@ -20,14 +20,15 @@ class PackageDB(object):
|
||||
a delegated dbshelve object"""
|
||||
def __init__(self, id):
|
||||
util.check_dir(config.db_dir())
|
||||
filename = os.path.join(config.db_dir(), 'package-' + id + '.bdb')
|
||||
self.d = shelve.open(filename)
|
||||
self.fdummy = open(filename)
|
||||
self.filename = os.path.join(config.db_dir(), 'package-' + id + '.bdb')
|
||||
self.d = shelve.open(self.filename)
|
||||
self.fdummy = file(self.filename + '.lock', 'w')
|
||||
fcntl.flock(self.fdummy, fcntl.LOCK_EX)
|
||||
|
||||
def __del__(self):
|
||||
#fcntl.flock(self.fdummy, fcntl.LOCK_UN)
|
||||
self.fdummy.close()
|
||||
#os.unlink(self.filename + '.lock')
|
||||
|
||||
def has_package(self, name):
|
||||
name = str(name)
|
||||
@@ -37,6 +38,9 @@ class PackageDB(object):
|
||||
name = str(name)
|
||||
return self.d[name]
|
||||
|
||||
def list(self):
|
||||
return self.d.keys()
|
||||
|
||||
def add_package(self, package_info):
|
||||
name = str(package_info.name)
|
||||
self.d[name] = package_info
|
||||
@@ -48,6 +52,20 @@ class PackageDB(object):
|
||||
name = str(name)
|
||||
del self.d[name]
|
||||
|
||||
packagedb = PackageDB('repo')
|
||||
packagedbs = {}
|
||||
|
||||
def add_db(name):
|
||||
packagedbs[name] = PackageDB(name)
|
||||
|
||||
def get_db(name):
|
||||
return packagesdb[name]
|
||||
|
||||
def remove_db(name):
|
||||
del packagedbs[name]
|
||||
# erase database file
|
||||
|
||||
#def has_package
|
||||
#def get_package
|
||||
#def remove_package
|
||||
|
||||
inst_packagedb = PackageDB('local')
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# PISI package relation graph that represents the state of packagedb
|
||||
|
||||
from packagedb import packagedb
|
||||
import packagedb
|
||||
from sourcedb import sourcedb
|
||||
from graph import *
|
||||
|
||||
|
||||
+30
-9
@@ -1,28 +1,49 @@
|
||||
# Author: Eray Ozkural
|
||||
|
||||
from bsddb import db
|
||||
import bsddb.dbshelve as shelve
|
||||
import os, fcntl
|
||||
|
||||
from config import config
|
||||
import packagedb, util
|
||||
from pisi.purl import PUrl
|
||||
|
||||
class Repo:
|
||||
def __init__(self, indexuri):
|
||||
self.indexuri = indexuri
|
||||
|
||||
class RepoDB(object):
|
||||
"""RepoDB maps repo ids to distribution information"""
|
||||
"""RepoDB maps repo ids to repository information"""
|
||||
def __init__(self):
|
||||
filename = os.path.join(config.db_dir(), 'repo.bdb')
|
||||
self.d = shelve.open(filename)
|
||||
self.fdummy = open(filename)
|
||||
self.filename = os.path.join(config.db_dir(), 'repo.bdb')
|
||||
self.d = shelve.open(self.filename)
|
||||
self.fdummy = open(self.filename + '.lock', 'w')
|
||||
fcntl.flock(self.fdummy, fcntl.LOCK_EX)
|
||||
|
||||
def init_dbs(self):
|
||||
# initialize package/source dbs
|
||||
for x in self.d.keys():
|
||||
packagedb.add_db(x)
|
||||
|
||||
def __del__(self):
|
||||
#fcntl.flock(self.fdummy, fcntl.LOCK_UN)
|
||||
self.fdummy.close()
|
||||
#os.unlink(self.filename + '.lock')
|
||||
|
||||
def has_distro(self, name):
|
||||
def has_repo(self, name):
|
||||
name = str(name)
|
||||
return self.d.has_key(name)
|
||||
|
||||
def get_distro(self, name):
|
||||
def get_repo(self, name):
|
||||
name = str(name)
|
||||
return self.d[name]
|
||||
|
||||
def add_distro(self, dist_info):
|
||||
name = str(dist_info.name)
|
||||
self.d[name] = dist_info
|
||||
def add_repo(self, name, repo_info):
|
||||
self.d[name] = repo_info
|
||||
packagedb.add_db(name)
|
||||
|
||||
def list(self):
|
||||
return self.d.keys()
|
||||
|
||||
def clear(self):
|
||||
self.d.clear()
|
||||
|
||||
+4
-3
@@ -17,14 +17,15 @@ class SourceDB(object):
|
||||
|
||||
def __init__(self):
|
||||
util.check_dir(config.db_dir())
|
||||
filename = os.path.join(config.db_dir(), 'source.bdb')
|
||||
self.d = shelve.open(filename)
|
||||
self.fdummy = open(filename)
|
||||
self.filename = os.path.join(config.db_dir(), 'source.bdb')
|
||||
self.d = shelve.open(self.filename)
|
||||
self.fdummy = file(self.filename + '.lock', 'w')
|
||||
fcntl.flock(self.fdummy, fcntl.LOCK_EX)
|
||||
|
||||
def __del__(self):
|
||||
#fcntl.flock(self.fdummy, fcntl.LOCK_UN)
|
||||
self.fdummy.close()
|
||||
#os.unlink(self.filename + '.lock')
|
||||
|
||||
def has_source(self, name):
|
||||
name = str(name)
|
||||
|
||||
+18
-12
@@ -1,18 +1,15 @@
|
||||
# top level PISI interfaces
|
||||
# a facade to the entire PISI system
|
||||
|
||||
import os
|
||||
import sys
|
||||
import os, sys
|
||||
|
||||
from config import config
|
||||
from constants import const
|
||||
from ui import ui
|
||||
from purl import PUrl
|
||||
import util
|
||||
import dependency
|
||||
import pgraph
|
||||
import operations
|
||||
from packagedb import packagedb
|
||||
import util, dependency, pgraph, operations, packagedb
|
||||
from repodb import repodb
|
||||
from index import Index
|
||||
|
||||
def install(packages):
|
||||
"""install a list of packages (either files/urls, or names)"""
|
||||
@@ -101,18 +98,27 @@ def index(repo_dir = '.'):
|
||||
index.write(const.pisi_index)
|
||||
ui.info('* Index file written\n')
|
||||
|
||||
class Repo:
|
||||
def __init__(self, indexuri):
|
||||
self.indexuri = indexuri
|
||||
|
||||
def updatedb(indexfile = None, repo = "default"):
|
||||
from index import Index
|
||||
def add_repo(name, indexuri):
|
||||
repo = Repo(PUrl(indexuri))
|
||||
repodb.add_repo(name, repo)
|
||||
|
||||
def remove_repo(name):
|
||||
repodb.remove_repo(name)
|
||||
|
||||
def update_repo(repo):
|
||||
|
||||
if not indexfile:
|
||||
repos_path = config.values.repos[repo]
|
||||
indexfile = os.path.join(repos_path, const.pisi_index)
|
||||
|
||||
ui.info('* Updating DB from index file: %s\n' % indexfile)
|
||||
ui.info('* Updating repository: %s\n' % repo)
|
||||
index = Index()
|
||||
index.read(indexfile, repo)
|
||||
index.update_db()
|
||||
index.read(repodb.get_repo(repo).indexuri.uri())
|
||||
index.update_db(repo)
|
||||
ui.info('* Package db updated.\n')
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user