def init(database = True, options = None, ui = None, comar = True): """Initialize PiSi subsystem""" import pisi.config ctx.config = pisi.config.Config(options) # TODO: this is definitely not dynamic beyond this point! ctx.comar = comar and not ctx.config.get_option('ignore_comar') if ui is None: if options: pisi.context.ui = pisi.cli.CLI(options.debug) else: pisi.context.ui = pisi.cli.CLI() else: pisi.context.ui = ui # initialize repository databases if database: shelve.init_dbenv() ctx.repodb = pisi.repodb.init() ctx.installdb = pisi.installdb.init() ctx.filesdb = pisi.files.FilesDB() ctx.componentdb = pisi.component.ComponentDB() packagedb.init_db() pisi.sourcedb.init() pisi.search.init(['summary', 'description'], ['en', 'tr']) else: ctx.repodb = None ctx.installdb = None ctx.filesdb = None ctx.componentdb = None ctx.ui.debug('PISI API initialized') ctx.initialized = True
def init(database=True, write=True, options=None, ui=None, comar=True, stdout=None, stderr=None): """Initialize PiSi subsystem""" # UI comes first if ui is None: from pisi.cli import CLI if options: ctx.ui = CLI(options.debug) else: ctx.ui = CLI() else: ctx.ui = ui # If given define stdout and stderr. Needed by buildfarm currently # but others can benefit from this too. if stdout: ctx.stdout = stdout if stderr: ctx.stderr = stderr import pisi.config ctx.config = pisi.config.Config(options) # TODO: this is definitely not dynamic beyond this point! ctx.comar = comar and not ctx.config.get_option("ignore_comar") # initialize repository databases ctx.database = database if database: shelve.init_dbenv(write=write) ctx.repodb = pisi.repodb.init() ctx.installdb = pisi.installdb.init() ctx.filesdb = pisi.files.FilesDB() ctx.componentdb = pisi.component.ComponentDB() ctx.packagedb = packagedb.init_db() ctx.sourcedb = pisi.sourcedb.init() pisi.search.init(["summary", "description"], ["en", "tr"]) else: ctx.repodb = None ctx.installdb = None ctx.filesdb = None ctx.componentdb = None ctx.packagedb = None ctx.sourcedb = None ctx.ui.debug("PISI API initialized") ctx.initialized = True
def init(database = True, write = True, options = None, ui = None, comar = True, stdout = None, stderr = None, comar_sockname = None): """Initialize PiSi subsystem""" # UI comes first if ui is None: from pisi.cli import CLI if options: ctx.ui = CLI(options.debug, options.verbose) else: ctx.ui = CLI() else: ctx.ui = ui if os.access('/var/log', os.W_OK): handler = logging.handlers.RotatingFileHandler('/var/log/pisi.log') #handler.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)-12s: %(levelname)-8s %(message)s') handler.setFormatter(formatter) ctx.log = logging.getLogger('pisi') ctx.log.addHandler(handler) ctx.loghandler = handler ctx.log.setLevel(logging.DEBUG) else: ctx.log = None # If given define stdout and stderr. Needed by buildfarm currently # but others can benefit from this too. if stdout: ctx.stdout = stdout if stderr: ctx.stderr = stderr import pisi.config ctx.config = pisi.config.Config(options) # TODO: this is definitely not dynamic beyond this point! ctx.comar = comar and not ctx.config.get_option('ignore_comar') # This is for YALI, used in comariface.py:make_com() ctx.comar_sockname = comar_sockname # initialize repository databases ctx.database = database if database: shelve.init_dbenv(write=write) ctx.repodb = pisi.repodb.init() ctx.installdb = pisi.installdb.init() ctx.filesdb = pisi.files.FilesDB() ctx.componentdb = pisi.component.ComponentDB() ctx.packagedb = packagedb.init_db() ctx.sourcedb = pisi.sourcedb.init() pisi.search.init(['summary', 'description'], ['en', 'tr']) else: ctx.repodb = None ctx.installdb = None ctx.filesdb = None ctx.componentdb = None ctx.packagedb = None ctx.sourcedb = None ctx.ui.debug('PiSi API initialized') ctx.initialized = True
def init(database = True, write = True, options = pisi.config.Options(), ui = None, comar = True, stdout = None, stderr = None, comar_sockname = None, signal_handling = True): """Initialize PiSi subsystem. You should call finalize() when your work is finished. Otherwise you can left the database in a bad state. """ # UI comes first if ui is None: # FIXME: api importing and using pisi.cli ???? import pisi.cli if options: ctx.ui = pisi.cli.CLI(options.debug, options.verbose) else: ctx.ui = pisi.cli.CLI() else: ctx.ui = ui if os.access('/var/log', os.W_OK): handler = logging.handlers.RotatingFileHandler('/var/log/pisi.log') #handler.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)-12s: %(levelname)-8s %(message)s') handler.setFormatter(formatter) ctx.log = logging.getLogger('pisi') ctx.log.addHandler(handler) ctx.loghandler = handler ctx.log.setLevel(logging.DEBUG) else: ctx.log = None # If given define stdout and stderr. Needed by buildfarm currently # but others can benefit from this too. if stdout: ctx.stdout = stdout if stderr: ctx.stderr = stderr # FIXME: something is wrong here... see __init__.py also. Why do we import pisi.api in __init__.py import pisi.config ctx.config = pisi.config.Config(options) if signal_handling: ctx.sig = pisi.signalhandler.SignalHandler() # TODO: this is definitely not dynamic beyond this point! ctx.comar = comar and not ctx.config.get_option('ignore_comar') # This is for YALI, used in comariface.py ctx.comar_sockname = comar_sockname # initialize repository databases ctx.database = database if database: shelve.init_dbenv(write=write) ctx.repodb = pisi.repodb.init() ctx.installdb = pisi.installdb.init() ctx.filesdb = pisi.files.FilesDB() ctx.componentdb = pisi.component.ComponentDB() ctx.packagedb = pisi.packagedb.init_db() ctx.sourcedb = pisi.sourcedb.init() else: ctx.repodb = None ctx.installdb = None ctx.filesdb = None ctx.componentdb = None ctx.packagedb = None ctx.sourcedb = None ctx.ui.debug('PiSi API initialized') ctx.initialized = True
index_dir = ctx.config.index_dir() if os.path.exists(index_dir): # it may have been erased, or we may be upgrading from a previous version -- exa for repo in os.listdir(index_dir): indexuri = pisi.util.join_path(ctx.config.lib_dir(), 'index', repo, 'uri') indexuri = open(indexuri, 'r').readline() pisi.api.add_repo(repo, indexuri) pisi.api.rebuild_repo(repo) # check db schema versions try: shelve.check_dbversion('filesdbversion', pisi.__filesdbversion__, write=False) except KeyboardInterrupt: raise except Exception, e: #FIXME: what exception could we catch here, replace with that. files = True # exception means the files db version was wrong shelve.init_dbenv(write=True, writeversion=True) destroy(files) # bye bye # save parameters and shutdown pisi options = ctx.config.options ui = ctx.ui comar = ctx.comar finalize() # construct new database init(database=True, options=options, ui=ui, comar=comar) clean_duplicates() txn = ctx.dbenv.txn_begin() reload_packages(files, txn) reload_indices(txn) txn.commit()
def rebuild_db(files=False): assert not ctx.database # Bug 2596 # finds and cleans duplicate package directories under '/var/lib/pisi/package' # deletes the _older_ versioned package directories. def clean_duplicates(): i_version = {} # installed versions replica = [] for pkg in os.listdir(pisi.util.join_path(pisi.api.ctx.config.lib_dir(), 'package')): (name, ver) = pisi.util.parse_package_name(pkg) if i_version.has_key(name): if pisi.version.Version(ver) > pisi.version.Version(i_version[name]): # found a greater version, older one is a replica replica.append(name + '-' + i_version[name]) i_version[name] = ver else: # found an older version which is a replica replica.append(name + '-' + ver) else: i_version[name] = ver for pkg in replica: pisi.util.clean_dir(pisi.util.join_path(pisi.api.ctx.config.lib_dir(), 'package', pkg)) def destroy(files): #TODO: either don't delete version files here, or remove force flag... import bsddb3.db for db in os.listdir(ctx.config.db_dir()): if db.endswith('.bdb'):# or db.startswith('log'): # delete only db files if db.startswith('files') or db.startswith('filesdbversion'): clean = files else: clean = True if clean: fn = pisi.util.join_path(ctx.config.db_dir(), db) #NB: there is a parameter bug with python-bsddb3, fixed in pardus ctx.dbenv.dbremove(file=fn, flags=bsddb3.db.DB_AUTO_COMMIT) def reload_packages(files, txn): packages = os.listdir(pisi.util.join_path(ctx.config.lib_dir(), 'package')) progress = ctx.ui.Progress(len(packages)) processed = 0 for package_fn in packages: if not package_fn == "scripts": ctx.ui.debug('Resurrecting %s' % package_fn) pisi.api.resurrect_package(package_fn, files, txn) processed += 1 ctx.ui.display_progress(operation = "rebuilding-db", percent = progress.update(processed), info = _("Rebuilding package database")) def reload_indices(): index_dir = ctx.config.index_dir() if os.path.exists(index_dir): # it may have been erased, or we may be upgrading from a previous version -- exa for repo in os.listdir(index_dir): indexuri = pisi.util.join_path(ctx.config.lib_dir(), 'index', repo, 'uri') indexuri = open(indexuri, 'r').readline() pisi.api.add_repo(repo, indexuri) pisi.api.rebuild_repo(repo) # check db schema versions try: shelve.check_dbversion('filesdbversion', pisi.__filesdbversion__, write=False) except KeyboardInterrupt: raise except Exception: #FIXME: what exception could we catch here, replace with that. files = True # exception means the files db version was wrong shelve.init_dbenv(write=True, writeversion=True) destroy(files) # bye bye # save parameters and shutdown pisi options = ctx.config.options ui = ctx.ui comar = ctx.comar finalize() # construct new database init(database=True, options=options, ui=ui, comar=comar) clean_duplicates() txn = ctx.dbenv.txn_begin() reload_packages(files, txn) reload_indices() txn.commit()
def init( database=True, write=True, options=None, ui=None, comar=True, #stdout = None, stderr = None, stdout=sys.stdout, stderr=sys.stderr, comar_sockname=None): """Initialize PiSi subsystem""" # UI comes first if ui is None: from pisi.cli import CLI if options: ctx.ui = CLI(options.debug, options.verbose) else: ctx.ui = CLI() else: ctx.ui = ui if os.access('/var/log', os.W_OK): handler = logging.handlers.RotatingFileHandler('/var/log/pisi.log') #handler.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)-12s: %(levelname)-8s %(message)s') handler.setFormatter(formatter) ctx.log = logging.getLogger('pisi') ctx.log.addHandler(handler) ctx.loghandler = handler ctx.log.setLevel(logging.DEBUG) else: ctx.log = None # If given define stdout and stderr. Needed by buildfarm currently # but others can benefit from this too. if stdout: ctx.stdout = stdout if stderr: ctx.stderr = stderr import pisi.config ctx.config = pisi.config.Config(options) # TODO: this is definitely not dynamic beyond this point! ctx.comar = comar and not ctx.config.get_option('ignore_comar') # This is for YALI, used in comariface.py:make_com() ctx.comar_sockname = comar_sockname # initialize repository databases ctx.database = database if database: shelve.init_dbenv(write=write) ctx.repodb = pisi.repodb.init() ctx.installdb = pisi.installdb.init() ctx.filesdb = pisi.files.FilesDB() ctx.componentdb = pisi.component.ComponentDB() ctx.packagedb = packagedb.init_db() ctx.sourcedb = pisi.sourcedb.init() pisi.search.init(['summary', 'description'], ['en', 'tr']) else: ctx.repodb = None ctx.installdb = None ctx.filesdb = None ctx.componentdb = None ctx.packagedb = None ctx.sourcedb = None ctx.ui.debug('PISI API initialized') ctx.initialized = True