source: ipk/ipkg-utils-050831/build/scripts-2.5/ipkg-make-index@ 17871

Last change on this file since 17871 was 4860, checked in by obi, 15 years ago

[ipkg] fix

File size: 5.8 KB
Line 
1#!/usr/bin/python
2# $Id: ipkg-make-index,v 1.22 2005/03/03 16:39:04 jamey 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 [-h] [-s] [-m] [-l Packages.filelist] [-p Packages] [-r Packages.old] [-L localesdir] [-v] packagesdir\n" % (sys.argv[0],))
16 sys.exit(-1)
17
18def to_morgue(filename):
19 morgue_dir = pkg_dir + "/morgue"
20 if verbose:
21 sys.stderr.write ("Moving " + filename + " to morgue\n")
22 if not os.path.exists(morgue_dir):
23 os.mkdir(morgue_dir)
24 if os.path.exists(pkg_dir + "/" + filename):
25 os.rename(pkg_dir + "/" + filename, morgue_dir + "/" + filename)
26 if os.path.exists(pkg_dir + "/" + filename + ".asc"):
27 os.rename(pkg_dir + "/" + filename + ".asc", morgue_dir + "/" + filename + ".asc")
28
29locales_dir = None
30def to_locale(filename, locale):
31 locale_dir = pkg_dir + '/' + locales_dir + '/' + locale + "/"
32 if verbose:
33 sys.stderr.write ("Moving " + filename + " to " + locale_dir + "\n")
34 if not os.path.exists(locale_dir):
35 os.mkdir(locale_dir)
36 os.rename(pkg_dir + "/" + filename, locale_dir + "/" + filename)
37 if os.path.exists(pkg_dir + "/" + filename + ".asc"):
38 os.rename(pkg_dir + "/" + filename + ".asc", locale_dir + "/" + filename + ".asc")
39
40old_filename = None
41packages_filename = None
42filelist_filename = "Packages.filelist"
43opt_s = 0
44opt_m = 0
45(opts, remaining_args) = getopt.getopt(sys.argv[1:], "hl:p:vsmr:L:")
46for (optkey, optval) in opts:
47 if optkey == '-h':
48 usage()
49 if optkey == '-s':
50 opt_s = 1
51 if optkey == '-p':
52 packages_filename = optval
53 if optkey == '-l':
54 filelist_filename = optval
55 if optkey == '-v':
56 verbose = 1
57 if optkey == '-m':
58 opt_m = 1
59 if optkey == '-r':
60 old_filename = optval
61 if optkey == '-L':
62 locales_dir = optval
63
64if ( not remaining_args ):
65 usage()
66
67pkg_dir=remaining_args[0]
68
69packages = ipkg.Packages()
70
71old_pkg_hash = {}
72if packages_filename and not old_filename and os.path.exists(packages_filename):
73 old_filename = packages_filename
74
75if old_filename:
76 if (verbose):
77 sys.stderr.write("Reading package list from " + old_filename + "\n")
78 old_packages = ipkg.Packages()
79 old_packages.read_packages_file(old_filename)
80 for k in old_packages.packages.keys():
81 p = old_packages.packages[k]
82 old_pkg_hash[p.filename] = p
83
84if (verbose):
85 sys.stderr.write("Reading in all the package info from %s\n" % (pkg_dir, ))
86files=glob(pkg_dir + '/*.ipk') + glob(pkg_dir + '/*.deb')
87files.sort()
88for filename in files:
89 basename = os.path.basename(filename)
90 if old_pkg_hash.has_key(basename):
91 if (verbose):
92 sys.stderr.write("Found %s in Packages\n" % (filename,))
93 pkg = old_pkg_hash[basename]
94 else:
95 if (verbose):
96 sys.stderr.write("Reading info for package %s\n" % (filename,))
97 pkg = ipkg.Package(filename)
98 pkg_key = ("%s:%s" % (pkg.package, pkg.architecture))
99 if (packages.packages.has_key(pkg_key)):
100 old_filename = packages.packages[pkg_key].filename
101 else:
102 old_filename = ""
103 s = packages.add_package(pkg)
104 if s == 0:
105 if old_filename:
106 # old package was displaced by newer
107 if opt_m:
108 to_morgue(old_filename)
109 if opt_s:
110 print pkg_dir + "/" + old_filename
111 else:
112 if opt_m:
113 to_morgue(basename)
114 if opt_s:
115 print filename
116
117if opt_s:
118 sys.exit(0)
119
120if verbose:
121 sys.stderr.write("Generating Packages file\n")
122if packages_filename:
123 old_stdout = sys.stdout
124 tmp_packages_filename = ("%s.%d" % (packages_filename, os.getpid()))
125 sys.stdout = open(tmp_packages_filename, "w")
126names = packages.packages.keys()
127names.sort()
128for name in names:
129 pkg = packages.packages[name]
130 if locales_dir and pkg.depends:
131 depends = string.split(pkg.depends, ',')
132 locale = None
133 for d in depends:
134 m = re.match('.*virtual-locale-([a-zA-Z]+).*', d)
135 mp = re.match('locale-base-([a-zA-Z]+)([-+])?.*', pkg.package)
136 if m:
137 locale = m.group(1)
138 if mp:
139 locale = mp.group(1)
140 if locale:
141 to_locale(pkg.filename, locale)
142 continue
143 if (verbose):
144 sys.stderr.write("Writing info for package %s\n" % (pkg.package,))
145 print pkg
146if packages_filename:
147 sys.stdout.close()
148 sys.stdout = old_stdout
149 gzip_filename = ("%s.gz" % packages_filename)
150 tmp_gzip_filename = ("%s.%d" % (gzip_filename, os.getpid()))
151 gzip_cmd = "gzip -9c < %s > %s" % (tmp_packages_filename, tmp_gzip_filename)
152 (rc, outtext) = commands.getstatusoutput(gzip_cmd)
153 print outtext
154 os.rename(tmp_packages_filename, packages_filename)
155 os.rename(tmp_gzip_filename, gzip_filename)
156
157if verbose:
158 sys.stderr.write("Generate Packages.filelist file\n")
159files = {}
160names = packages.packages.keys()
161names.sort()
162for name in names:
163 for fn in packages[name].get_file_list():
164 (h,t) = os.path.split(fn)
165 if not t: continue
166 if not files.has_key(t): files[t] = name+':'+fn
167 else: files[t] = files[t] + ',' + name+':'+fn
168
169if filelist_filename:
170 tmp_filelist_filename = ("%s.%d" % (filelist_filename, os.getpid()))
171 sys.stdout = open(tmp_filelist_filename, "w")
172 names = files.keys()
173 names.sort()
174 for name in names:
175 print name,files[name]
176 sys.stdout.close()
177 if posixpath.exists(filelist_filename):
178 os.unlink(filelist_filename)
179 os.rename(tmp_filelist_filename, filelist_filename)
Note: See TracBrowser for help on using the repository browser.