Mercurial > hg > graal-jvmci-8
comparison mxtool/mx.py @ 15087:f3e74d317e83
mx: added exportlibs command
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 14 Apr 2014 15:38:19 +0200 |
parents | 858d2b91c1f8 |
children | 3a1f48125f53 |
comparison
equal
deleted
inserted
replaced
15086:22acaa9fb7f8 | 15087:f3e74d317e83 |
---|---|
34 """ | 34 """ |
35 | 35 |
36 import sys, os, errno, time, subprocess, shlex, types, urllib2, contextlib, StringIO, zipfile, signal, xml.sax.saxutils, tempfile, fnmatch | 36 import sys, os, errno, time, subprocess, shlex, types, urllib2, contextlib, StringIO, zipfile, signal, xml.sax.saxutils, tempfile, fnmatch |
37 import textwrap | 37 import textwrap |
38 import socket | 38 import socket |
39 import tarfile | |
39 import hashlib | 40 import hashlib |
40 import xml.parsers.expat | 41 import xml.parsers.expat |
41 import shutil, re, xml.dom.minidom | 42 import shutil, re, xml.dom.minidom |
42 import pipes | 43 import pipes |
43 import difflib | 44 import difflib |
4268 return [items[i] for i in indexes] | 4269 return [items[i] for i in indexes] |
4269 if len(indexes) == 1: | 4270 if len(indexes) == 1: |
4270 return items[indexes[0]] | 4271 return items[indexes[0]] |
4271 return None | 4272 return None |
4272 | 4273 |
4274 def exportlibs(args): | |
4275 """export libraries to an archive file""" | |
4276 | |
4277 parser = ArgumentParser(prog='exportlibs') | |
4278 parser.add_argument('-b', '--base', action='store', help='base name of archive (default: libs)', default='libs', metavar='<path>') | |
4279 parser.add_argument('--arc', action='store', choices=['tgz', 'tbz2', 'tar', 'zip'], default='tgz', help='the type of the archive to create') | |
4280 parser.add_argument('--no-sha1', action='store_false', dest='sha1', help='do not create SHA1 signature of archive') | |
4281 parser.add_argument('--no-md5', action='store_false', dest='md5', help='do not create MD5 signature of archive') | |
4282 parser.add_argument('--include-system-libs', action='store_true', help='include system libraries (i.e., those not downloaded from URLs)') | |
4283 parser.add_argument('extras', nargs=REMAINDER, help='extra files and directories to add to archive', metavar='files...') | |
4284 args = parser.parse_args(args) | |
4285 | |
4286 def createArchive(addMethod): | |
4287 entries = {} | |
4288 def add(path, arcname): | |
4289 apath = os.path.abspath(path) | |
4290 if not entries.has_key(arcname): | |
4291 entries[arcname] = apath | |
4292 logv('[adding ' + path + ']') | |
4293 addMethod(path, arcname=arcname) | |
4294 elif entries[arcname] != apath: | |
4295 logv('[warning: ' + apath + ' collides with ' + entries[arcname] + ' as ' + arcname + ']') | |
4296 else: | |
4297 logv('[already added ' + path + ']') | |
4298 | |
4299 for lib in _libs.itervalues(): | |
4300 if len(lib.urls) != 0 or args.include_system_libs: | |
4301 add(lib.get_path(resolve=True), lib.path) | |
4302 if args.extras: | |
4303 for e in args.extras: | |
4304 if os.path.isdir(e): | |
4305 for root, _, filenames in os.walk(e): | |
4306 for name in filenames: | |
4307 f = join(root, name) | |
4308 add(f, f) | |
4309 else: | |
4310 add(e, e) | |
4311 | |
4312 if args.arc == 'zip': | |
4313 path = args.base + '.zip' | |
4314 with zipfile.ZipFile(path, 'w') as zf: | |
4315 createArchive(zf.write) | |
4316 else: | |
4317 path = args.base + '.tar' | |
4318 mode = 'w' | |
4319 if args.arc != 'tar': | |
4320 sfx = args.arc[1:] | |
4321 mode = mode + ':' + sfx | |
4322 path = path + '.' + sfx | |
4323 with tarfile.open(path, mode) as tar: | |
4324 createArchive(tar.add) | |
4325 log('created ' + path) | |
4326 | |
4327 def digest(enabled, path, factory, suffix): | |
4328 if enabled: | |
4329 d = factory() | |
4330 with open(path, 'rb') as f: | |
4331 while True: | |
4332 buf = f.read(4096) | |
4333 if not buf: | |
4334 break | |
4335 d.update(buf) | |
4336 with open(path + '.' + suffix, 'w') as fp: | |
4337 fp.write(d.hexdigest()) | |
4338 log('created ' + path + '.' + suffix) | |
4339 | |
4340 digest(args.sha1, path, hashlib.sha1, 'sha1') | |
4341 digest(args.md5, path, hashlib.md5, 'md5') | |
4342 | |
4273 def javap(args): | 4343 def javap(args): |
4274 """disassemble classes matching given pattern with javap""" | 4344 """disassemble classes matching given pattern with javap""" |
4275 | 4345 |
4276 javapExe = java().javap | 4346 javapExe = java().javap |
4277 if not exists(javapExe): | 4347 if not exists(javapExe): |
4336 'checkstyle': [checkstyle, ''], | 4406 'checkstyle': [checkstyle, ''], |
4337 'canonicalizeprojects': [canonicalizeprojects, ''], | 4407 'canonicalizeprojects': [canonicalizeprojects, ''], |
4338 'clean': [clean, ''], | 4408 'clean': [clean, ''], |
4339 'eclipseinit': [eclipseinit, ''], | 4409 'eclipseinit': [eclipseinit, ''], |
4340 'eclipseformat': [eclipseformat, ''], | 4410 'eclipseformat': [eclipseformat, ''], |
4411 'exportlibs': [exportlibs, ''], | |
4341 'findclass': [findclass, ''], | 4412 'findclass': [findclass, ''], |
4342 'fsckprojects': [fsckprojects, ''], | 4413 'fsckprojects': [fsckprojects, ''], |
4343 'help': [help_, '[command]'], | 4414 'help': [help_, '[command]'], |
4344 'ideclean': [ideclean, ''], | 4415 'ideclean': [ideclean, ''], |
4345 'ideinit': [ideinit, ''], | 4416 'ideinit': [ideinit, ''], |