def remove(self, ignore_errors=False): # Think about ignore_errors stream_logger.info(" - %s" % self.name) # If archive not already extract if not os.path.exists("%s/%s" % (conf.get("settings", "cache"), self.name)): self.unarchive() self.import_control() # Pre Remove stream_logger.info(" | Pre Remove") self.control.pre_remove() # Remove stream_logger.info(" | Remove") files_list = open(os.path.join(conf.get("settings", "cache"), self.name, "files.lst")).readlines() for _file in files_list: try: os.remove(os.path.join(conf.get("settings", "packages"), _file.replace("\n", ""))) except: pass # Post Remove stream_logger.info(" | Post Remove") self.control.post_remove() stream_logger.info(" | Clean") shutil.rmtree(os.path.join(conf.get("settings", "cache"), self.name))
def sync(self): self.load() stream_logger.info(' | Retrieving %s/%s/%s/Packages.json' % ( conf.get('repo', 'url'), conf.get('repo', 'base'), conf.get('repo', 'branch'))) db_remote = Database(content=get_database()) for package in db_remote.packages.values(): # Check installed if package.name not in self.packages.keys(): package.status = '10' self.packages[package.name] = package elif self.packages[package.name].status == '10': package.status = '10' # Check version elif package.version > self.packages[package.name].version: package.status = '1' elif package.version < self.packages[package.name].version: package.status = '11' # Check release elif package.release > self.packages[package.name].release: package.status = '2' elif package.release < self.packages[package.name].release: package.status = '12' # Up-to-date else: package.status = '0' if package.status in ['1','2','11','12']: package.repo_version = package.version package.repo_release = package.release package.version = self.packages[package.name].version package.release = self.packages[package.name].release elif package.status in ['10']: package.repo_version = package.version package.repo_release = package.release package.version = '' package.release = '' else: package.repo_versions = '' package.repo_release = '' self.packages[package.name] = package for package in self.packages.values(): if package.name not in db_remote.packages.keys(): if package.status in ['10']: del self.packages[package.name] # Save databases self.save() # Save informations if not os.path.exists(conf.get('paths', 'infos')): open(conf.get('paths', 'infos'), 'w').close() infos = json.dump( {'last_update': time.ctime()}, open(conf.get('paths', 'infos'), 'w'))
def remove(self, ignore_errors=False): # Think about ignore_errors stream_logger.info(' - %s' % self.name) # If archive not already extract if not os.path.exists('%s/%s' % (conf.get('settings', 'cache'), self.name)): self.unarchive() self.import_control() # Pre Remove stream_logger.info(' | Pre Remove') self.control.pre_remove() # Remove stream_logger.info(' | Remove') files_list = open( os.path.join(conf.get('settings', 'cache'), self.name, 'files.lst')).readlines() for _file in files_list: try: os.remove( os.path.join(conf.get('settings', 'packages'), _file.replace('\n', ''))) except: pass # Post Remove stream_logger.info(' | Post Remove') self.control.post_remove() stream_logger.info(' | Clean') shutil.rmtree(os.path.join(conf.get('settings', 'cache'), self.name))
def reinstall(self, ignore_errors=False): if not self.packages: raise ReinstallerException('Nothing to reinstall') stream_logger.info(' :: Reinstall') for package in self.packages: package.install(ignore_errors) stream_logger.info(' | Update database') db.add(package)
def sync(self): self.load() stream_logger.info(' | Retrieving %s/%s/%s/Packages.json' % (conf.get('repo', 'url'), conf.get( 'repo', 'base'), conf.get('repo', 'branch'))) db_remote = Database(content=get_database()) for package in db_remote.packages.values(): # Check installed if package.name not in self.packages.keys(): package.status = '10' self.packages[package.name] = package elif self.packages[package.name].status == '10': package.status = '10' # Check version elif package.version > self.packages[package.name].version: package.status = '1' elif package.version < self.packages[package.name].version: package.status = '11' # Check release elif package.release > self.packages[package.name].release: package.status = '2' elif package.release < self.packages[package.name].release: package.status = '12' # Up-to-date else: package.status = '0' if package.status in ['1', '2', '11', '12']: package.repo_version = package.version package.repo_release = package.release package.version = self.packages[package.name].version package.release = self.packages[package.name].release elif package.status in ['10']: package.repo_version = package.version package.repo_release = package.release package.version = '' package.release = '' else: package.repo_versions = '' package.repo_release = '' self.packages[package.name] = package for package in self.packages.values(): if package.name not in db_remote.packages.keys(): if package.status in ['10']: del self.packages[package.name] # Save databases self.save() # Save informations if not os.path.exists(conf.get('paths', 'infos')): open(conf.get('paths', 'infos'), 'w').close() infos = json.dump({'last_update': time.ctime()}, open(conf.get('paths', 'infos'), 'w'))
def download(self): stream_logger.info(" :: Download") for package in self.packages: logger.info("Download %s" % package.name) get_package(package) if not checkmd5(package): logger.info("%s md5 invalid" % package.name) stream_logger.info(" | Md5 invalid, package corrumpt") raise UpgraderException("Invalid Md5")
def download(self): stream_logger.info(' :: Download') for package in self.packages: logger.info('Download %s' % package.name) get_package(package) if not checkmd5(package): logger.info('%s md5 invalid' % package.name) stream_logger.info(' | Md5 invalid, package corrumpt') raise UpgraderException('Invalid Md5')
def upgrade(self, ignore_errors=False): if not self.packages: raise UpgraderException("Nothing to upgrade") stream_logger.info(" :: Upgrade") for package in self.packages: package.upgrade(ignore_errors) stream_logger.info(" | Update database") package.status = "0" package.version = package.repo_version package.release = package.repo_release package.repo_version = "" package.repo_release = "" db.add(package)
def install(self, ignore_errors=False): if not self.packages: raise InstallerException('Nothing to install') stream_logger.info(' :: Install') for package in self.packages: package.install(ignore_errors=ignore_errors) stream_logger.info(' | Update database') package.status = "0" package.version = package.repo_version package.release = package.repo_release package.repo_version = '' package.repo_release = '' db.add(package)
def remove(self, ignore_errors=False): if not self.packages: raise RemoverException('Nothing to remove') stream_logger.info(' :: Remove') for package in self.packages: package.remove(ignore_errors) stream_logger.info(' | Update database') package.status = "10" package.repo_version = package.version package.repo_release = package.release package.version = '' package.release = '' db.add(package)
def download(self): stream_logger.info(' :: Download') for package in self.packages: logger.info('Download %s' % package.name) # Not cached if not cached(package): logger.info('%s not cached' % package.name) get_package(package) # Invalid Md5 if not checkmd5(package): logger.info('%s md5 invalid' % package.name) stream_logger.info(' | Md5 invalid, package corrumpt') raise InstallerException('Invalid Md5') # Cached else: logger.info('%s already in cache' % package.name) # Invalid Md5, redownload if not checkmd5(package): logger.info('%s cache package md5 invalid' % package.name) get_package(package) if not checkmd5(package): logger.info('%s md5 invalid' % package.name) stream_logger.info( ' | Md5 invalid, package corrumpt') raise InstallerException('Invalid Md5') else: stream_logger.info(' | %s already in cache' % package.name)
def download(self): stream_logger.info(' :: Download') for package in self.packages: logger.info('Download %s' % package.name) # Not cached if not cached(package): logger.info('%s not cached' % package.name) get_package(package) # Invalid Md5 if not checkmd5(package): logger.info('%s md5 invalid' % package.name) stream_logger.info(' | Md5 invalid, package corrumpt') raise ReinstallerException('Invalid Md5') # Cached else: logger.info('%s already in cache' % package.name) # Invalid Md5, redownload if not checkmd5(package): logger.info('%s cache package md5 invalid' % package.name) get_package(package) if not checkmd5(package): logger.info('%s md5 invalid' % package.name) stream_logger.info(' | Md5 invalid, package corrumpt') raise ReinstallerException('Invalid Md5') else: stream_logger.info(' | %s already in cache' % 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 not in ['10']: self.packages.append(package) else: stream_logger.info(' - %s not installed' % package.name)
def get_view(): if not os.path.exists(conf.get('paths', 'infos')): last_update = "Never" else: last_update = json.load(open(conf.get('paths', 'infos')))['last_update'] header = """ System : %s %s %s Repo : %s/%s/%s Last Update : %s """ % (conf.get('system', 'dist').title(), conf.get( 'system', 'vers'), conf.get('system', 'arch'), conf.get('repo', 'url'), conf.get('repo', 'base'), conf.get('repo', 'branch'), last_update) fmt = [('Name', 'name', 25), ('Version', 'version', 25), ('Status', 'status', 20)] data = [] # Package.db for name, package in db.packages.items(): # Version output if package.repo_version: if not package.version: version = '[%s-%s]' % (package.repo_version, package.repo_release) else: version = '%s-%s [%s-%s]' % (package.version, package.release, package.repo_version, package.repo_release) else: version = package.version + '-' + package.release data.append({ 'name': name, 'version': version, 'status': status[package.status] }) if not data: stream_logger.info(header) stream_logger.info('No package installed') return data = sorted(data, key=lambda k: k['name']) stream_logger.info(header) stream_logger.info(TablePrinter(fmt, data, ul='-'))
def get_view(): if not os.path.exists(conf.get('paths', 'infos')): last_update = "Never" else: last_update = json.load(open(conf.get('paths', 'infos')))['last_update'] header = """ System : %s %s %s Repo : %s/%s/%s Last Update : %s """ % ( conf.get('system', 'dist').title(), conf.get('system', 'vers'), conf.get('system', 'arch'), conf.get('repo', 'url'), conf.get('repo', 'base'), conf.get('repo', 'branch'), last_update) fmt = [ ('Name', 'name', 25), ('Version', 'version', 25), ('Status', 'status', 20)] data = [] # Package.db for name, package in db.packages.items(): # Version output if package.repo_version: if not package.version: version = '[%s-%s]' % (package.repo_version, package.repo_release) else: version = '%s-%s [%s-%s]' % ( package.version, package.release, package.repo_version, package.repo_release) else: version = package.version + '-' + package.release data.append({ 'name': name, 'version': version, 'status': status[package.status]}) if not data: stream_logger.info(header) stream_logger.info('No package installed') return data = sorted(data, key=lambda k: k['name']) stream_logger.info(header) stream_logger.info(TablePrinter(fmt, data, ul='-'))
def confirm(prompt=None, resp=False): try: if prompt is None: prompt = 'Do you want to continue' if resp: prompt = '%s [%s|%s]? ' % (prompt, 'n', 'Y') else: prompt = '%s [%s|%s]? ' % (prompt, 'y', 'N') while True: ans = raw_input(prompt) if not ans: return resp if ans == 'y' or ans == 'Y': return True if ans == 'n' or ans == 'N': return False else: return False except KeyboardInterrupt: stream_logger.info('\nAbort.') sys.exit(1)
def error_link(self, exit=True): stream_logger.info( '!! Sorry Ubik failed. Please report this issue on my bug tracker') stream_logger.info( '!! Before post issue, please set logging at least at level 2. Thanks!' ) stream_logger.info( 'Link: https://github.com/toxinu/ubik/issues?state=open') if exit: sys.exit(1)
def get_conf(): fmt = [('Section/Key', 'key', 25), ('Value', 'value', 50)] data = [] for section in conf.sections(): for key, value in conf.items(section): data.append({'key': '%s/%s' % (section, key), 'value': value}) stream_logger.info('') stream_logger.info(TablePrinter(fmt, data, ul='-')) stream_logger.info('')
def get_stats(): fmt = [ ('Key', 'info', 25), ('Value', 'data', 5)] data = [{ 'info': 'Installed packages', 'data': db.count_installed()}, { 'info': 'Updates available', 'data': db.count_upgrades()}, { 'info': 'Total packages', 'data': db.count_packages()}] stream_logger.info('') stream_logger.info(TablePrinter(fmt, data, ul='=')) stream_logger.info('')
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 get_stats(): fmt = [('Key', 'info', 25), ('Value', 'data', 5)] data = [{ 'info': 'Installed packages', 'data': db.count_installed() }, { 'info': 'Updates available', 'data': db.count_upgrades() }, { 'info': 'Total packages', 'data': db.count_packages() }] stream_logger.info('') stream_logger.info(TablePrinter(fmt, data, ul='=')) stream_logger.info('')
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 upgrade(self, ignore_errors=False): # Think about ignore_errors stream_logger.info(" - %s" % self.name) stream_logger.info(" | Unarchive") self.unarchive() self.import_control() # Pre-upgrade stream_logger.info(" | Pre Upgrade") self.control.pre_upgrade() stream_logger.info(" | Unpack") unpacker(self) # Post-upgrade stream_logger.info(" | Post Upgrade") self.control.post_upgrade() stream_logger.info(" | Clean") shutil.rmtree("%s/%s" % (conf.get("settings", "cache"), self.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 upgrade(self, ignore_errors=False): # Think about ignore_errors stream_logger.info(' - %s' % self.name) stream_logger.info(' | Unarchive') self.unarchive() self.import_control() # Pre-upgrade stream_logger.info(' | Pre Upgrade') self.control.pre_upgrade() stream_logger.info(' | Unpack') unpacker(self) # Post-upgrade stream_logger.info(' | Post Upgrade') self.control.post_upgrade() stream_logger.info(' | Clean') shutil.rmtree('%s/%s' % (conf.get('settings', 'cache'), self.name))
def error_link(self, exit=True): stream_logger.info('!! Sorry Ubik failed. Please report this issue on my bug tracker') stream_logger.info('!! Before post issue, please set logging at least at level 2. Thanks!') stream_logger.info('Link: https://github.com/socketubs/ubik/issues?state=open') if exit: sys.exit(1)
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)