# HG changeset patch # User Doug Simon # Date 1435142265 -7200 # Node ID 59b0fd9e6b2730c1b3027be50477aa66d7fcd23d # Parent 5c50f2f6e91390733976ae6e35c33c155e8d7e75 instead of cleaning jvmci/services and jvmci/options directories in a JDK, look for stale entries and offer to delete them if mx is running interactively diff -r 5c50f2f6e913 -r 59b0fd9e6b27 mx.graal/mx_graal.py --- a/mx.graal/mx_graal.py Wed Jun 24 12:30:58 2015 +0200 +++ b/mx.graal/mx_graal.py Wed Jun 24 12:37:45 2015 +0200 @@ -548,43 +548,35 @@ os.chmod(dstLib, permissions) def _extractJVMCIFiles(jdkJars, jvmciJars, servicesDir, optionsDir): - if exists(servicesDir): - shutil.rmtree(servicesDir, ignore_errors=True) - if exists(optionsDir): - shutil.rmtree(optionsDir, ignore_errors=True) - if not exists(servicesDir): - os.makedirs(servicesDir) - if not exists(optionsDir): - os.makedirs(optionsDir) + + oldServices = os.listdir(servicesDir) if exists(servicesDir) else os.makedirs(servicesDir) + oldOptions = os.listdir(optionsDir) if exists(optionsDir) else os.makedirs(optionsDir) + jvmciServices = {} optionsFiles = [] for jar in jvmciJars: if os.path.isfile(jar): with zipfile.ZipFile(jar) as zf: for member in zf.namelist(): - if member.startswith('META-INF/jvmci.services') and member: + if member.startswith('META-INF/jvmci.services/') and member != 'META-INF/jvmci.services/': service = basename(member) - if service == "": - continue # Zip files may contain empty entries for directories (jar -cf ... creates such) - # we don't handle directories - assert service and member == 'META-INF/jvmci.services/' + service + assert service != "", member with zf.open(member) as serviceFile: providers = jvmciServices.setdefault(service, []) for line in serviceFile.readlines(): line = line.strip() if line: providers.append(line) - elif member.startswith('META-INF/jvmci.options'): + elif member.startswith('META-INF/jvmci.options/') and member != 'META-INF/jvmci.options/': filename = basename(member) - if filename == "": - continue # Zip files may contain empty entries for directories (jar -cf ... creates such) - # we don't handle directories - assert filename and member == 'META-INF/jvmci.options/' + filename + assert filename != "", member targetpath = join(optionsDir, filename) optionsFiles.append(filename) with zf.open(member) as optionsFile, \ file(targetpath, "wb") as target: shutil.copyfileobj(optionsFile, target) + if oldOptions and filename in oldOptions: + oldOptions.remove(filename) for service, providers in jvmciServices.iteritems(): fd, tmp = tempfile.mkstemp(prefix=service) f = os.fdopen(fd, 'w+') @@ -593,9 +585,19 @@ target = join(servicesDir, service) f.close() shutil.move(tmp, target) + if oldServices and service in oldServices: + oldServices.remove(service) if mx.get_os() != 'windows': os.chmod(target, JDK_UNIX_PERMISSIONS_FILE) + if mx.is_interactive(): + for d, files in [(servicesDir, oldServices), (optionsDir, oldOptions)]: + if files and mx.ask_yes_no('These files in ' + d + ' look obsolete:\n ' + '\n '.join(files) + '\nDelete them', 'n'): + for f in files: + path = join(d, f) + os.remove(path) + mx.log('Deleted ' + path) + def _updateJVMCIFiles(jdkDir): jreJVMCIDir = join(jdkDir, 'jre', 'lib', 'jvmci') jvmciJars = [join(jreJVMCIDir, e) for e in os.listdir(jreJVMCIDir) if e.endswith('.jar')]