def _install_deps(names): ''' Installs missing dependencies ''' aurs, officials = [], names Msg.info(_('Need following packages as dependencies:')) if Config.get('check-deps-from-aur', True): aur_checks = Pacman.check_from_aur(names) aurs = list(filter(lambda k: aur_checks[k], aur_checks)) officials = list(filter(lambda k: not aur_checks[k], aur_checks)) for i in [("AUR", aurs), ("Official", officials)]: if i[1]: Msg.info( _('{0} repository: [{1}]'.format( i[0], ', '.join(i[1])))) else: Msg.info(_('[{0}]'.format(', '.join(names)))) if not Msg.ask(_('Install?')): if Msg.ask(_('Try without installing dependencies?')): return False Msg.info(_('Bye')) LocalRepo.shutdown(1) try: if aurs: LocalRepo.aur_add(aurs) Pacman.install(officials, as_deps=True) return True except LocalRepoError as e: LocalRepo.error(e)
def list(): ''' Prints all repo packages ''' if len(LocalRepo._repo) is 0: Msg.info(_('This repo has no packages')) return for name in sorted(LocalRepo._repo): Msg.info(name, LocalRepo._repo[name].version)
def load_repo(): ''' Loads the repo ''' Msg.process(_('Loading repo: {0}').format(LocalRepo._repo.path)) try: LocalRepo._repo.load() except LocalRepoError as e: LocalRepo.error(e)
def list(): ''' Prints all repo packages ''' if LocalRepo._repo.size is 0: Msg.info(_('This repo has no packages')) return for name in sorted(LocalRepo._repo.packages): Msg.info(name, LocalRepo._repo.package(name).version)
def clear_cache(): ''' Clears the repo cache ''' Msg.process(_('Clearing the cache')) try: LocalRepo._repo.clear_cache() Log.log(_('Cleared cache')) except LocalRepoError as e: LocalRepo.error(e)
def restore_db(): ''' Try to restore the database file ''' Msg.process(_('Restoring database')) try: LocalRepo._repo.restore_db() Log.log(_('Restored Database')) except LocalRepoError as e: LocalRepo.error(e)
def _uninstall_deps(names): ''' Uninstalls previoulsy installed dependencies ''' Msg.info(_('Installed following packages as dependencies:\n[{0}]').format(', '.join(names))) if Msg.ask(_('Uninstall?')): try: Pacman.uninstall(names) except LocalRepoError as e: LocalRepo.error(e)
def find(q): ''' Searches the repo for packages ''' res = sorted((name for name in LocalRepo._repo if q in name)) if not res: Msg.error(_('No package found')) return for name in res: Msg.info(name, LocalRepo._repo[name].version)
def find(q): ''' Searches the repo for packages ''' res = LocalRepo._repo.find(q) if not res: Msg.error(_('No package found')) return for r in res: Msg.info(r, LocalRepo._repo.package(r).version)
def _uninstall_deps(names): ''' Uninstalls previoulsy installed dependencies ''' Msg.info( _('Installed following packages as dependencies:\n[{0}]').format( ', '.join(names))) if Msg.ask(_('Uninstall?')): try: Pacman.uninstall(names) except LocalRepoError as e: LocalRepo.error(e)
def add(paths, force=False): ''' Adds packages to the repo ''' for path in paths: pkg = LocalRepo._make_package(path) try: Msg.process(_('Adding package to the repo: {0}').format(pkg.name)) LocalRepo._repo.add(pkg, force=force) Log.log(_('Added Package: {0} {1}').format(pkg.name, pkg.version)) except LocalRepoError as e: LocalRepo.error(e)
def add(paths, force=False): ''' Adds packages to the repo ''' for path in paths: pkg = LocalRepo._make_package(path, force=force) try: Msg.process( _('Adding package to the repo: {0}').format(pkg.name)) LocalRepo._repo.add(pkg, force=force) Log.log( _('Added Package: {0} {1}').format(pkg.name, pkg.version)) except LocalRepoError as e: LocalRepo.error(e)
def aur_add(names, force=False): ''' Downloads, makes and adds packages from the AUR ''' Msg.process(_('Retrieving package info from the AUR')) try: pkgs = Aur.packages(names) except LocalRepoError as e: LocalRepo.error(e) for pkg in pkgs.values(): if not force and LocalRepo._repo.has(pkg['name']): Msg.error(_('Package is already in the repo: {0}').format(pkg['name'])) LocalRepo.shutdown(1) LocalRepo.add([pkg['uri']], force=force)
def remove(names): ''' Removes packages from the repo ''' missing = [name for name in names if not LocalRepo._repo.has(name)] if missing: Msg.error(_('Packages do not exist: {0}').format(', '.join(missing))) LocalRepo.shutdown(1) Msg.process(_('Removing packages: {0}').format(', '.join(names))) try: LocalRepo._repo.remove(names) Log.log(_('Removed packages: {0}').format(', '.join(names))) except LocalRepoError as e: LocalRepo.error(e)
def _make_package(path): ''' Makes a new package ''' Msg.process(_('Forging a new package: {0}').format(path)) Log.log(_('Forging a new package: {0}').format(path)) try: return Package.forge(path) except DependencyError as e: LocalRepo._install_deps(e.deps) try: return Package.from_pkgbuild(e.pkgbuild, ignore_deps=True) except LocalRepoError as e: LocalRepo.error(e) except LocalRepoError as e: LocalRepo.error(e)
def remove(names): ''' Removes packages from the repo ''' missing = [name for name in names if name not in LocalRepo._repo] if missing: Msg.error( _('Packages do not exist: {0}').format(', '.join(missing))) LocalRepo.shutdown(1) Msg.process(_('Removing packages: {0}').format(', '.join(names))) try: LocalRepo._repo.remove(names) Log.log(_('Removed packages: {0}').format(', '.join(names))) except LocalRepoError as e: LocalRepo.error(e)
def _make_package(path, force=False): ''' Makes a new package ''' Msg.process(_('Forging a new package: {0}').format(path)) Log.log(_('Forging a new package: {0}').format(path)) try: return Package.forge(path, force=force) except DependencyError as e: installed_deps = LocalRepo._install_deps(e.deps) try: pkg = Package.from_pkgbuild(e.pkgbuild, ignore_deps=True, force=force) except LocalRepoError as e: LocalRepo.error(e) if Config.get('uninstall-deps', True) and installed_deps: LocalRepo._uninstall_deps(e.deps) return pkg except LocalRepoError as e: LocalRepo.error(e)
def check(): ''' Run an integrity check ''' Msg.info(_('{0} packages found').format(LocalRepo._repo.size)) Msg.process(_('Running integrity check')) errors = LocalRepo._repo.check() if not errors: Msg.info(_('No errors found')) Log.log(_('Finished integrity check without any errors')) return Log.log(_('Finished integrity check with errors:')) for e in errors: Msg.result(e) Log.error(e)
def check(): ''' Run an integrity check ''' Msg.info(_('{0} packages found').format(len(LocalRepo._repo))) Msg.process(_('Running integrity check')) errors = LocalRepo._repo.check() if not errors: Msg.info(_('No errors found')) Log.log(_('Finished integrity check without any errors')) return Log.log(_('Finished integrity check with errors:')) for e in errors: Msg.result(e) Log.error(e)
def info(names): ''' Prints all available info of specified packages ''' for name in names: if not LocalRepo._repo.has(name): Msg.error(_('Package does not exist: {0}').format(name)) LocalRepo.shutdown(1) Msg.process(_('Package information: {0}').format(name)) Msg.info(LocalRepo._repo.package(name))
def info(names): ''' Prints all available info of specified packages ''' for name in names: if name not in LocalRepo._repo: Msg.error(_('Package does not exist: {0}').format(name)) LocalRepo.shutdown(1) Msg.process(_('Package information: {0}').format(name)) Msg.info(LocalRepo._repo[name])
def _install_deps(names): ''' Installs missing dependencies ''' Msg.info(_('Need following packages as dependencies:\n[{0}]').format(', '.join(names))) if not Msg.ask(_('Install?')): if Msg.ask(_('Try without installing dependencies?')): return Msg.info(_('Bye')) LocalRepo.shutdown(1) try: Pacman.install(names, as_deps=True) except LocalRepoError as e: LocalRepo.error(e)
def aur_add(names, force=False): ''' Downloads, makes and adds packages from the AUR ''' Msg.process(_('Retrieving package info from the AUR')) pkgs, errors = Aur.packages(names) for e in errors: Msg.error(e) pkgs_uri = [] for pkg in pkgs.values(): if not force and pkg['name'] in LocalRepo._repo: Msg.error( _('Package is already in the repo: {0}').format( pkg['name'])) else: pkgs_uri.append(pkg['uri']) if pkgs_uri: LocalRepo.add(pkgs_uri, force=force)
def aur_upgrade(): ''' Upgrades all packages from the AUR ''' pkgs = [pkg for pkg in LocalRepo._repo if pkg not in Config.get('no-aur-upgrade', [])] Msg.info(_('{0} packages found').format(len(pkgs))) Log.log(_('Starting an AUR upgrade')) if len(pkgs) is 0: Msg.info(_('Nothing to do')) return Msg.process(_('Retrieving package info from the AUR')) pkgs, errors = Aur.packages(pkgs) for e in errors: Msg.error(e) Msg.info(_('{0} packages found').format(len(pkgs))) Msg.process(_('Checking for updates')) updates = [] for name, pkg in ((name, pkg) for name, pkg in pkgs.items() if name in LocalRepo._repo): oldpkg = LocalRepo._repo[name] if oldpkg.has_smaller_version_than(pkg['version']): updates.append(pkg) Msg.result('{0} ({1} -> {2})'.format(name, oldpkg.version, pkg['version'])) if not updates: Msg.info(_('All packages are up to date')) return if not Msg.ask(_('Upgrade?')): Msg.info(_('Bye')) LocalRepo.shutdown(1) LocalRepo.add([pkg['uri'] for pkg in updates], force=True)
def error(error): ''' Prints the error message and shuts down ''' Msg.error(error.message) Log.error(error.message) LocalRepo.shutdown(1)
def aur_upgrade(): ''' Upgrades all packages from the AUR ''' pkgs = [ pkg for pkg in LocalRepo._repo if pkg not in Config.get('no-aur-upgrade', []) ] Msg.info(_('{0} packages found').format(len(pkgs))) Log.log(_('Starting an AUR upgrade')) if len(pkgs) is 0: Msg.info(_('Nothing to do')) return Msg.process(_('Retrieving package info from the AUR')) pkgs, errors = Aur.packages(pkgs) for e in errors: Msg.error(e) Msg.info(_('{0} packages found').format(len(pkgs))) Msg.process(_('Checking for updates')) updates = [] for name, pkg in ((name, pkg) for name, pkg in pkgs.items() if name in LocalRepo._repo): oldpkg = LocalRepo._repo[name] if oldpkg.has_smaller_version_than(pkg['version']): updates.append(pkg) Msg.result('{0} ({1} -> {2})'.format(name, oldpkg.version, pkg['version'])) if not updates: Msg.info(_('All packages are up to date')) return if not Msg.ask(_('Upgrade?')): Msg.info(_('Bye')) LocalRepo.shutdown(1) LocalRepo.add([pkg['uri'] for pkg in updates], force=True)
def vcs_upgrade(): ''' Upgrades all VCS packages from the AUR ''' Msg.process(_('Updating all VCS packages')) Log.log(_('Starting a VCS upgrade')) vcs = [pkg for pkg in LocalRepo._repo if LocalRepo._repo[pkg].is_vcs] if not vcs: Msg.info(_('No VCS packages found')) return Msg.process(_('Retrieving package info from the AUR')) updates, errors = Aur.packages(vcs) for e in errors: Msg.error(e) if not updates: Msg.info(_('No updates found')) return Msg.result('\n'.join(updates)) if not Msg.ask(_('Upgrade?')): Msg.info(_('Bye')) return LocalRepo.add([pkg['uri'] for pkg in updates.values()], force=True)
def repo_info(): ''' Prints some repo info ''' Msg.info(LocalRepo._repo)
def abort(): ''' This called by KeyboardInterrupt ''' Msg.error(_('Execution cancelled by user')) LocalRepo.shutdown(1)
def vcs_upgrade(): ''' Upgrades all VCS packages from the AUR ''' Msg.process(_('Updating all VCS packages')) Log.log(_('Starting a VCS upgrade')) vcs = LocalRepo._repo.vcs_packages if not vcs: Msg.info(_('No VCS packages found')) return Msg.process(_('Retrieving package info from the AUR')) try: updates = Aur.packages(vcs) except LocalRepoError as e: LocalRepo.error(e) Msg.result('\n'.join(updates)) if not Msg.ask(_('Upgrade?')): Msg.info(_('Bye')) return LocalRepo.add([pkg['uri'] for pkg in updates.values()], force=True)
def aur_upgrade(): ''' Upgrades all packages from the AUR ''' Msg.info(_('{0} packages found').format(LocalRepo._repo.size)) Log.log(_('Starting an AUR upgrade')) if LocalRepo._repo.size is 0: Msg.info(_('Nothing to do')) return Msg.process(_('Retrieving package info from the AUR')) try: pkgs = Aur.packages(LocalRepo._repo.packages) except LocalRepoError as e: LocalRepo.error(e) Msg.info(_('{0} packages found').format(len(pkgs))) Msg.process(_('Checking for updates')) updates = [] for name, pkg in ((name, pkg) for name, pkg in pkgs.items() if LocalRepo._repo.has(name)): oldpkg = LocalRepo._repo.package(name) if oldpkg.has_smaller_version_than(pkg['version']): updates.append(pkg) Msg.result('{0} ({1} -> {2})'.format(name, oldpkg.version, pkg['version'])) if not updates: Msg.info(_('All packages are up to date')) return if not Msg.ask(_('Upgrade?')): Msg.info(_('Bye')) LocalRepo.shutdown(1) LocalRepo.add([pkg['uri'] for pkg in updates], force=True)