blob: 6ba96948e1c4f93dae0016ca70090be6f308982f [file]
#
# Utilites for working with java versions
#
def is_version_character(c):
"""Returns True if the character is a version character, otherwise False."""
return c.isdigit() or c == "."
def index_of_version_character(s):
"""Determines index of 1st occurrence of version character in string."""
for i in range(len(s)):
if is_version_character(s[i]):
return i
return None
def index_of_non_version_character_from(s, index):
"""Determines index of 1st occurrence of non-version character in string."""
for i in range(index, len(s)):
if not is_version_character(s[i]):
return i
return None
def get_major_version(java_version):
"""Returns the major version from Java version string."""
if not java_version:
return None
elif "." not in java_version:
return int(java_version)
elif java_version.startswith("1."):
return int(java_version.split(".")[1])
else:
return int(java_version.split(".")[0])
# Get numeric java version from `java -version` output e.g:
#
# openjdk version "11.0.9" 2020-10-20
# OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9+11)
# OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9+11, mixed mode)
#
def parse_java_version(java_version_output):
first_line = java_version_output.strip().split("\n")[0]
if not first_line:
return None
i = index_of_version_character(first_line)
if i == None:
return None
j = index_of_non_version_character_from(first_line, i + 1)
return get_major_version(first_line[i:j])
# Build the contents of a java Command-Line Argument File from a list of
# arguments.
#
# This quotes all arguments (and escapes all quotation marks in arguments) so
# that arguments containing white space are treated as single arguments.
def build_java_argsfile_content(args):
return "\n".join(['"' + str(f).replace('"', r'\"') + '"' for f in args]) + "\n"