2007-11-30 17:55:33 +01:00

87 lines
2.5 KiB
Python
Executable File

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright 2006-2007 (C) Pete Savage <petesavage@ubuntu.com>
# Copyright 2007 (C) Siegfried-A. Gevatter <siggi.gevatter@gmail.com>
# License: GPLv2 or later
#
# This script is used to check if a package and all its build
# dependencies are in main or not.
import subprocess
import sys
def process_deps(deps):
"""Takes a list of (build) dependencies and processes it."""
for package in [ package.split('|')[0] for package in deps ]:
# Cut package name (from something like "name ( >= version)")
name = package.split(' ')[0]
if not packages.has_key(name):
# Check the (build) dependencies recursively
find_main(name)
def find_main(pack):
"""Searches the dependencies and build dependencies of a package recursively
to determine if they are all in the 'main' component or not."""
global packages
# Retrieve information about the package
out = subprocess.Popen('apt-cache madison ' + pack, shell=True, stdout=subprocess.PIPE).stdout.read()
if out.find("/main") != -1 or out.find("http") == -1:
packages[pack] = True
return 1
else:
if not packages.has_key(pack):
packages[pack] = False
# Retrive package dependencies
deps = subprocess.Popen("dpkg-query -W -f='${Depends}' " + pack, shell=True, stdout=subprocess.PIPE).stdout.read().split(', ')
process_deps(deps)
# Retrieve package build dependencies
deps1 = subprocess.Popen('apt-cache showsrc ' + pack, shell=True, stdout=subprocess.PIPE).stdout.readlines()
deps = []
for builddep in deps1:
if builddep.startswith('Build-Depends'):
deps += builddep.strip('\n').strip('Build-Depends: ').strip('Build-Depends-Indep: ').split(', ')
process_deps(deps)
if __name__ == '__main__':
# Check if the amount of arguments is correct
if len(sys.argv) != 2 or sys.argv[1] in ('help', '-h', '--help'):
print "Usage: %s <package name>" % sys.argv[0]
sys.exit(1)
# Global variable to hold the status of all packages
packages = {}
if subprocess.Popen("dpkg-query -W -f='${Package}' " + sys.argv[1] + " 2>/dev/null", shell=True, stdout=subprocess.PIPE).stdout.read() == '':
print "Package «%s» doesn't exist." % sys.argv[1]
sys.exit(1)
find_main(sys.argv[1])
# True if everything checked until the point is in main
all_in_main = True
for package in packages:
if not packages[package]:
if all_in_main:
print "Following packages aren't in main:"
all_in_main = False
print ' ', package
if all_in_main:
print package, "and all its dependencies are in main."