source: ipk/ipkg-utils-050831/ipkg-show-deps@ 13837

Last change on this file since 13837 was 4890, checked in by obi, 16 years ago

[ipk] fix executable rights

  • Property svn:executable set to *
File size: 2.3 KB
Line 
1#!/usr/bin/python
2# $Id: ipkg-show-deps,v 1.2 2004/03/06 13:08:33 pb Exp $
3
4import sys, os, posixpath
5from glob import glob
6import commands
7import ipkg
8import getopt
9import string
10import re
11
12verbose = 0
13
14def usage():
15 sys.stderr.write("%s [-p Packages] package ...\n" % (sys.argv[0],))
16 sys.exit(-1)
17
18packages_filename = "Packages"
19(opts, remaining_args) = getopt.getopt(sys.argv[1:], "hp:")
20for (optkey, optval) in opts:
21 if optkey == '-h':
22 usage()
23 if optkey == '-p':
24 packages_filename = optval
25
26if ( not remaining_args ):
27 usage()
28
29packages = ipkg.Packages()
30packages.read_packages_file(packages_filename)
31
32required = {}
33provider_hash = {}
34
35def split_list(str):
36 r = []
37 l = string.split(str, ",")
38 for i in l:
39 ll = string.split(i, "|")
40 for ii in ll:
41 ii = string.strip(ii)
42 r.append(ii)
43 return r
44
45for i in packages.packages.keys():
46 p = packages.packages[i]
47 if not provider_hash.has_key(p.package):
48 provider_hash[p.package] = []
49 provider_hash[p.package].append(p)
50 if p.provides:
51 provides = string.split(p.provides, ",")
52 for prov in provides:
53 prov = string.strip(prov)
54 if not provider_hash.has_key(prov):
55 provider_hash[prov] = []
56 provider_hash[prov].append(p)
57
58def find_package(name):
59 if provider_hash.has_key(name):
60 return provider_hash[name]
61 return None
62
63def recurse(pkg):
64 required[pkg.package] = 1
65 if pkg.depends:
66 deps = split_list(pkg.depends)
67 for dep in deps:
68 dep = re.sub("\s*\(.*\)", "", dep)
69 dep = re.sub("\*$", "", dep)
70 newpkgs = find_package(dep)
71 if newpkgs:
72 for newpkg in newpkgs:
73 if required.has_key(newpkg.package):
74 return
75 recurse(newpkgs[0])
76 else:
77 sys.stderr.write("unsatisfied dependency of %s on '%s'\n" % (pkg.package, dep))
78
79for root in remaining_args:
80 pkgs = find_package(root)
81 if not pkgs:
82 sys.stderr.write("Can't find root package '%s'\n" % root)
83 sys.exit(-1)
84 for p in pkgs:
85 recurse(p)
86
87for pkg in required.keys():
88 print pkg
89
Note: See TracBrowser for help on using the repository browser.