def deps_resolve(self, package, resolved, unresolved): self.unresolved = unresolved self.unresolved.append(package) for dep in db.get(package.requires): if dep.name not in [_dep.name for _dep in self.resolved]: if dep.name in [_dep.name for _dep in self.unresolved]: raise ReinstallerException('Circular reference detected: %s -> %s' % (package.name, dep.name)) self.deps_resolve(dep, self.resolved, self.unresolved) self.resolved.append(package) self.unresolved.remove(package)
def deps_resolve(self, package, resolved, unresolved, level=0): logger.debug("[%s] %s: %s" % (level, package.name ,package.requires)) self.unresolved = unresolved self.unresolved.append(package) for dep in db.get(package.requires, regexp = False): if dep.name not in [_dep.name for _dep in self.resolved]: if dep.name in [_dep.name for _dep in self.unresolved]: raise InstallerException('Circular reference detected: %s -> %s' % (package.name, dep.name)) self.deps_resolve(dep, self.resolved, self.unresolved, level+1) self.resolved.append(package) self.unresolved.remove(package)
def deps_resolve(self, package, resolved, unresolved): self.unresolved = unresolved self.unresolved.append(package) for dep in db.get(package.requires): if dep.name not in [_dep.name for _dep in self.resolved]: if dep.name in [_dep.name for _dep in self.unresolved]: raise ReinstallerException( 'Circular reference detected: %s -> %s' % (package.name, dep.name)) self.deps_resolve(dep, self.resolved, self.unresolved) self.resolved.append(package) self.unresolved.remove(package)
def deps_resolve(self, package, resolved, unresolved, level=0): logger.debug("[%s] %s: %s" % (level, package.name, package.requires)) self.unresolved = unresolved self.unresolved.append(package) for dep in db.get(package.requires, regexp=False): if dep.name not in [_dep.name for _dep in self.resolved]: if dep.name in [_dep.name for _dep in self.unresolved]: raise InstallerException( 'Circular reference detected: %s -> %s' % (package.name, dep.name)) self.deps_resolve(dep, self.resolved, self.unresolved, level + 1) self.resolved.append(package) self.unresolved.remove(package)
def feed(self, packages): if not isinstance(packages, list): packages = [packages] for package in packages: if not isinstance(package, Package): packages += db.get(package) del packages[packages.index(package)] for package in packages: if package not in self.packages: if package.status not in ['10']: self.packages.append(package) else: stream_logger.info(' - %s not installed' % package.name)
def feed(self, packages): if not isinstance(packages, list): packages = [packages] for package in packages: if not isinstance(package, Package): packages += db.get(package) del packages[packages.index(package)] for package in packages: if package not in self.packages: if package.status in ["1", "2"]: self.packages.append(package) elif package.status == "0": stream_logger.info(" - %s already up-to-date" % package.name) elif package.status == "10": stream_logger.info(" - %s not installed" % package.name) elif package.status in ["11", "12"]: stream_logger.info(" - %s can not be downgraded" % package.name) else: stream_logger.info(" - %s can not be updated" % package.name)
def feed(self, packages): if not isinstance(packages, list): packages = [packages] for package in packages: if not isinstance(package, Package): packages += db.get(package) del packages[packages.index(package)] for package in packages: if package not in self.packages: if package.status in ['1', '2']: self.packages.append(package) elif package.status == '0': stream_logger.info(' - %s already up-to-date' % package.name) elif package.status == '10': stream_logger.info(' - %s not installed' % package.name) elif package.status in ['11', '12']: stream_logger.info(' - %s can not be downgraded' % package.name) else: stream_logger.info(' - %s can not be updated' % package.name)
def start(self): ################### # conf # ################### if self.args.get('conf', False): get_conf() ################### # stats # ################### if self.args.get('stats', False): get_stats() ################### # list # ################### elif self.args.get('list', False): get_view() ################### # update # ################### elif self.args.get('update', False): stream_logger.info('=> Update') try: db.sync() except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() ################### # clean # ################### elif self.args.get('clean', False): stream_logger.info('=> Cleaning') clean() ################### # reinstall # ################### elif self.args.get('reinstall', False): # Sync Database stream_logger.info('=> Updating') try: db.sync() except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() # Create installer stream_logger.info('=> Resolving') reinstaller = Reinstaller() if not isinstance(self.args['<package>'], list): packages = [self.args['<package>']] else: packages = self.args['<package>'] try: if self.args.get('--with-deps', False): for package in db.get(packages): try: reinstaller.resolve(package) reinstaller.feed(reinstaller.resolved) except RuntimeError as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) stream_logger.info('!! Dependencies resolve failed (%s)' % err) sys.exit(1) else: reinstaller.feed(db.get(packages)) except DatabaseException as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() if not reinstaller.packages: stream_logger.info('=> No package(s) to reinstall') sys.exit(0) stream_logger.info('=> Following packages will be reinstalled:') for package in reinstaller.packages: stream_logger.info(' - %s' % package.name) if not self.args.get('--force-yes', False): if confirm(): reinstaller.download() try: reinstaller.reinstall(ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) raise else: stream_logger.info('Abort.') sys.exit(1) else: reinstaller.download() try: reinstaller.reinstall(ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) raise ################### # install # ################### elif self.args.get('install', False): # Sync Database stream_logger.info('=> Updating') try: db.sync() except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() # Create installer installer = Installer() # Resolve deps stream_logger.info('=> Resolving dependencies') if not isinstance(self.args['<package>'], list): packages = [self.args['<package>']] else: packages = self.args['<package>'] try: for package in db.get(packages): try: installer.resolve(package) installer.feed(installer.resolved) except RuntimeError as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) stream_logger.info('!! Dependencies resolve failed (%s)' % err) sys.exit(1) except DatabaseException as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() if not installer.packages: stream_logger.info(' - No package(s) found') sys.exit(1) stream_logger.info('=> Following dependencies will be installed:') for dep in installer.packages: stream_logger.info(' - %s' % dep.name) if not self.args.get('--force-yes', False): if confirm(): installer.download() try: installer.install(ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) raise else: stream_logger.info('Abort.') sys.exit(1) else: installer.download() try: installer.install(ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) raise ################### # upgrade # ################### elif self.args.get('upgrade', False): # Sync Database stream_logger.info('=> Updating') try: db.sync() except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() # Create Upgrader upgrader = Upgrader() stream_logger.info('=> Resolving') if not isinstance(self.args['<package>'], list): packages = [self.args['<package>']] else: packages = self.args['<package>'] if not packages: upgrader.feed(db.get_upgrades()) else: upgrader.feed(packages) if not upgrader.packages: stream_logger.info('!! No package(s) to upgrade') sys.exit(0) stream_logger.info('=> Following packages will be upgraded:') for package in upgrader.packages: stream_logger.info(' - %s' % package.name) if not self.args.get('--force-yes', False): if confirm(): upgrader.download() try: upgrader.upgrade(ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) raise else: stream_logger.info('Abort.') sys.exit(1) else: upgrader.download() try: upgrader.upgrade(ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) raise ################### # remove # ################### elif self.args.get('remove', False): # Create remover remover = Remover() packages = db.get(self.args.get('<package>')) try: remover.feed(packages) except DatabaseException as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() if not remover.packages: sys.exit(0) stream_logger.info('=> Following packages will be removed:') for package in remover.packages: stream_logger.info(' - %s' % package.name) if not self.args.get('--force-yes', False): if confirm(): remover.remove(ignore_errors=self.args.get('--ignore-errors', False)) else: stream_logger.info('Abort.') sys.exit(1) else: try: remover.remove(ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger','level')) >= 2: traceback.print_exc(file=sys.stdout) raise ########## # search # ########## elif self.args.get('search', False): packages = db.get(self.args.get('<package>')) if not packages: stream_logger.info('!! No package found') sys.exit(1) for package in packages: stream_logger.info('Name: %s' % package.name) if package in db.get_installed(): stream_logger.info('Version: %s-%s' % (package.version, package.release)) stream_logger.info('Status: %s' % status[package.status]) else: stream_logger.info('Version: %s-%s' % (package.repo_version, package.repo_release)) stream_logger.info('Status: %s' % status[package.status]) stream_logger.info('Requires: %s' % ','.join(package.requires)) stream_logger.info('Description: %s' % package.description) stream_logger.info('Architecture: %s' % package.arch) stream_logger.info('Distribution: %s' % package.dist) stream_logger.info('Distribution version: %s' % package.vers) if package is not packages[-1]: stream_logger.info('') sys.exit(0)
def start(self): ################### # conf # ################### if self.args.get('conf', False): get_conf() ################### # stats # ################### if self.args.get('stats', False): get_stats() ################### # list # ################### elif self.args.get('list', False): get_view() ################### # update # ################### elif self.args.get('update', False): stream_logger.info('=> Update') try: db.sync() except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() ################### # clean # ################### elif self.args.get('clean', False): stream_logger.info('=> Cleaning') clean() ################### # reinstall # ################### elif self.args.get('reinstall', False): # Sync Database stream_logger.info('=> Updating') try: db.sync() except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() # Create installer stream_logger.info('=> Resolving') reinstaller = Reinstaller() if not isinstance(self.args['<package>'], list): packages = [self.args['<package>']] else: packages = self.args['<package>'] try: if self.args.get('--with-deps', False): for package in db.get(packages): try: reinstaller.resolve(package) reinstaller.feed(reinstaller.resolved) except RuntimeError as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) stream_logger.info( '!! Dependencies resolve failed (%s)' % err) sys.exit(1) else: reinstaller.feed(db.get(packages)) except DatabaseException as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() if not reinstaller.packages: stream_logger.info('=> No package(s) to reinstall') sys.exit(0) stream_logger.info('=> Following packages will be reinstalled:') for package in reinstaller.packages: stream_logger.info(' - %s' % package.name) if not self.args.get('--force-yes', False): if confirm(): reinstaller.download() try: reinstaller.reinstall(ignore_errors=self.args.get( '--ignore-errors', False)) except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) raise else: stream_logger.info('Abort.') sys.exit(1) else: reinstaller.download() try: reinstaller.reinstall( ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) raise ################### # install # ################### elif self.args.get('install', False): # Sync Database stream_logger.info('=> Updating') try: db.sync() except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() # Create installer installer = Installer() # Resolve deps stream_logger.info('=> Resolving dependencies') if not isinstance(self.args['<package>'], list): packages = [self.args['<package>']] else: packages = self.args['<package>'] try: for package in db.get(packages): try: installer.resolve(package) installer.feed(installer.resolved) except RuntimeError as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) stream_logger.info( '!! Dependencies resolve failed (%s)' % err) sys.exit(1) except DatabaseException as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() if not installer.packages: stream_logger.info(' - No package(s) found') sys.exit(1) stream_logger.info('=> Following dependencies will be installed:') for dep in installer.packages: stream_logger.info(' - %s' % dep.name) if not self.args.get('--force-yes', False): if confirm(): installer.download() try: installer.install(ignore_errors=self.args.get( '--ignore-errors', False)) except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) raise else: stream_logger.info('Abort.') sys.exit(1) else: installer.download() try: installer.install( ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) raise ################### # upgrade # ################### elif self.args.get('upgrade', False): # Sync Database stream_logger.info('=> Updating') try: db.sync() except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() # Create Upgrader upgrader = Upgrader() stream_logger.info('=> Resolving') if not isinstance(self.args['<package>'], list): packages = [self.args['<package>']] else: packages = self.args['<package>'] if not packages: upgrader.feed(db.get_upgrades()) else: upgrader.feed(packages) if not upgrader.packages: stream_logger.info('!! No package(s) to upgrade') sys.exit(0) stream_logger.info('=> Following packages will be upgraded:') for package in upgrader.packages: stream_logger.info(' - %s' % package.name) if not self.args.get('--force-yes', False): if confirm(): upgrader.download() try: upgrader.upgrade(ignore_errors=self.args.get( '--ignore-errors', False)) except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) raise else: stream_logger.info('Abort.') sys.exit(1) else: upgrader.download() try: upgrader.upgrade( ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) raise ################### # remove # ################### elif self.args.get('remove', False): # Create remover remover = Remover() packages = db.get(self.args.get('<package>')) try: remover.feed(packages) except DatabaseException as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) self.error_link() if not remover.packages: sys.exit(0) stream_logger.info('=> Following packages will be removed:') for package in remover.packages: stream_logger.info(' - %s' % package.name) if not self.args.get('--force-yes', False): if confirm(): remover.remove( ignore_errors=self.args.get('--ignore-errors', False)) else: stream_logger.info('Abort.') sys.exit(1) else: try: remover.remove( ignore_errors=self.args.get('--ignore-errors', False)) except Exception as err: if int(conf.get('logger', 'level')) >= 2: traceback.print_exc(file=sys.stdout) raise ########## # search # ########## elif self.args.get('search', False): packages = db.get(self.args.get('<package>')) if not packages: stream_logger.info('!! No package found') sys.exit(1) for package in packages: stream_logger.info('Name: %s' % package.name) if package in db.get_installed(): stream_logger.info('Version: %s-%s' % (package.version, package.release)) stream_logger.info('Status: %s' % status[package.status]) else: stream_logger.info( 'Version: %s-%s' % (package.repo_version, package.repo_release)) stream_logger.info('Status: %s' % status[package.status]) stream_logger.info('Requires: %s' % ','.join(package.requires)) stream_logger.info('Description: %s' % package.description) stream_logger.info('Architecture: %s' % package.arch) stream_logger.info('Distribution: %s' % package.dist) stream_logger.info('Distribution version: %s' % package.vers) if package is not packages[-1]: stream_logger.info('') sys.exit(0)