def installsuggested(args): """Install a package and its Suggests dependencies""" cache = apt.cache.Cache() package = util.package_exists(cache, args.package, ignore_virtual_packages=True) dependencies = list(util.extract_dependencies(package, "Suggests")) for n, dependency in enumerate(dependencies): dependencies[n] = util.package_exists(cache, dependency).shortname dependencies = " ".join(dependencies) command = "/usr/bin/apt-get {} {} {} --auto-remove install {} {}" command = command.format(args.recommends, args.yes, args.noauth, dependencies, args.package) perform.execute(command, root=True, log=True)
def dependents(args): """Display packages which have some form of dependency on the given package Types of dependencies: * Depends * Recommends * Suggests * Replaces * Enhances""" DEPENDENCY_TYPES = [ "Depends", "Recommends", "Suggests", "Replaces", "Enhances", ] cache = apt.cache.Cache() package = util.package_exists(cache, args.package) dependents = { name : [] for name in DEPENDENCY_TYPES } for key in cache.keys(): other_package = cache[key] for dependency_type, specific_dependents in dependents.items(): if package.shortname in \ util.extract_dependencies(other_package, dependency_type): specific_dependents.append(other_package.shortname) for dependency_type, specific_dependents in dependents.items(): if specific_dependents: output = dependency_type.upper(), " ".join(specific_dependents) print("{}: {}".format(*output))
def dependents(args): """Display packages which have some form of dependency on the given package Types of dependencies: * Depends * Recommends * Suggests * Replaces * Enhances """ DEPENDENCY_TYPES = [ "Depends", "Recommends", "Suggests", "Replaces", "Enhances", ] cache = apt.cache.Cache() package = util.package_exists(cache, args.package) dependents = {name : [] for name in DEPENDENCY_TYPES} for key in cache.keys(): other_package = cache[key] for dependency_type, specific_dependents in dependents.items(): if package.shortname in \ util.extract_dependencies(other_package, dependency_type): specific_dependents.append(other_package.shortname) for dependency_type, specific_dependents in dependents.items(): if specific_dependents: print("{}: {}".format( dependency_type.upper(), " ".join(specific_dependents) ))
def changelog(args): """Display Debian changelog of a package network on: changelog - if there's newer entries, display them -v changelog - if there's newer entries, display them, and proceed to display complete local changelog network off: changelog - if there's newer entries, mention failure to retrieve -v changelog - if there's newer entries, mention failure to retrieve, and proceed to display complete local changelog """ package = util.package_exists(apt.Cache(), args.package) changelog = "{:=^79}\n".format(" {} ".format(args.package)) # header try: changelog += package.get_changelog() except AttributeError: # This is caught so as to avoid an ugly python-apt trace; it's a bug # that surfaces when: # 1. The package is not available in the default Debian suite # 2. The suite the package belongs to is set to a pin of < 0 print("If this package is not on your default Debian suite, " \ "ensure that its APT pinning isn't less than 0.") return help_message = "\nTo display the local changelog, run:\n" \ "wajig changelog --verbose " + args.package if "Failed to download the list of changes" in changelog: if not args.verbose: changelog += help_message else: changelog += "\n" elif changelog.endswith("The list of changes is not available"): changelog += ".\nYou are likely running the latest version.\n" if not args.verbose: changelog += help_message if not args.verbose: print(changelog) else: tmp = tempfile.mkstemp()[1] with open(tmp, "w") as f: if package.is_installed: changelog += "{:=^79}\n".format(" local changelog ") f.write(changelog) if package.is_installed: command = util.local_changelog(args.package, tmp) if not command: return perform.execute(command) with open(tmp) as f: for line in f: try: print(line, end="") except BrokenPipeError: return
def changelog(args): """Display Debian changelog of a package network on: changelog - if there's newer entries, display them -v changelog - if there's newer entries, display them, and proceed to display complete local changelog network off: changelog - if there's newer entries, mention failure to retrieve -v changelog - if there's newer entries, mention failure to retrieve, and proceed to display complete local changelog""" package = util.package_exists(apt.Cache(), args.package) changelog = "{:=^79}\n".format(" {} ".format(args.package)) # header try: changelog += package.get_changelog() except AttributeError as e: # This is caught so as to avoid an ugly python-apt trace; it's a bug # that surfaces when: # 1. The package is not available in the default Debian suite # 2. The suite the package belongs to is set to a pin of < 0 print("If this package is not on your default Debian suite, " \ "ensure that its APT pinning isn't less than 0.") return help_message = "\nTo display the local changelog, run:\n" \ "wajig changelog --verbose " + args.package if "Failed to download the list of changes" in changelog: if not args.verbose: changelog += help_message else: changelog += "\n" elif changelog.endswith("The list of changes is not available"): changelog += ".\nYou are likely running the latest version.\n" if not args.verbose: changelog += help_message if not args.verbose: print(changelog) else: tmp = tempfile.mkstemp()[1] with open(tmp, "w") as f: if package.is_installed: changelog += "{:=^79}\n".format(" local changelog ") f.write(changelog) if package.is_installed: command = util.local_changelog(args.package, tmp) if not command: return perform.execute(command) with open(tmp) as f: for line in f: print(line, end="")
def recdownload(args): """Download a package and all its dependencies""" package_names = list() cache = apt.cache.Cache() for package in args.packages: util.package_exists(cache, package) print("Calculating all dependencies...") for package in args.packages: package_names.extend(util.get_deps_recursively(cache, package, [])) print("Packages to download to /var/cache/apt/archives:") for package in package_names: # We do this because apt-get install dont list the packages to # reinstall if they don't need to be upgraded print(package, end=' ') print() command = "/usr/bin/apt-get --download-only --reinstall -u install " + args.noauth command += " ".join(package_names) perform.execute(command, root=True)
def recdownload(args): """Download a package and all its dependencies""" package_names = list() cache = apt.cache.Cache() for package in args.packages: util.package_exists(cache, package) print("Calculating all dependencies...") for package in args.packages: package_names.extend(util.get_deps_recursively(cache, package, [])) print("Packages to download to /var/cache/apt/archives:") for package in package_names: # We do this because apt-get install dont list the packages to # reinstall if they don't need to be upgraded print(package, end=' ') print() command = "/usr/bin/apt-get --download-only --reinstall -u install {} {}" command = command.format(args.noauth, " ".join(package_names)) perform.execute(command, root=True)
def test_util_package_exists(self): cache = apt.Cache() self.assertIsInstance(util.package_exists(cache, "dpkg"), apt.package.Package) self.assertFalse(util.package_exists(cache, "no_such", test=True))