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 get_logger(log_file=conf.get('settings', 'log_file'), name='ubik', level=conf.get('logger', 'level')): """ Ubik file logger """ # Create log file if not exist if not os.path.exists(log_file): open(log_file, 'w').close() logger = logging.getLogger('ubik') # Create file handler which logs even debug messages fh = logging.FileHandler(log_file) # Create console handler with a higher log level ch = logging.StreamHandler() # Create formatter and add it to the handlers formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) fh.setFormatter(formatter) # Set logger level if level == "2": logger.setLevel(logging.ERROR) fh.setLevel(logging.ERROR) elif level == "3": logger.setLevel(logging.DEBUG) fh.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) fh.setLevel(logging.INFO) ch.setLevel(logging.ERROR) # Add the handlers to logger logger.addHandler(ch) logger.addHandler(fh) return logger
def unarchiver(package): src = os.path.join(conf.get('settings', 'cache'), package.name + ".tar") dst = conf.get('settings', 'cache') # Open tarfile tar = tarfile.open(src) if tarfile.is_tarfile(src): tar.extractall(dst) else: raise Exception('Archive invalid (not a tarfile)')
def post_upgrade(self): # Go to tmp and extract pacakge os.chdir(os.path.join(conf.get("settings", "packages"), "tmp", "ubik")) os.system("tar xvf %s" % self.archive_name) # Go into package and install it os.chdir(self.dir_name) os.system("python setup.py install --upgrade --no-compile --prefix=%s" % conf.get("settings", "packages")) # Clean package dir and archive os.chdir(os.path.join(conf.get("settings", "packages"), "tmp", "ubik")) rmtree(self.dir_name) os.remove(self.archive_name)
def check_system(self, package): if package.arch != conf.get('system', 'arch'): if package.arch != "noarch": return False if package.dist != conf.get('system', 'dist'): if package.dist != "nodist": return False if package.vers != conf.get('system', 'vers'): if package.vers != "novers": return False return True
def get_proxies(): proxies = {} proxies['http'] = os.environ.get('http_proxy', '') proxies['https'] = os.environ.get('https_proxy', '') if conf.has_section('proxy'): if conf.has_option('proxy', 'http_proxy') and conf.get('proxy', 'http_proxy'): proxies['http'] = conf.get('proxy', 'http_proxy') if conf.has_option('proxy', 'https_proxy'): proxies['https'] = conf.get('proxy', 'https_proxy') return proxies
def post_upgrade(self): # Go to tmp and extract pacakge os.chdir(os.path.join(conf.get('settings', 'packages'), 'tmp', 'ubik')) os.system('tar xvf %s' % self.archive_name) # Go into package and install it os.chdir(self.dir_name) os.system('python setup.py install --upgrade --no-compile --prefix=%s' % conf.get('settings', 'packages')) # Clean package dir and archive os.chdir(os.path.join(conf.get('settings', 'packages'), 'tmp', 'ubik')) rmtree(self.dir_name) os.remove(self.archive_name)
def import_control(self): initial_dir = os.getcwd() #os.chdir(conf.get('settings', 'cache')) sys.path.append(os.path.join(conf.get('settings', 'cache'), self.name)) # Clean control module if already loaded if 'control' in sys.modules: del sys.modules['control'] control_module = __import__('control') sys.path.remove(os.path.join(conf.get('settings', 'cache'), self.name)) self.control = control_module.Package() os.chdir(initial_dir)
def import_control(self): initial_dir = os.getcwd() # os.chdir(conf.get('settings', 'cache')) sys.path.append(os.path.join(conf.get("settings", "cache"), self.name)) # Clean control module if already loaded if "control" in sys.modules: del sys.modules["control"] control_module = __import__("control") sys.path.remove(os.path.join(conf.get("settings", "cache"), self.name)) self.control = control_module.Package() os.chdir(initial_dir)
def post_upgrade(self): # Go to tmp and extract pacakge os.chdir(os.path.join(conf.get('settings', 'packages'), 'tmp', 'ubik')) os.system('tar xvf %s' % self.archive_name) # Go into package and install it os.chdir(self.dir_name) os.system( 'python setup.py install --upgrade --no-compile --prefix=%s' % conf.get('settings', 'packages')) # Clean package dir and archive os.chdir(os.path.join(conf.get('settings', 'packages'), 'tmp', 'ubik')) rmtree(self.dir_name) os.remove(self.archive_name)
def unpacker(package): archive = tarfile.open(os.path.join(conf.get('settings', 'cache'), package.name, 'files.bz2'), 'r:bz2', ignore_zeros=True) root_content = os.path.join(conf.get('settings', 'cache'), package.name, 'content') if os.path.exists(root_content): shutil.rmtree(root_content) os.makedirs(root_content) archive.extractall(root_content) for (path, dirs, files) in os.walk(root_content): for _dir in dirs: src = os.path.join(path, _dir) dst = '%s' % src.replace(root_content, conf.get('settings', 'packages')) if os.path.islink(src): linkto = os.readlink(src) os.remove(dst) os.symlink(linkto, dst) elif not os.path.exists(dst): os.makedirs(dst) for _file in files: src = os.path.join(path, _file) dst = '%s' % src.replace(root_content, conf.get('settings', 'packages')) # If safe_conf if conf.get('packages', 'safe_conf') == 'True': # Is etc if path.replace(root_content, '')[1:].split('/')[0] == 'etc': # Is file in etc if os.path.isfile(os.path.join(path, _file)): # If file already exist if os.path.exists(dst): if filecmp.cmp(src, dst): logger.info('CONFIG: config file not modified') continue logger.info('CONFIG: config file conflict: %s' % os.path.join(path, _file)) dst += '.new' logger.debug(" :: %s - %s" % (src, dst)) if os.path.islink(src): linkto = os.readlink(src) if os.path.lexists(dst): os.remove(dst) os.symlink(linkto, dst) else: shutil.copy2(src, dst) shutil.rmtree(root_content) archive.close()
def cached(package): if not isinstance(package, ubik.package.Package): raise CoreException('Need to be a Package object') if not os.path.exists(os.path.join(conf.get('settings', 'cache'), package.name + ".tar")): return False return True
def get_database(file_path=None): url = '%s/%s/%s/Packages.json' % ( conf.get('repo', 'url'), conf.get('repo', 'base'), conf.get('repo', 'branch')) proxies = get_proxies() timeout = get_timeout() r = requests.get(url, timeout=timeout, proxies=proxies) r.raise_for_status() if file_path: if os.path.exists(file_path): os.remove(file_path) json.dump(r.json, open(file_path, 'w')) return r else: return r.json()
def build(self): stream_logger.info('Building...') os.chdir(self.src_dir) os.system('curl -k -L https://github.com/max-horvath/htop-osx/tarball/%s-2012-04-18 | tar zx' % self.version) os.chdir('max-horvath-htop-osx-d92a7d4') os.system('./autogen.sh') os.system('./configure --disable-dependency-tracking --prefix=%s' % conf.get('settings', 'packages')) os.system('make')
def cached(package): if not isinstance(package, ubik.package.Package): raise CoreException('Need to be a Package object') if not os.path.exists( os.path.join(conf.get('settings', 'cache'), package.name + ".tar")): return False return True
def build(self): stream_logger.info("Building...") os.chdir(self.src_dir) os.system("wget http://ftp.gnu.org/gnu/wget/wget-%s.tar.gz" % self.version) os.system("tar xvf wget-%s.tar.gz" % self.version) os.system("rm wget-%s.tar.gz" % self.version) os.chdir("wget-%s" % self.version) os.system("./configure --prefix=%s" % conf.get("settings", "packages")) os.system("make")
def build(self): stream_logger.info('Building...') os.chdir(self.src_dir) os.system('wget http://ftp.gnu.org/gnu/wget/wget-%s.tar.gz' % self.version) os.system('tar xvf wget-%s.tar.gz' % self.version) os.system('rm wget-%s.tar.gz' % self.version) os.chdir('wget-%s' % self.version) os.system('./configure --prefix=%s' % conf.get('settings', 'packages')) os.system('make')
def get_package(package): if not isinstance(package, ubik.package.Package): raise Exception('Must be a Package object') url = '%s/%s/%s/%s/%s/%s/%s.tar' % ( conf.get('repo', 'url'), conf.get('repo', 'base'), conf.get('repo', 'branch'), package.arch, package.dist, package.vers, package.name ) proxies = get_proxies() timeout = get_timeout() r = requests.get(url, timeout=timeout, proxies=proxies, stream=False) r.raise_for_status() size = int(r.headers['Content-Length'].strip()) bytes = 0 max_len = 25 end_mark = '. ' if len(package.name) > max_len: _diff = max_len - len(end_mark) package_name = package.name[_diff] + end_mark else: package_name = package.name + (max_len - len(package.name)) * ' ' widgets = [package_name, Bar(marker="=", left="[", right=" "), Percentage(), " ", FileTransferSpeed(), "] ", "{0}MB".format(str(round(size / 1024 / 1024, 2))[:4])] pbar = ProgressBar(widgets=widgets, maxval=size).start() with open('%s/%s.tar' % (conf.get('settings', 'cache'), package.name), 'w') as f: for buf in r.iter_content(1024): if buf: f.write(buf) bytes += len(buf) pbar.update(bytes) pbar.finish()
def build(self): stream_logger.info('Building...') os.chdir(self.src_dir) os.system( 'curl -k -L https://github.com/max-horvath/htop-osx/tarball/%s-2012-04-18 | tar zx' % self.version) os.chdir('max-horvath-htop-osx-d92a7d4') os.system('./autogen.sh') os.system('./configure --disable-dependency-tracking --prefix=%s' % conf.get('settings', 'packages')) os.system('make')
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 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 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 __init__(self): Control.__init__(self) self.name = 'htop' self.version = '0.8.2.1' self.release = '4' self.requires = [] self.arch = '' self.dist = '' self.vers = '' self.description = 'Htop is an interactive process viewer for Linux. It is a text-mode application (for console or X terminals) and requires ncurses.' self.cur_dir = os.getcwd() self.src_dir = os.path.join(os.getcwd(), 'source') self.pkg_dir = os.path.join(os.getcwd(), 'build') self.caveats = """ htop requires root privileges to correctly display all running processes. You can either run the program via `sudo` or set the setuid bit: sudo chown root:wheel %s/bin/htop sudo chmod u+s %s/bin/htop You should be certain that you trust any software you grant root privileges. """ % (conf.get('settings', 'packages'), conf.get('settings', 'packages'))
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 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 checkmd5(package): if not isinstance(package, ubik.package.Package): raise CoreException('Need to be a Package object') package_path = os.path.join(conf.get('settings', 'cache'), package.name + ".tar") fh = open(package_path, 'rb') m = hashlib.md5() while True: data = fh.read(8192) if not data: break m.update(data) if package.md5 != m.hexdigest(): return False return True
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 clean(): files = os.listdir(conf.get('settings', 'cache')) for f in files: logger.debug(f) if not '.tar' in f and os.path.isdir(f): shutil.rmtree(f)
def __init__(self): self.pkg_blacklist = conf.get('packages', 'pkg_blacklist').split() self.packages = []
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 get_timeout(): timeout = 10 if conf.has_option('proxy', 'timeout'): if conf.get('proxy', 'timeout'): timeout = conf.get('proxy', 'timeout') return float(timeout)