root/software/apt-tools/get_deps.py @ 982d29ac
| a0c50279 | david.sorber | #!/usr/bin/python3
|
||
| 982d29ac | david.sorber | import argparse
|
||
| a0c50279 | david.sorber | import copy
|
||
from distutils.version import LooseVersion
|
||||
import sys
|
||||
import apt
|
||||
| 982d29ac | david.sorber | # Virtual package mapping
|
||
virtual_mapping = {'awk': 'gawk'}
|
||||
| a0c50279 | david.sorber | |||
def main():
|
||||
| 982d29ac | david.sorber | parser = argparse.ArgumentParser(description='Process some integers.')
|
||
parser.add_argument('-v', '--verbose', action='store_true')
|
||||
parser.add_argument('input_package_files', action='store')
|
||||
args = parser.parse_args()
|
||||
# Input packages
|
||||
in_packages = []
|
||||
# Parse input package files
|
||||
for filename in args.input_package_files.split(','):
|
||||
with open(filename) as in_file:
|
||||
for line in in_file:
|
||||
line = line.strip()
|
||||
if line:
|
||||
in_packages.append(line)
|
||||
# Open APT cache
|
||||
cache = apt.Cache(memonly=True)
|
||||
cache.open()
|
||||
| a0c50279 | david.sorber | |||
packages = set()
|
||||
while True:
|
||||
try:
|
||||
# Grab next package
|
||||
pkg_name = in_packages.pop()
|
||||
| 982d29ac | david.sorber | #~ print('Package: {:s}'.format(pkg_name))
|
||
if pkg_name not in cache:
|
||||
if pkg_name in virtual_mapping:
|
||||
pkg_name = virtual_mapping[pkg_name]
|
||||
else:
|
||||
continue
|
||||
| a0c50279 | david.sorber | # Add this package (with version) to the list of packages
|
||
if pkg_name not in packages:
|
||||
packages.add(pkg_name)
|
||||
| 982d29ac | david.sorber | |||
# Get package dependencies
|
||||
for pdep in cache[pkg_name].versions[0].dependencies:
|
||||
| a0c50279 | david.sorber | dep_name = pdep[0].name
|
||
| 982d29ac | david.sorber | #~ print('\tDependency: {:s}'.format(dep_name))
|
||
| a0c50279 | david.sorber | if dep_name not in packages:
|
||
| 982d29ac | david.sorber | if dep_name in virtual_mapping:
|
||
dep_name = virtual_mapping[dep_name]
|
||||
| a0c50279 | david.sorber | packages.add(dep_name)
|
||
in_packages.insert(0, dep_name)
|
||||
except IndexError:
|
||||
break
|
||||
| 982d29ac | david.sorber | # Print out the gathered package names
|
||
for package in sorted(packages):
|
||||
| a0c50279 | david.sorber | print(package)
|
||
if __name__ == '__main__':
|
||||
sys.exit(main())
|