source: ipk/ipkg-utils-050831/ipkg-make-index@ 9727

Last change on this file since 9727 was 4890, checked in by obi, 15 years ago

[ipk] fix executable rights

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