Mercurial > hg > truffle
comparison mx/mx_graal.py @ 21105:db2de6c2bf95
mx create each service file atomically
author | Gilles Duboscq <gilles.m.duboscq@oracle.com> |
---|---|
date | Thu, 23 Apr 2015 21:26:04 +0200 |
parents | 9690597d7a29 |
children | ae4941602cfa |
comparison
equal
deleted
inserted
replaced
21104:9690597d7a29 | 21105:db2de6c2bf95 |
---|---|
662 if classification[className] is True: | 662 if classification[className] is True: |
663 filtered.append(className) | 663 filtered.append(className) |
664 return filtered | 664 return filtered |
665 | 665 |
666 def _extractGraalServiceFiles(graalJars, destination, cleanDestination=True): | 666 def _extractGraalServiceFiles(graalJars, destination, cleanDestination=True): |
667 graalServices = set() | |
668 if cleanDestination: | 667 if cleanDestination: |
669 if exists(destination): | 668 if exists(destination): |
670 shutil.rmtree(destination) | 669 shutil.rmtree(destination) |
671 os.makedirs(destination) | 670 os.makedirs(destination) |
671 servicesMap = {} | |
672 for jar in graalJars: | 672 for jar in graalJars: |
673 if os.path.isfile(jar): | 673 if os.path.isfile(jar): |
674 with zipfile.ZipFile(jar) as zf: | 674 with zipfile.ZipFile(jar) as zf: |
675 services = [] | |
676 for member in zf.namelist(): | 675 for member in zf.namelist(): |
677 if not member.startswith('META-INF/services'): | 676 if not member.startswith('META-INF/services'): |
678 continue | 677 continue |
679 serviceName = basename(member) | 678 serviceName = basename(member) |
680 # we don't handle directories | 679 # we don't handle directories |
681 assert serviceName and member == 'META-INF/services/' + serviceName | 680 assert serviceName and member == 'META-INF/services/' + serviceName |
682 services.append(serviceName) | |
683 services = _filterGraalService(services, graalJars) | |
684 for serviceName in services: | |
685 graalServices.add(serviceName) | |
686 target = join(destination, serviceName) | |
687 lines = [] | |
688 with zf.open(member) as serviceFile: | 681 with zf.open(member) as serviceFile: |
689 lines.extend(serviceFile.readlines()) | 682 serviceImpls = servicesMap.setdefault(serviceName, []) |
690 if exists(target): | 683 serviceImpls.extend(serviceFile.readlines()) |
691 with open(target) as targetFile: | 684 graalServices = _filterGraalService(servicesMap.keys(), graalJars) |
692 lines.extend(targetFile.readlines()) | 685 for serviceName in graalServices: |
693 with open(target, "w+") as targetFile: | 686 serviceImpls = servicesMap[serviceName] |
694 for line in lines: | 687 fd, tmp = tempfile.mkstemp(prefix=serviceName) |
695 targetFile.write(line.rstrip() + os.linesep) | 688 f = os.fdopen(fd, 'w+') |
689 for serviceImpl in serviceImpls: | |
690 f.write(serviceImpl.rstrip() + os.linesep) | |
691 target = join(destination, serviceName) | |
692 f.close() | |
693 shutil.move(tmp, target) | |
694 if mx.get_os() != 'windows': | |
695 os.chmod(target, JDK_UNIX_PERMISSIONS_FILE) | |
696 return graalServices | 696 return graalServices |
697 | 697 |
698 def _updateGraalServiceFiles(jdkDir): | 698 def _updateGraalServiceFiles(jdkDir): |
699 jreGraalDir = join(jdkDir, 'jre', 'lib', 'graal') | 699 jreGraalDir = join(jdkDir, 'jre', 'lib', 'graal') |
700 graalJars = [join(jreGraalDir, e) for e in os.listdir(jreGraalDir) if e.startswith('graal') and e.endswith('.jar')] | 700 graalJars = [join(jreGraalDir, e) for e in os.listdir(jreGraalDir) if e.startswith('graal') and e.endswith('.jar')] |