svn-gvsig-desktop / tags / v2_0_0_Build_2031 / build / projects / gvsig-standard / gvsig-standard-installer / src / main / packaging / gvspkg @ 36053
History | View | Annotate | Download (9.06 KB)
1 |
#!/usr/bin/python |
---|---|
2 |
|
3 |
import sys |
4 |
import os |
5 |
import os.path |
6 |
import fnmatch |
7 |
import shutil |
8 |
import zipfile |
9 |
import stat |
10 |
import getopt |
11 |
from os.path import dirname |
12 |
|
13 |
RWALL = stat.S_IWOTH | stat.S_IROTH | stat.S_IWUSR | stat.S_IRUSR | stat.S_IWGRP | stat.S_IRGRP |
14 |
|
15 |
VERBOSE = False |
16 |
VERSION = os.path.basename(os.getcwd()) |
17 |
GVSPKG_ROOT = os.path.abspath("../..") |
18 |
GVSPKG_ROOT = "/home/groups/gvsig-desktop/www/gvSIG-desktop" |
19 |
|
20 |
def getVersion(): |
21 |
return VERSION |
22 |
|
23 |
def getPackagesRoot(): |
24 |
return GVSPKG_ROOT |
25 |
|
26 |
def getPool(): |
27 |
return getPackagesRoot() + "/pool" |
28 |
|
29 |
def getDist(): |
30 |
return getPackagesRoot() + "/dists/" +getVersion() |
31 |
|
32 |
def message(msg): |
33 |
if VERBOSE: |
34 |
print msg |
35 |
|
36 |
def msgerror(msg): |
37 |
print msg |
38 |
|
39 |
def findfiles(root,filename): |
40 |
result=list() |
41 |
for wroot, dirs, files in os.walk(root): |
42 |
for f in files : |
43 |
if fnmatch.fnmatch(f,filename): |
44 |
result.append(wroot+"/"+f) |
45 |
result.sort() |
46 |
return result |
47 |
|
48 |
class IndexList(list): |
49 |
|
50 |
def load(self, fname): |
51 |
message( "Loading index list from '%s'." % fname) |
52 |
f=file(fname,"r") |
53 |
lines=f.readlines() |
54 |
f.close() |
55 |
for line in lines: |
56 |
if line[-1] == "\n": |
57 |
line = line[:-1] |
58 |
self.append(line) |
59 |
|
60 |
def save(self,fname): |
61 |
message( "Saving index list from '%s'." % fname) |
62 |
f=file(fname,"w") |
63 |
for index in self: |
64 |
f.write("%s\n" % index) |
65 |
f.close() |
66 |
try: |
67 |
os.chmod(fname,RWALL) |
68 |
except Exception, ex: |
69 |
msgerror("Can't change permissions of file '%s', error %s" % (fname, str(ex))) |
70 |
|
71 |
def build(self, pool, version): |
72 |
message( "Creating index list for version '%s' from '%s'" % (version, pool) ) |
73 |
packages=dict() |
74 |
for root, dirs, files in os.walk(pool): |
75 |
for f in files : |
76 |
if fnmatch.fnmatch(f,"gvSIG-desktop-"+version+"-*.gvspki"): |
77 |
fullpath = root+"/"+f |
78 |
if packages.get(dirname(fullpath)) == None: |
79 |
packages[dirname(fullpath)]=fullpath |
80 |
else: |
81 |
s = packages[dirname(fullpath)] |
82 |
if s<fullpath : |
83 |
packages[dirname(fullpath)]=fullpath |
84 |
self.extend(packages.values()) |
85 |
self.sort() |
86 |
|
87 |
def lsi(args): |
88 |
try: |
89 |
opts, args = getopt.getopt(args[1:], "l", ["long-format"]) |
90 |
except getopt.GetoptError, err: |
91 |
# print help information and exit: |
92 |
print str(err) # will print something like "option -a not recognized" |
93 |
help(args) |
94 |
sys.exit(2) |
95 |
|
96 |
long_format=False |
97 |
for opt, arg in opts: |
98 |
if opt in ("-l", "--long-format"): |
99 |
long_format = True |
100 |
else: |
101 |
assert False, "unhandled option" |
102 |
|
103 |
indexes = IndexList() |
104 |
indexes.build(getPool(), getVersion()) |
105 |
|
106 |
for index in indexes: |
107 |
pkg_name = os.path.basename(index) |
108 |
print pkg_name |
109 |
if long_format: |
110 |
show(["show", pkg_name]) |
111 |
|
112 |
def mks(args): |
113 |
try: |
114 |
opts, args = getopt.getopt(args[1:], "c", ["clear-list"]) |
115 |
except getopt.GetoptError, err: |
116 |
# print help information and exit: |
117 |
print str(err) # will print something like "option -a not recognized" |
118 |
help(args) |
119 |
sys.exit(2) |
120 |
|
121 |
clear_list=False |
122 |
for opt, arg in opts: |
123 |
if opt in ("-c", "--clear-list"): |
124 |
clear_list = True |
125 |
else: |
126 |
assert False, "unhandled option" |
127 |
|
128 |
indexes = IndexList() |
129 |
|
130 |
packages_txt = getDist() +"/packages.txt" |
131 |
packages_gvspki = getDist() +"/packages.gvspki" |
132 |
packages_gvspks = getDist() +"/packages.gvspks" |
133 |
|
134 |
message( "Creating 'packages.gvspki' for version '%s'" % getVersion() ) |
135 |
if not os.path.exists(getDist()): |
136 |
msgerror("Can't locate version folder '%s'." % getVersion()) |
137 |
sys.exit(3) |
138 |
|
139 |
if os.path.exists(packages_txt) and not clear_list: |
140 |
indexes.load(packages_txt) |
141 |
else: |
142 |
indexes.build(getPool(), getVersion()) |
143 |
indexes.save(packages_txt) |
144 |
|
145 |
message( "Writing 'packages.gvspki' to '%s'" % packages_gvspki ) |
146 |
set = zipfile.ZipFile(packages_gvspki,"w",zipfile.ZIP_STORED) |
147 |
for index in indexes: |
148 |
try: |
149 |
set.write(index, os.path.basename(index)) |
150 |
except Exception, ex: |
151 |
msgerror("Can't add index '%s', error %s" % (index, str(ex))) |
152 |
set.close() |
153 |
try: |
154 |
os.chmod(packages_gvspki,RWALL) |
155 |
except Exception, ex: |
156 |
msgerror("Can't change permissions of file '%s', error %s" % (packages_gvspki, str(ex))) |
157 |
|
158 |
message( "Writing 'packages.gvspks' to '%s'" % packages_gvspks ) |
159 |
set = zipfile.ZipFile(packages_gvspks,"w",zipfile.ZIP_STORED) |
160 |
for index in indexes: |
161 |
index = index.replace(".gvspki",".gvspkg") |
162 |
try: |
163 |
set.write(index, os.path.basename(index)) |
164 |
except Exception, ex: |
165 |
msgerror("Can't add package '%s', error %s" % (index, str(ex))) |
166 |
set.close() |
167 |
try: |
168 |
os.chmod(packages_gvspks,RWALL) |
169 |
except Exception, ex: |
170 |
msgerror("Can't change permissions of file '%s', error %s" % (packages_gvspks, str(ex))) |
171 |
message( "Created") |
172 |
|
173 |
def show(args): |
174 |
index_name=args[1] |
175 |
message( "Show package.info from '%s'" % index_name) |
176 |
files = findfiles(getPool(), index_name) |
177 |
if len(files) != 1: |
178 |
msgerror("Can't locate package '%s' in pool '%s'." % (index_name, getPool())) |
179 |
return |
180 |
index_path = files[0] |
181 |
outputfolder="/tmp/gvspkg.%s" % os.getpid() |
182 |
os.mkdir(outputfolder) |
183 |
os.system('unzip -q %s -d %s' % (index_path,outputfolder)) |
184 |
|
185 |
files = findfiles(outputfolder, "package.info") |
186 |
if len(files) != 1: |
187 |
msgerror("Can't locate package.info in pool '%s'." % (index_name)) |
188 |
return |
189 |
|
190 |
package_info = files[0] |
191 |
f = file(package_info,"r") |
192 |
s = f.read() |
193 |
f.close() |
194 |
shutil.rmtree(outputfolder) |
195 |
print s |
196 |
|
197 |
def edit(args): |
198 |
index_name=args[1] |
199 |
message( "Show package.info from '%s'" % index_name) |
200 |
files = findfiles(getPool(), index_name) |
201 |
if len(files) != 1: |
202 |
msgerror("Can't locate package '%s' in pool '%s'." % (index_name, getPool())) |
203 |
return |
204 |
index_path = files[0] |
205 |
outputfolder="/tmp/gvspkg.%s" % os.getpid() |
206 |
os.mkdir(outputfolder) |
207 |
os.system('unzip -q %s -d %s' % (index_path,outputfolder)) |
208 |
|
209 |
files = findfiles(outputfolder, "package.info") |
210 |
if len(files) != 1: |
211 |
msgerror("Can't locate package.info in pool '%s'." % (index_name)) |
212 |
return |
213 |
|
214 |
package_info = files[0] |
215 |
code = package_info.split("/")[-2] |
216 |
os.system('vi "%s"' % package_info) |
217 |
temp_index_name = "/tmp/packages.gvspki.%s" % os.getpid() |
218 |
temp_index = zipfile.ZipFile(temp_index_name,"w",zipfile.ZIP_STORED) |
219 |
temp_index.write(package_info, "%s/package.info" % (code)) |
220 |
temp_index.close() |
221 |
shutil.rmtree(outputfolder) |
222 |
os.remove(index_path) |
223 |
shutil.move(temp_index_name,index_path) |
224 |
|
225 |
def help(args): |
226 |
print """ |
227 |
usage: gvspkg [OPTIONS] COMMANDS |
228 |
|
229 |
OPTIONS: |
230 |
|
231 |
-h|--help |
232 |
Muestra esta ayuda |
233 |
|
234 |
-v |
235 |
Activa el modo verbose |
236 |
|
237 |
--version version |
238 |
Fija la version con la que van a trabajar los comandos indicados. |
239 |
|
240 |
-p|--package-root package-root |
241 |
Fija la carpeta en la que va a buscar el raiz del sistema de paquetes |
242 |
con el que trabajar |
243 |
|
244 |
COMMANDS: |
245 |
|
246 |
lsi [OPTIONS] |
247 |
Lista los indices disponibles de la version |
248 |
|
249 |
OPTIONS: |
250 |
|
251 |
-l | --long-format |
252 |
Muestra para cada paquete la informacion del package.info |
253 |
|
254 |
mks [OPTIONS] |
255 |
Crea el fichero packages.gvspki con los indices de la |
256 |
version. |
257 |
|
258 |
OPTIONS: |
259 |
|
260 |
-c | --clear-list |
261 |
Elimina la lista de paquetes a utilizar recreandola a partir |
262 |
de los paquetes del pool tomando el ultimo build de cada paquete. |
263 |
|
264 |
show package-index |
265 |
Muestra el package.info del indice indicado como parametro. |
266 |
|
267 |
edit package-index |
268 |
Edita el package.info del indice indicado como parametro. |
269 |
|
270 |
Por defecto la version la obtiene del nombre de la carpeta |
271 |
corriente (%s). |
272 |
El directorio root de la estructura de packetes lo buscara en el |
273 |
sitio indicado por la variable de entorno GVPKG_ROOT, y si esta no |
274 |
esta establecida usara "%s" |
275 |
""" % (VERSION, GVSPKG_ROOT) |
276 |
|
277 |
def main(): |
278 |
global VERSION |
279 |
global VERBOSE |
280 |
global GVSPKG_ROOT |
281 |
|
282 |
try: |
283 |
opts, args = getopt.getopt(sys.argv[1:], "hvr:", ["version=", "package-root=","help"]) |
284 |
except getopt.GetoptError, err: |
285 |
# print help information and exit: |
286 |
print str(err) # will print something like "option -a not recognized" |
287 |
help(None) |
288 |
sys.exit(2) |
289 |
|
290 |
for opt, arg in opts: |
291 |
if opt in ("-h", "--help"): |
292 |
help(args) |
293 |
sys.exit() |
294 |
elif opt in ("-v"): |
295 |
VERBOSE = True |
296 |
elif opt in ("--version"): |
297 |
VERSION = arg |
298 |
elif opt in ("-r", "--package-root"): |
299 |
GVSPKG_ROOT = arg |
300 |
else: |
301 |
assert False, "unhandled option" |
302 |
# |
303 |
message("VERSION=%s" % VERSION) |
304 |
message("GVSPKG_ROOT=%s" % GVSPKG_ROOT) |
305 |
|
306 |
command = "help" |
307 |
if len(args)>0: |
308 |
command=args[0] |
309 |
|
310 |
if command=="lsi" : |
311 |
lsi(args) |
312 |
elif command == "mks": |
313 |
mks(args) |
314 |
elif command == "edit": |
315 |
edit(args) |
316 |
elif command == "show": |
317 |
show(args) |
318 |
else: |
319 |
help(args) |
320 |
|
321 |
|
322 |
main() |
323 |
|