commit: a294c2540a728b7ae4f85a5d06d76a8f880b0367
Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 30 16:38:21 2025 +0000
Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Sun Mar 30 16:38:21 2025 +0000
URL: https://gitweb.gentoo.org/proj/javatoolkit.git/commit/?id=a294c254
format python code with black
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>
src/javatoolkit/classpath.py | 11 +-
src/javatoolkit/cvv.py | 85 +++---
src/javatoolkit/java/properties.py | 39 ++-
src/javatoolkit/maven/MavenPom.py | 123 +++++----
src/javatoolkit/maven/__init__.py | 8 +-
src/javatoolkit/output.py | 2 -
src/javatoolkit/parser/__init__.py | 2 +-
src/javatoolkit/parser/buildproperties.py | 13 +-
src/javatoolkit/parser/helpers.py | 6 +-
src/javatoolkit/parser/manifest.py | 9 +-
src/javatoolkit/parser/parser.py | 4 +-
src/javatoolkit/parser/tree.py | 41 ++-
src/javatoolkit/scripts/buildparser.py | 62 +++--
src/javatoolkit/scripts/class_version_verify.py | 39 +--
src/javatoolkit/scripts/eclipse_build.py | 130 ++++-----
src/javatoolkit/scripts/findclass.py | 44 +--
src/javatoolkit/scripts/jarjarclean.py | 28 +-
src/javatoolkit/scripts/maven_helper.py | 61 +++--
src/test/test_cvv.py | 345 ++++++++++++++----------
19 files changed, 620 insertions(+), 432 deletions(-)
diff --git a/src/javatoolkit/classpath.py b/src/javatoolkit/classpath.py
index fb801f2..6ec4973 100644
--- a/src/javatoolkit/classpath.py
+++ b/src/javatoolkit/classpath.py
@@ -6,6 +6,7 @@
class ClasspathIter:
"""An iterator for the Classpath class, below."""
+
def __init__(self, classpath):
self._classpath = classpath
self._index = 0
@@ -18,10 +19,11 @@ class ClasspathIter:
class Classpath:
- """A classpath object provides a collection interface to the elements of a
: separated path list. """
- def __init__(self, classpath_string = None):
+ """A classpath object provides a collection interface to the elements of a
: separated path list."""
+
+ def __init__(self, classpath_string=None):
if classpath_string != None:
- cs = classpath_string.strip().strip("\"")
+ cs = classpath_string.strip().strip('"')
self.classpath = cs.split(":")
else:
self.classpath = []
@@ -49,6 +51,3 @@ class Classpath:
def append(self, element):
"""Appends an path to the classpath."""
self.classpath.append(element)
-
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
diff --git a/src/javatoolkit/cvv.py b/src/javatoolkit/cvv.py
index cba3d0f..e9d22f7 100644
--- a/src/javatoolkit/cvv.py
+++ b/src/javatoolkit/cvv.py
@@ -17,7 +17,8 @@ class FileLoc:
@dataclass(frozen=True)
class JarLoc:
- '''A file inside a jar archive'''
+ """A file inside a jar archive"""
+
jar: FileLoc
member: str
@@ -34,7 +35,8 @@ class ClassFile:
@dataclass
class BadMultireleaseManifest:
- '''A multi-release jar but without `Multi-Release: true` in MANIFEST.MF'''
+ """A multi-release jar but without `Multi-Release: true` in MANIFEST.MF"""
+
loc: JarLoc
multiReleaseDirs: list[JarLoc]
@@ -48,7 +50,7 @@ class SkippedVersionDir:
@dataclass
class SkippedModuleInfo:
loc: Loc
- reason: str = 'A module-info requires java release >= 9'
+ reason: str = "A module-info requires java release >= 9"
GoodFile = ClassFile
@@ -59,7 +61,7 @@ SkippedFile = SkippedVersionDir | SkippedModuleInfo
class CVVMagic:
def __init__(self, target: str) -> None:
# this is a number 8 9 10 11 etc, not including 1.
- if '.' in target:
+ if "." in target:
self.target = int(target.split(".")[-1])
else:
self.target = int(target)
@@ -67,7 +69,9 @@ class CVVMagic:
self.bad: list[BadFile] = []
self.skipped: list[SkippedFile] = []
- def add(self, version: int, loc: Loc, target_version: T.Optional[int] =
None) -> None:
+ def add(
+ self, version: int, loc: Loc, target_version: T.Optional[int] = None
+ ) -> None:
if target_version is None:
target_version = self.target
@@ -78,7 +82,8 @@ class CVVMagic:
cf = ClassFile(
loc,
encoded_version=self.__format_version(version),
- expected_version=self.__format_version(target_version))
+ expected_version=self.__format_version(target_version),
+ )
if version <= target_version:
self.__on_good(cf)
@@ -95,42 +100,45 @@ class CVVMagic:
is_multirelease = False
try:
- manifest = jar.open('META-INF/MANIFEST.MF', 'r')
+ manifest = jar.open("META-INF/MANIFEST.MF", "r")
except KeyError:
pass
else:
with manifest:
+
def decode_line(line: bytes) -> str:
# The Manifest spec requires that the file is utf-8
encoded.
# Unfortunately, stuff like the maven-jar-plugin can
generate
# an invalid manifest when it blindly copies the author
name
- return line.decode('utf-8', 'replace').rstrip('\r\n')
+ return line.decode("utf-8", "replace").rstrip("\r\n")
+
lines = [decode_line(line) for line in manifest.readlines()]
- is_multirelease = 'Multi-Release: true' in lines
+ is_multirelease = "Multi-Release: true" in lines
invalid_version_dirs: set[str] = set()
seen_skipped_dirs: set[str] = set()
for path in jar.namelist():
- if not path.endswith('class'):
+ if not path.endswith("class"):
continue
loc = jar_loc(path)
- with jar.open(path, 'r') as class_file:
+ with jar.open(path, "r") as class_file:
target_version = None
match self.__get_multirelease_target_version(path):
case int(tv):
if is_multirelease:
target_version = tv
else:
- version_dir = path.split('/', 3)[:3]
- invalid_version_dirs.add('/'.join(version_dir))
+ version_dir = path.split("/", 3)[:3]
+ invalid_version_dirs.add("/".join(version_dir))
continue
case (ver_dir, reason):
if ver_dir not in seen_skipped_dirs:
seen_skipped_dirs.add(ver_dir)
- self.__on_skipped(SkippedVersionDir(
- jar_loc(ver_dir), reason))
+ self.__on_skipped(
+ SkippedVersionDir(jar_loc(ver_dir), reason)
+ )
continue
case None:
pass
@@ -139,59 +147,68 @@ class CVVMagic:
self.add(version, loc, target_version)
if len(invalid_version_dirs):
- self.__on_bad(BadMultireleaseManifest(
- jar_loc('META-INF/MANIFEST.MF'),
- [jar_loc(d) for d in sorted(invalid_version_dirs)]))
+ self.__on_bad(
+ BadMultireleaseManifest(
+ jar_loc("META-INF/MANIFEST.MF"),
+ [jar_loc(d) for d in sorted(invalid_version_dirs)],
+ )
+ )
def do(self, filename: str) -> None:
if not os.path.islink(filename):
if filename.endswith(".class"):
- with open(filename, 'rb') as class_file:
+ with open(filename, "rb") as class_file:
self.do_class(class_file, FileLoc(filename))
if filename.endswith(".jar"):
- with ZipFile(filename, 'r') as jar:
+ with ZipFile(filename, "r") as jar:
self.do_jar(jar, FileLoc(filename))
@classmethod
def __extract_version(cls, file: T.IO[bytes]) -> int:
data = file.read(8)
if len(data) != 8:
- raise ValueError(f'Need the first 8 bytes of a java .class file,
got: {len(data)}')
+ raise ValueError(
+ f"Need the first 8 bytes of a java .class file, got:
{len(data)}"
+ )
# A .class file is encoded like (all big-endian):
# u4 - magic
# u2 - minor version
# u2 - major version
- result = unpack('>4x2xH', data)[0]
+ result = unpack(">4x2xH", data)[0]
return result - 44
@classmethod
- def __get_multirelease_target_version(cls, path: str) -> int | None |
tuple[str, str]:
- '''Get the target verion of a possible multi-release class file
+ def __get_multirelease_target_version(
+ cls, path: str
+ ) -> int | None | tuple[str, str]:
+ """Get the target verion of a possible multi-release class file
Returns:
int target_version - If the path is under
META-INF/versions/${target_version}
None - If the path is not part of META-INF/versions
(directory, reason) - The directory portion of `path` that should be
ignored
- '''
+ """
result = None
- parts = path.split('/', 3)
- if len(parts) >= 3 and parts[:2] == ['META-INF', 'versions']:
+ parts = path.split("/", 3)
+ if len(parts) >= 3 and parts[:2] == ["META-INF", "versions"]:
expected_version = parts[2]
#
https://docs.oracle.com/en/java/javase/23/docs/specs/jar/jar.html#multi-release-jar-files
# If the version is not a number or < 9 it is ignored
- ver_dir = '/'.join(parts[:3])
+ ver_dir = "/".join(parts[:3])
reasonBase = f'The version directory "{expected_version}" '
if not expected_version.isdecimal():
- return (ver_dir, reasonBase + 'is not a number')
+ return (ver_dir, reasonBase + "is not a number")
if (result := int(expected_version)) < 9:
- return (ver_dir, reasonBase + 'is less than 9')
+ return (ver_dir, reasonBase + "is less than 9")
return result
- __module_info_jar_pattern =
re.compile('(META-INF/versions/[1-9][0-9]*/)?module-info.class')
- __module_info_file_pattern = re.compile('module-info.class')
+ __module_info_jar_pattern = re.compile(
+ "(META-INF/versions/[1-9][0-9]*/)?module-info.class"
+ )
+ __module_info_file_pattern = re.compile("module-info.class")
@classmethod
def __is_module_info(cls, filepath: Loc) -> bool:
@@ -205,7 +222,7 @@ class CVVMagic:
@classmethod
def __format_version(cls, version: int) -> str:
- return f'1.{version}' if version < 9 else f'{version}'
+ return f"1.{version}" if version < 9 else f"{version}"
def __on_good(self, goodFile: GoodFile) -> None:
self.good.append(goodFile)
@@ -215,5 +232,3 @@ class CVVMagic:
def __on_skipped(self, skippedFile: SkippedFile) -> None:
self.skipped.append(skippedFile)
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
diff --git a/src/javatoolkit/java/properties.py
b/src/javatoolkit/java/properties.py
index 7796d15..1fb829e 100644
--- a/src/javatoolkit/java/properties.py
+++ b/src/javatoolkit/java/properties.py
@@ -8,49 +8,46 @@ class PropertiesParser:
Parse eclipse projects build.properties file.
"""
- def __init__( self, file ):
+ def __init__(self, file):
self.file = file
self.config = {}
- self.parse( file )
+ self.parse(file)
- def parse( self, file ):
+ def parse(self, file):
if not os.path.isfile(file):
return
if not os.access(file, os.R_OK):
return
- stream = open( file, 'r' )
+ stream = open(file, "r")
line = stream.readline()
- while line != '':
- line = line.strip('\n')
+ while line != "":
+ line = line.strip("\n")
line = line.strip()
- if line.isspace() or line == '' or line.startswith('#'):
+ if line.isspace() or line == "" or line.startswith("#"):
line = stream.readline()
continue
- index = line.find('=')
+ index = line.find("=")
name = line[:index]
name = name.strip()
- value = line[index+1:]
+ value = line[index + 1 :]
- while line.endswith('\\'):
+ while line.endswith("\\"):
line = stream.readline()
- line = line.strip('\n')
+ line = line.strip("\n")
line = line.strip()
- if line.isspace() or line == '' or line.startswith('#'):
+ if line.isspace() or line == "" or line.startswith("#"):
line = stream.readline()
break
- value +=line
+ value += line
- value = value.strip('\\')
+ value = value.strip("\\")
- if value == '':
+ if value == "":
line = stream.readline()
continue
- value = value.strip('\\\'\"').strip('\\').strip()
- value = value.replace('\\', '')
- self.config[name] = value.split(',')
+ value = value.strip("\\'\"").strip("\\").strip()
+ value = value.replace("\\", "")
+ self.config[name] = value.split(",")
line = stream.readline()
-
-
-# vim:set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap :
diff --git a/src/javatoolkit/maven/MavenPom.py
b/src/javatoolkit/maven/MavenPom.py
index 5bb01af..752b8f1 100644
--- a/src/javatoolkit/maven/MavenPom.py
+++ b/src/javatoolkit/maven/MavenPom.py
@@ -16,17 +16,17 @@
# kiorky <[email protected]>
# 08/05/2007 initial version
-import sys
import io
+
# either a very simplified representation of a maven pom
# or a fully xml rewritten pom
class MavenPom:
- def __init__(self,cli_options = None):
- self.group = ''
- self.artifact = ''
- self.version = ''
- self.name = ''
+ def __init__(self, cli_options=None):
+ self.group = ""
+ self.artifact = ""
+ self.version = ""
+ self.name = ""
self.is_child = "false"
self.dependencies = []
self.buffer = io.StringIO()
@@ -34,8 +34,7 @@ class MavenPom:
self.mydoc = None
self.cli_options = cli_options
-
- def getInfos(self,node):
+ def getInfos(self, node):
for child_node in node.childNodes:
if child_node.nodeType == child_node.ELEMENT_NODE:
if child_node.childNodes:
@@ -52,8 +51,7 @@ class MavenPom:
if child_node.nodeName == "name":
self.name = child_node.childNodes[0].nodeValue
-
- def getDescription(self,mydoc,**kwargs):
+ def getDescription(self, mydoc, **kwargs):
if mydoc:
self.project = mydoc.getElementsByTagName("project")[0]
# get inherited properties from parent pom if any
@@ -78,60 +76,72 @@ class MavenPom:
self.dependencies.append(dep)
if self.cli_options.p_group:
- self.__write("pom group:%s\n" % self.group )
+ self.__write("pom group:%s\n" % self.group)
if self.cli_options.p_ischild:
- self.__write("pom ischild:%s\n" % self.is_child )
+ self.__write("pom ischild:%s\n" % self.is_child)
if self.cli_options.p_artifact:
- self.__write("pom artifact:%s\n" % self.artifact )
+ self.__write("pom artifact:%s\n" % self.artifact)
if self.cli_options.p_version:
- self.__write("pom version:%s\n" % self.version )
+ self.__write("pom version:%s\n" % self.version)
if self.cli_options.p_dep:
- i=0
+ i = 0
for dependency in self.dependencies:
- i=i+1
- self.__write("%d:dep_group:%s\n" % (i,dependency.group) )
- self.__write("%d:dep_artifact:%s\n" %
(i,dependency.artifact) )
- self.__write("%d:dep_version:%s\n" %
(i,dependency.version) )
-
+ i = i + 1
+ self.__write("%d:dep_group:%s\n" % (i, dependency.group))
+ self.__write("%d:dep_artifact:%s\n" % (i,
dependency.artifact))
+ self.__write("%d:dep_version:%s\n" % (i,
dependency.version))
def read(self):
return self.buffer.getvalue()
-
- def rewrite(self,xmldoc,**kwargs):
+ def rewrite(self, xmldoc, **kwargs):
# desactivate all dependencies
- dependencies_root = ( xmldoc.getElementsByTagName("dependencies") or
[] )
+ dependencies_root = xmldoc.getElementsByTagName("dependencies") or []
for node in dependencies_root:
- copylist_child_Nodes =list(node.childNodes)
+ copylist_child_Nodes = list(node.childNodes)
for child_node in copylist_child_Nodes:
node.removeChild(child_node)
child_node.unlink()
# add our classpath using system scope
if self.cli_options.classpath:
- i=0
- dependencies_root = ( xmldoc.getElementsByTagName("dependencies")
or [] )
+ i = 0
+ dependencies_root = xmldoc.getElementsByTagName("dependencies") or
[]
if dependencies_root:
for node in dependencies_root:
- for classpath_element in
self.cli_options.classpath[0].split(':'):
+ for classpath_element in
self.cli_options.classpath[0].split(":"):
if classpath_element:
dependency_elem =
xmldoc.createElement("dependency")
- dependency_elem.appendChild(
self.create_element(xmldoc, "groupId", "sexy"))
- dependency_elem.appendChild(
self.create_element(xmldoc, "artifactId", "gentoo%d" % (i)))
- dependency_elem.appendChild(
self.create_element(xmldoc, "version", "666"))
- dependency_elem.appendChild(
self.create_element(xmldoc, "scope", "system"))
- dependency_elem.appendChild(
self.create_element(xmldoc, "systemPath", classpath_element))
+ dependency_elem.appendChild(
+ self.create_element(xmldoc, "groupId", "sexy")
+ )
+ dependency_elem.appendChild(
+ self.create_element(
+ xmldoc, "artifactId", "gentoo%d" % (i)
+ )
+ )
+ dependency_elem.appendChild(
+ self.create_element(xmldoc, "version", "666")
+ )
+ dependency_elem.appendChild(
+ self.create_element(xmldoc, "scope", "system")
+ )
+ dependency_elem.appendChild(
+ self.create_element(
+ xmldoc, "systemPath", classpath_element
+ )
+ )
node.appendChild(dependency_elem)
i += 1
# overwrite source/target options if any
# remove version node for all plugins
if self.cli_options.p_source or self.cli_options.p_target:
- dependencies_root = ( xmldoc.getElementsByTagName("plugin") or [] )
+ dependencies_root = xmldoc.getElementsByTagName("plugin") or []
# remove part
if len(dependencies_root) > 0:
for node in dependencies_root:
@@ -141,42 +151,50 @@ class MavenPom:
child_node.unlink()
if child_node.nodeName == "artifactId":
- if "maven-compiler-plugin" ==
child_node.childNodes[0].data:
+ if "maven-compiler-plugin" ==
child_node.childNodes[0].data:
node.parentNode.removeChild(node)
node.unlink()
# creation/overwrite part
- plugin_node = self.create_element(xmldoc,"plugin")
- group_node =
self.create_element(xmldoc,"groupId","org.apache.maven.plugins")
- artifact_node =
self.create_element(xmldoc,"artifactId","maven-compiler-plugin")
- configuration_node = self.create_element(xmldoc,"configuration")
+ plugin_node = self.create_element(xmldoc, "plugin")
+ group_node = self.create_element(
+ xmldoc, "groupId", "org.apache.maven.plugins"
+ )
+ artifact_node = self.create_element(
+ xmldoc, "artifactId", "maven-compiler-plugin"
+ )
+ configuration_node = self.create_element(xmldoc, "configuration")
plugin_node.appendChild(group_node)
plugin_node.appendChild(artifact_node)
plugin_node.appendChild(configuration_node)
if self.cli_options.p_target:
- target_node =
self.create_element(xmldoc,"target",self.cli_options.p_target[0])
+ target_node = self.create_element(
+ xmldoc, "target", self.cli_options.p_target[0]
+ )
configuration_node.appendChild(target_node)
if self.cli_options.p_source:
- source_node =
self.create_element(xmldoc,"source",self.cli_options.p_source[0])
+ source_node = self.create_element(
+ xmldoc, "source", self.cli_options.p_source[0]
+ )
configuration_node.appendChild(source_node)
- plugins_nodes = ( xmldoc.getElementsByTagName("plugins") or [] )
+ plugins_nodes = xmldoc.getElementsByTagName("plugins") or []
# no plugins node
- if len(plugins_nodes) < 1 :
- plugins_node = self.create_element(xmldoc,"plugins")
+ if len(plugins_nodes) < 1:
+ plugins_node = self.create_element(xmldoc, "plugins")
plugins_nodes.append(plugins_node)
for plugins_node in plugins_nodes:
# add our generated plugin node
plugins_node.appendChild(plugin_node)
# no build node
- build_nodes = ( xmldoc.getElementsByTagName("build") or []
)
- if len(build_nodes) < 1 :
- build_node = self.create_element(xmldoc,"build")
+ build_nodes = xmldoc.getElementsByTagName("build") or []
+ if len(build_nodes) < 1:
+ build_node = self.create_element(xmldoc, "build")
build_nodes.append(build_node)
# add build node to project_node
- project_nodes = (
xmldoc.getElementsByTagName("project") or [] )
+ project_nodes = xmldoc.getElementsByTagName("project")
or []
for project_node in project_nodes:
project_node.appendChild(build_node)
@@ -186,8 +204,7 @@ class MavenPom:
self.__write(xmldoc.toxml("utf-8"))
-
- def create_element(self,xmldoc,element_name,text_value=None):
+ def create_element(self, xmldoc, element_name, text_value=None):
element = None
if element_name:
element = xmldoc.createElement(element_name)
@@ -197,12 +214,10 @@ class MavenPom:
return element
-
- def parse(self,in_stream,callback=None,**kwargs):
+ def parse(self, in_stream, callback=None, **kwargs):
from xml.dom.minidom import parseString
+
self.mydoc = parseString(in_stream)
if callback:
- callback(self.mydoc,**kwargs)
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
+ callback(self.mydoc, **kwargs)
diff --git a/src/javatoolkit/maven/__init__.py
b/src/javatoolkit/maven/__init__.py
index c339ef6..afd7c9c 100644
--- a/src/javatoolkit/maven/__init__.py
+++ b/src/javatoolkit/maven/__init__.py
@@ -1,7 +1,5 @@
-'''
+"""
javatoolkit.maven module
-'''
+"""
-__version__ = '1.1'
-
-#set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
+__version__ = "1.1"
diff --git a/src/javatoolkit/output.py b/src/javatoolkit/output.py
index 2af324a..10f6663 100644
--- a/src/javatoolkit/output.py
+++ b/src/javatoolkit/output.py
@@ -22,5 +22,3 @@ def einfo(s):
def die(err, s):
eerror(s)
sys.exit(err)
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
diff --git a/src/javatoolkit/parser/__init__.py
b/src/javatoolkit/parser/__init__.py
index f9cc2e5..7a1e6d5 100644
--- a/src/javatoolkit/parser/__init__.py
+++ b/src/javatoolkit/parser/__init__.py
@@ -9,4 +9,4 @@ from .helpers import *
from . import buildproperties
if __name__ == "__main__":
- print("This is not an executable module")
+ print("This is not an executable module")
diff --git a/src/javatoolkit/parser/buildproperties.py
b/src/javatoolkit/parser/buildproperties.py
index 9a73f78..d1c4af5 100644
--- a/src/javatoolkit/parser/buildproperties.py
+++ b/src/javatoolkit/parser/buildproperties.py
@@ -7,10 +7,11 @@
from .tree import *
from . import parser
+
class BuildPropertiesParser(parser.Parser):
def parse(self, ins):
- """ Parse an input stream containing an ant build.properties file.
Return a
+ """Parse an input stream containing an ant build.properties file.
Return a
structured document represented by tree.Node
@param ins - input stream
@@ -40,14 +41,14 @@ class BuildPropertiesParser(parser.Parser):
if continued_line:
continued_line = False
- value += x.strip("\"")
+ value += x.strip('"')
if len(value) and value[-1] == "\\":
value = value[:-1]
continued_line = True
continue
- root.add_kid(Node(attrib,value))
+ root.add_kid(Node(attrib, value))
continue
if len(x) == 0 or x[:1] == "#":
@@ -58,14 +59,14 @@ class BuildPropertiesParser(parser.Parser):
if len(xs) > 1:
attrib = xs[0].strip()
- value = xs[1].strip().strip("\"")
+ value = xs[1].strip().strip('"')
if value != "" and value[-1] == "\\":
value = value[:-1]
continued_line = True
continue
- root.add_kid(Node(attrib,value))
+ root.add_kid(Node(attrib, value))
else:
raise ParseError("Malformed line " + str(lineno))
@@ -77,5 +78,3 @@ class BuildPropertiesParser(parser.Parser):
def wrapped_value(self, node):
return node.output_value()
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
diff --git a/src/javatoolkit/parser/helpers.py
b/src/javatoolkit/parser/helpers.py
index c0e1bb3..6da3538 100644
--- a/src/javatoolkit/parser/helpers.py
+++ b/src/javatoolkit/parser/helpers.py
@@ -4,7 +4,8 @@
#
# Licensed under the GNU General Public License, v2
-def expand(root, expr, realroot = None):
+
+def expand(root, expr, realroot=None):
"""Evaluates a path expression on a given tree.
@param root - the root of the tree
@@ -40,6 +41,7 @@ def expand(root, expr, realroot = None):
return expanded
+
def strip_varmarker(s):
"""Strips away ${ and } in a variable expression. Idempotent if marker not
found.
@@ -51,5 +53,3 @@ def strip_varmarker(s):
return s[2:-1]
return s
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
diff --git a/src/javatoolkit/parser/manifest.py
b/src/javatoolkit/parser/manifest.py
index b55a28a..7a060eb 100644
--- a/src/javatoolkit/parser/manifest.py
+++ b/src/javatoolkit/parser/manifest.py
@@ -4,10 +4,11 @@
from .tree import *
from . import parser
+
class ManifestParser(parser.Parser):
def parse(self, ins):
- """ Parse an input stream containing a MANIFEST.MF file. Return a
+ """Parse an input stream containing a MANIFEST.MF file. Return a
structured document represented by tree.Node
@param ins - input stream
@@ -36,7 +37,7 @@ class ManifestParser(parser.Parser):
if len(xs) > 1:
if attrib != "":
- root.add_kid(Node(attrib,value))
+ root.add_kid(Node(attrib, value))
attrib = xs[0]
value = xs[1].strip()
@@ -45,7 +46,7 @@ class ManifestParser(parser.Parser):
raise ParseError("Malformed line " + str(lineno))
if attrib != "":
- root.add_kid(Node(attrib,value))
+ root.add_kid(Node(attrib, value))
return root
@@ -54,5 +55,3 @@ class ManifestParser(parser.Parser):
def wrapped_value(self, node):
return node.output_value(",")
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
diff --git a/src/javatoolkit/parser/parser.py b/src/javatoolkit/parser/parser.py
index 3393fef..cdee326 100644
--- a/src/javatoolkit/parser/parser.py
+++ b/src/javatoolkit/parser/parser.py
@@ -2,10 +2,10 @@
#
# Licensed under the GNU General Public License, v2
+
class Parser:
def parse(self, ins):
raise NotImplementedError
+
def output(self, ous, tree):
raise NotImplementedError
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
diff --git a/src/javatoolkit/parser/tree.py b/src/javatoolkit/parser/tree.py
index 6a07b45..c9beaca 100644
--- a/src/javatoolkit/parser/tree.py
+++ b/src/javatoolkit/parser/tree.py
@@ -15,6 +15,7 @@ class NodeIter:
def __init__(self, node):
self._node = node
self._index = 0
+
def __next__(self):
self._index += 1
if self._index >= len(self._node._kids):
@@ -23,7 +24,7 @@ class NodeIter:
class Node:
- def __init__(self, name = None, value = None):
+ def __init__(self, name=None, value=None):
self.name = name
self.value = value
self._kids = []
@@ -45,7 +46,8 @@ class Node:
"""
Dump self as text to stream.
"""
- def dump(self, ous, indent = 0):
+
+ def dump(self, ous, indent=0):
if self.name:
ous.write((" " * indent) + self.name + " = " + self.value + "\n")
@@ -54,9 +56,17 @@ class Node:
"""
Output self as text to stream using the given format.
"""
- def output(self, ous, before, between, after, wrap = None, indent = ""):
+
+ def output(self, ous, before, between, after, wrap=None, indent=""):
if self.name:
- ous.write(before + self.name + between + self.output_value(wrap,
indent) + after + "\n")
+ ous.write(
+ before
+ + self.name
+ + between
+ + self.output_value(wrap, indent)
+ + after
+ + "\n"
+ )
for x in self._kids:
x.output(ous, before, between, after, wrap, indent)
@@ -64,7 +74,8 @@ class Node:
"""
Return node value as string using the given format.
"""
- def output_value(self, wrap = None, indent = ""):
+
+ def output_value(self, wrap=None, indent=""):
if wrap == None:
return self.value
else:
@@ -73,6 +84,7 @@ class Node:
"""
Returns a lists of all the node names.
"""
+
def node_names(self):
names = []
@@ -92,6 +104,7 @@ class Node:
@return reference to the found node, if any
"""
+
def find_node(self, nodename):
if self.name == nodename:
return self
@@ -116,7 +129,8 @@ class Node:
@return wrapped text
"""
- def __wrap_outside_quotes(self, text, wrap, indent, pos = None):
+
+ def __wrap_outside_quotes(self, text, wrap, indent, pos=None):
if pos == None:
pos = len(text)
@@ -128,8 +142,13 @@ class Node:
num_quotes = text.count('"', next_wrap, pos)
if num_quotes % 2 != 0:
- return self.__wrap_outside_quotes(text, wrap, indent,
text.rfind('"', 0, next_wrap + 1))
-
- return self.__wrap_outside_quotes(text[0:next_wrap] + wrap + "\n" +
indent + text[next_wrap + 1:], wrap, indent, next_wrap)
-
-# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
+ return self.__wrap_outside_quotes(
+ text, wrap, indent, text.rfind('"', 0, next_wrap + 1)
+ )
+
+ return self.__wrap_outside_quotes(
+ text[0:next_wrap] + wrap + "\n" + indent + text[next_wrap + 1 :],
+ wrap,
+ indent,
+ next_wrap,
+ )
diff --git a/src/javatoolkit/scripts/buildparser.py
b/src/javatoolkit/scripts/buildparser.py
index 6e3097c..b1b869b 100755
--- a/src/javatoolkit/scripts/buildparser.py
+++ b/src/javatoolkit/scripts/buildparser.py
@@ -14,33 +14,58 @@ from ..parser.buildproperties import BuildPropertiesParser
from ..parser.manifest import ManifestParser
from ..parser.tree import Node, ParseError
-__author__ = ["James Le Cuirot <[email protected]>",
- "Karl Trygve Kalleberg <[email protected]>"]
+__author__ = [
+ "James Le Cuirot <[email protected]>",
+ "Karl Trygve Kalleberg <[email protected]>",
+]
__version__ = "0.3.0"
__productname__ = "buildparser"
__description__ = "A parser for build.properties and JAR manifest files."
def parse_args():
- usage = 'buildparser [options] [node name] [replacement] <filename>'
- about = __productname__ + " : " + __description__ + "\n" + \
- "Version : " + __version__ + "\n" \
+ usage = "buildparser [options] [node name] [replacement] <filename>"
+ about = (
+ __productname__
+ + " : "
+ + __description__
+ + "\n"
+ + "Version : "
+ + __version__
+ + "\n"
"Authors : " + __author__[0]
+ )
for x in __author__[1:]:
about += "\n " + x
parser = OptionParser(usage, version=about)
- parser.add_option('-t', '--type', action='store', type='choice',
- dest='type', choices=['manifest', 'buildprops'],
- help='Type of file to parse: manifest or buildprops')
-
- parser.add_option('-i', '--in-place', action='store_true', dest='in_place',
- help='Edit file in place when replacing')
-
- parser.add_option('-w', '--wrap', action='store_true', dest='wrap',
- help='Wrap when returning singular values')
+ parser.add_option(
+ "-t",
+ "--type",
+ action="store",
+ type="choice",
+ dest="type",
+ choices=["manifest", "buildprops"],
+ help="Type of file to parse: manifest or buildprops",
+ )
+
+ parser.add_option(
+ "-i",
+ "--in-place",
+ action="store_true",
+ dest="in_place",
+ help="Edit file in place when replacing",
+ )
+
+ parser.add_option(
+ "-w",
+ "--wrap",
+ action="store_true",
+ dest="wrap",
+ help="Wrap when returning singular values",
+ )
opt, args = parser.parse_args()
@@ -79,8 +104,9 @@ def main():
else:
sys.exit(
- __productname__ +
- ": error: Unknown file type. Specify using the -t option.")
+ __productname__
+ + ": error: Unknown file type. Specify using the -t option."
+ )
t = p.parse(f)
f.close()
@@ -118,10 +144,8 @@ def main():
print(x)
-if __name__ == '__main__':
+if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("Interrupted by user, aborting.")
-
-# set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
diff --git a/src/javatoolkit/scripts/class_version_verify.py
b/src/javatoolkit/scripts/class_version_verify.py
index 098685c..b5e6060 100755
--- a/src/javatoolkit/scripts/class_version_verify.py
+++ b/src/javatoolkit/scripts/class_version_verify.py
@@ -17,39 +17,44 @@ def main() -> None:
action="store_true",
dest="deep",
default=False,
- help="go into dirs"),
+ help="go into dirs",
+ ),
make_option(
"-t",
"--target",
type="string",
dest="version",
- help="target version that is valid"),
+ help="target version that is valid",
+ ),
make_option(
"-v",
"--verbose",
action="store_true",
dest="verbose",
default=False,
- help="Print details about analyzed files"),
+ help="Print details about analyzed files",
+ ),
make_option(
"-s",
"--silent",
action="store_true",
dest="silent",
default=False,
- help="No output"),
+ help="No output",
+ ),
make_option(
"-f",
"--file-only",
action="store_true",
dest="file_only",
default=False,
- help="Only output the files"),
+ help="Only output the files",
+ ),
]
parser = OptionParser(
- "%prog -t version [-r] [-v] [-s] <class/jar files or dir>",
- options_list)
+ "%prog -t version [-r] [-v] [-s] <class/jar files or dir>",
options_list
+ )
(options, args) = parser.parse_args()
if not options.version:
@@ -86,7 +91,7 @@ def main() -> None:
for skipped in cvv_magic.skipped:
print(__format_skipped(skipped))
- print(f'CVV: {options.version}')
+ print(f"CVV: {options.version}")
print(__get_total_line(cvv_magic))
if len(cvv_magic.bad) > 0:
@@ -100,39 +105,39 @@ def __get_total_line(cvv_magic: cvv.CVVMagic) -> str:
bad = len(cvv_magic.bad)
skipped = len(cvv_magic.skipped)
total = good + bad + skipped
- return f'Checked: {total} Good: {good} Bad: {bad} Skipped: {skipped}'
+ return f"Checked: {total} Good: {good} Bad: {bad} Skipped: {skipped}"
def __format_class(cf: cvv.ClassFile) -> str:
- return f'{__format_loc(cf.loc)} version {cf.encoded_version} (expected
{cf.expected_version})'
+ return f"{__format_loc(cf.loc)} version {cf.encoded_version} (expected
{cf.expected_version})"
def __format_skipped(f: cvv.SkippedFile) -> str:
- return f'Skip: {__format_loc(f.loc)} because: {f.reason}'
+ return f"Skip: {__format_loc(f.loc)} because: {f.reason}"
def __format_bad(f: cvv.BadFile) -> str:
msg: str
match f:
case cvv.ClassFile():
- msg = f'{__format_class(f)}'
+ msg = f"{__format_class(f)}"
case cvv.BadMultireleaseManifest(loc, multiReleaseDirs):
plain_dirs = [d.member for d in multiReleaseDirs]
msg = f'{__format_loc(loc)} missing "Multi-Release: true" implied
by {plain_dirs}'
- return f'Bad: {msg}'
+ return f"Bad: {msg}"
def __format_good(f: cvv.GoodFile) -> str:
- return f'Good: {__format_class(f)}'
+ return f"Good: {__format_class(f)}"
def __format_loc(loc: cvv.Loc) -> str:
match loc:
case cvv.FileLoc(path):
- return f'{path}'
+ return f"{path}"
case cvv.JarLoc(jar, member):
- return f'{jar.path}({member})'
+ return f"{jar.path}({member})"
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/src/javatoolkit/scripts/eclipse_build.py
b/src/javatoolkit/scripts/eclipse_build.py
index f3ee2fa..75261ba 100755
--- a/src/javatoolkit/scripts/eclipse_build.py
+++ b/src/javatoolkit/scripts/eclipse_build.py
@@ -7,13 +7,11 @@
# Authors
# Alistair Bush <[email protected]>
-from __future__ import with_statement
-import os
-import sys
from optparse import OptionParser, make_option
from xml.dom.minidom import parse
from ..java.properties import PropertiesParser
+
def main():
usage = "Eclipse Ant Build File writer"
usage += "Copyright 2008 Gentoo Foundation\n"
@@ -23,33 +21,39 @@ def main():
option_list = [
make_option(
- '-p',
- '--project',
- action='store',
- dest='project',
- help='Project Name'),
+ "-p", "--project", action="store", dest="project", help="Project
Name"
+ ),
+ make_option(
+ "-i",
+ "--include",
+ action="append",
+ dest="includes",
+ help="Files to include in jar",
+ ),
+ make_option(
+ "-s",
+ "--src",
+ action="append",
+ dest="source",
+ help="Directories containing src to build",
+ ),
make_option(
- '-i',
- '--include',
- action='append',
- dest='includes',
- help='Files to include in jar'),
- make_option('-s', '--src', action='append', dest='source',
- help='Directories containing src to build'),
+ "-m", "--manifest", action="store", dest="manifest",
help="Manifest File"
+ ),
make_option(
- '-m',
- '--manifest',
- action='store',
- dest='manifest',
- help='Manifest File'),
- make_option('-f', '--file', action='store', dest='file',
- help='Eclipse build.properties file to parse.'),
+ "-f",
+ "--file",
+ action="store",
+ dest="file",
+ help="Eclipse build.properties file to parse.",
+ ),
make_option(
- '-o',
- '--output',
- action='store',
- dest='output',
- help='Output build.xml to this file')
+ "-o",
+ "--output",
+ action="store",
+ dest="output",
+ help="Output build.xml to this file",
+ ),
]
parser = OptionParser(usage, option_list)
@@ -58,8 +62,8 @@ def main():
if options.file:
properties = PropertiesParser(options.file)
- #dom = parse( options.file )
- #classpathentries = dom.getElementsByTagName('classpathentry')
+ # dom = parse( options.file )
+ # classpathentries = dom.getElementsByTagName('classpathentry')
# for entry in classpathentries:
# if entry.attributes['kind'] and
entry.attributes['kind'].nodeValue == 'src':
@@ -67,12 +71,11 @@ def main():
# if entry.attributes['path']:
# src_dirs.append( entry.attributes['path'].nodeValue )
- with open(options.output, 'w') as output:
+ with open(options.output, "w") as output:
output.write('<?xml version="1.0" encoding="UTF-8" ?>\n')
output.write(
- '<project basedir="." default="jar" name="' +
- options.project +
- '">\n')
+ '<project basedir="." default="jar" name="' + options.project
+ '">\n'
+ )
output.write('<property name="target" value="1.4"/>\n')
output.write('<property name="source" value="1.4"/>\n')
output.write('<property name="gentoo.classpath" value="" />\n\n')
@@ -80,51 +83,54 @@ def main():
output.write('<mkdir dir="bin"/>\n')
output.write('<copy includeemptydirs="false" todir="bin">\n')
try:
- if properties.config['source..']:
- for dir in properties.config['source..']:
+ if properties.config["source.."]:
+ for dir in properties.config["source.."]:
output.write(
- '<fileset dir="' +
- dir +
- '" excludes="**/*.java, **/*.launch" />\n')
- if properties.config['bin.includes']:
- for item in properties.config['bin.includes']:
- if item != '.':
- if item.endswith('/'):
- item = item.rstrip('/')
+ '<fileset dir="'
+ + dir
+ + '" excludes="**/*.java, **/*.launch" />\n'
+ )
+ if properties.config["bin.includes"]:
+ for item in properties.config["bin.includes"]:
+ if item != ".":
+ if item.endswith("/"):
+ item = item.rstrip("/")
output.write(
- '<fileset dir="." includes="' +
- item +
- '/**" excludes="**/*.java, **/*.launch"
/>\n')
+ '<fileset dir="." includes="'
+ + item
+ + '/**" excludes="**/*.java, **/*.launch"
/>\n'
+ )
else:
- output.write(
- '<fileset file="' + item + '" />\n')
+ output.write('<fileset file="' + item + '"
/>\n')
finally:
- output.write('</copy>\n')
+ output.write("</copy>\n")
if options.includes:
for file in options.includes:
output.write('<copy file="' + file + '" todir="bin"/>')
- output.write('</target>\n')
+ output.write("</target>\n")
output.write(
- '\n<target name="clean">\n\t<delete
dir="bin"/>\n</target>\n\n')
+ '\n<target name="clean">\n\t<delete dir="bin"/>\n</target>\n\n'
+ )
output.write('<target depends="init" name="compile">\n')
output.write(
- '<javac destdir="bin" source="${source}" target="${target}"
classpath="${gentoo.classpath}">\n')
+ '<javac destdir="bin" source="${source}" target="${target}"
classpath="${gentoo.classpath}">\n'
+ )
try:
- if properties.config['source..']:
- for dir in properties.config['source..']:
+ if properties.config["source.."]:
+ for dir in properties.config["source.."]:
output.write('\t<src path="' + dir + '" />\n')
finally:
- output.write('</javac>\n')
- output.write('</target>\n\n')
+ output.write("</javac>\n")
+ output.write("</target>\n\n")
output.write('<target depends="compile" name="jar" >\n')
output.write('<jar file="${ant.project.name}.jar" basedir="bin"')
if options.manifest:
output.write('\nmanifest="' + parser.manifest + '">\n')
else:
- output.write('>\n')
- output.write('</jar>\n')
- output.write('</target>\n')
- output.write('</project>\n')
+ output.write(">\n")
+ output.write("</jar>\n")
+ output.write("</target>\n")
+ output.write("</project>\n")
# output.write('')
# output.write('')
# output.write('')
@@ -134,7 +140,5 @@ def main():
# output.write('')
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
-
-# vim:set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap :
diff --git a/src/javatoolkit/scripts/findclass.py
b/src/javatoolkit/scripts/findclass.py
index 98575e6..b66eaef 100755
--- a/src/javatoolkit/scripts/findclass.py
+++ b/src/javatoolkit/scripts/findclass.py
@@ -19,21 +19,35 @@ from subprocess import getstatusoutput
from java_config.jc_util import find_exec, collect_packages
-__author__ = "Karl Trygve Kalleberg <[email protected]> and Fabio Lessa
<[email protected]>"
+__author__ = (
+ "Karl Trygve Kalleberg <[email protected]> and Fabio Lessa
<[email protected]>"
+)
__version__ = "0.1.0"
__productname__ = "findclass"
__description__ = "Gentoo Java Class Query Tool"
def parse_args():
- usage = 'findclass [options] class.or.package.Name'
- about = __productname__ + " : " + __description__ + "\n" + \
- "Authors : " + __author__ + \
- "Version : " + __version__
+ usage = "findclass [options] class.or.package.Name"
+ about = (
+ __productname__
+ + " : "
+ + __description__
+ + "\n"
+ + "Authors : "
+ + __author__
+ + "Version : "
+ + __version__
+ )
parser = OptionParser(usage, version=about)
- parser.add_option('-v', '--verbose', action='store_true',
- dest='verbose', help='generate verbose output')
+ parser.add_option(
+ "-v",
+ "--verbose",
+ action="store_true",
+ dest="verbose",
+ help="generate verbose output",
+ )
opt, files = parser.parse_args()
if len(files) < 1:
@@ -45,33 +59,33 @@ def parse_args():
def main():
opt, files = parse_args()
- jarcmd = find_exec('jar')
+ jarcmd = find_exec("jar")
- javapaths = [f.replace('.', '/') for f in files]
+ javapaths = [f.replace(".", "/") for f in files]
matchers = [re.compile(p) for p in javapaths]
for pkg in get_all_packages():
if opt.verbose:
print("Searching package %s" % pkg)
- for jar in collect_packages(pkg).split(':'):
+ for jar in collect_packages(pkg).split(":"):
if opt.verbose:
print("Searching jar %s" % jar)
status, out = getstatusoutput("%s tvf %s" % (jarcmd, jar))
for m in matchers:
if m.search(out):
if opt.verbose:
- print("Found in %s" % pkg, end=' ')
+ print("Found in %s" % pkg, end=" ")
print(jar)
def get_all_packages():
- pkg = glob.glob('/usr/share/*/package.env')
+ pkg = glob.glob("/usr/share/*/package.env")
pkg = [os.path.basename(os.path.dirname(i)) for i in pkg]
- classpath = glob.glob('/usr/share/*/classpath.env')
+ classpath = glob.glob("/usr/share/*/classpath.env")
classpath = [os.path.basename(os.path.dirname(i)) for i in classpath]
- dir = glob.glob('/usr/share/java/packages/*')
+ dir = glob.glob("/usr/share/java/packages/*")
dir = [os.path.basename(i) for i in dir]
pkg.extend(classpath)
@@ -79,7 +93,7 @@ def get_all_packages():
return pkg
-if __name__ == '__main__':
+if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
diff --git a/src/javatoolkit/scripts/jarjarclean.py
b/src/javatoolkit/scripts/jarjarclean.py
index 2b95969..396f9e8 100755
--- a/src/javatoolkit/scripts/jarjarclean.py
+++ b/src/javatoolkit/scripts/jarjarclean.py
@@ -13,7 +13,7 @@ import xml.etree.cElementTree as et
args = sys.argv[1:]
if len(args) == 0:
- args = ['build.xml']
+ args = ["build.xml"]
def main():
@@ -23,24 +23,30 @@ def main():
for elem in tree.getiterator():
for child in list(elem):
- if child.tag == 'taskdef' and child.get(
- 'classname') == 'com.tonicsystems.jarjar.JarJarTask':
- tags.append(child.get('name'))
+ if (
+ child.tag == "taskdef"
+ and child.get("classname") ==
"com.tonicsystems.jarjar.JarJarTask"
+ ):
+ tags.append(child.get("name"))
elem.remove(child)
for tag in tags:
for jarjar in tree.getiterator(tag):
- if jarjar.get('destfile') or jarjar.get('jarfile'):
- jarjar.tag = 'jar'
- if jarjar.get('verbose'):
- del jarjar.attrib['verbose']
+ if jarjar.get("destfile") or jarjar.get("jarfile"):
+ jarjar.tag = "jar"
+ if jarjar.get("verbose"):
+ del jarjar.attrib["verbose"]
for child in list(jarjar):
- if child.tag == 'keep' or child.tag == 'rule' or
child.tag == 'zipfileset':
+ if (
+ child.tag == "keep"
+ or child.tag == "rule"
+ or child.tag == "zipfileset"
+ ):
jarjar.remove(child)
- with open(file, 'w') as f:
+ with open(file, "w") as f:
tree.write(f)
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/src/javatoolkit/scripts/maven_helper.py
b/src/javatoolkit/scripts/maven_helper.py
index d486bc7..68428e5 100755
--- a/src/javatoolkit/scripts/maven_helper.py
+++ b/src/javatoolkit/scripts/maven_helper.py
@@ -1,6 +1,5 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
-# vim: set ai ts=8 sts=0 sw=8 tw=0 noexpandtab:
# Copyright 2004-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public Licence v2
@@ -33,7 +32,10 @@ def main():
usage += "Usage:\n"
usage += " %s [-a] [-v] [-g] [-d] [-f fic.xml]\n" % sys.argv[0]
usage += "Or:\n"
- usage += " %s --rewrite [--classpath some.jar:class.jar:path.jar]
[--source JVM_VER ] |--target JVM_VER]\n" % sys.argv[0]
+ usage += (
+ " %s --rewrite [--classpath some.jar:class.jar:path.jar] [--source
JVM_VER ] |--target JVM_VER]\n"
+ % sys.argv[0]
+ )
usage += " JVM_VER ::= 1.4 || 1.5 "
usage += "\n"
usage += "If the -f parameter is not utilized, the script will read and\n"
@@ -48,18 +50,25 @@ def main():
pom = MavenPom(options)
if options.p_rewrite:
pom.parse(stream, pom.rewrite)
- elif options.p_ischild or options.p_group or options.p_dep or
options.p_artifact or options.p_version:
+ elif (
+ options.p_ischild
+ or options.p_group
+ or options.p_dep
+ or options.p_artifact
+ or options.p_version
+ ):
pom.parse(stream, pom.getDescription)
return pom
def run():
if options.files:
import os
+
for file in options.files:
# First parse the file into memory
cwd = os.getcwd()
dirname = os.path.dirname(file)
- if dirname != '': # for file comes out as ''
+ if dirname != "": # for file comes out as ''
os.chdir(os.path.dirname(file))
f = open(os.path.basename(file), "r")
@@ -79,76 +88,92 @@ def main():
pom = doAction(sys.stdin.read(), options)
print(pom.read())
-
-############### MAIN ###############
+ ############### MAIN ###############
options_list = [
make_option(
"-a",
"--artifact",
action="store_true",
dest="p_artifact",
- help="get artifact name."),
+ help="get artifact name.",
+ ),
make_option(
"-c",
"--classpath",
action="append",
dest="classpath",
- help="set classpath to use with maven."),
+ help="set classpath to use with maven.",
+ ),
make_option(
"-s",
"--source",
action="append",
dest="p_source",
- help="Java source version."),
+ help="Java source version.",
+ ),
make_option(
"-t",
"--target",
action="append",
dest="p_target",
- help="Java target version."),
+ help="Java target version.",
+ ),
make_option(
"-d",
"--depependencies",
action="store_true",
dest="p_dep",
- help="get dependencies infos"),
+ help="get dependencies infos",
+ ),
make_option(
"-f",
"--file",
action="append",
dest="files",
- help="Transform files instead of operating on stdout and stdin"),
+ help="Transform files instead of operating on stdout and stdin",
+ ),
make_option(
"-g",
"--group",
action="store_true",
dest="p_group",
- help="get artifact group."),
+ help="get artifact group.",
+ ),
make_option(
"-r",
"--rewrite",
action="store_true",
dest="p_rewrite",
- help="rewrite poms to use our classpath"),
+ help="rewrite poms to use our classpath",
+ ),
make_option(
"-p",
"--ischild",
action="store_true",
dest="p_ischild",
- help="return true if this is a child pom"),
+ help="return true if this is a child pom",
+ ),
make_option(
"-v",
"--version",
action="store_true",
dest="p_version",
- help="get artifact version."),
+ help="get artifact version.",
+ ),
]
parser = OptionParser(usage, options_list)
(options, args) = parser.parse_args()
# Invalid Arguments Must be smited!
- if not options.p_ischild and not options.p_rewrite and not options.p_dep
and not options.p_version and not options.p_artifact and not options.p_group:
+ if (
+ not options.p_ischild
+ and not options.p_rewrite
+ and not options.p_dep
+ and not options.p_version
+ and not options.p_artifact
+ and not options.p_group
+ ):
print(usage)
print()
error("No action was specified.")
@@ -185,5 +210,5 @@ def main():
run()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/src/test/test_cvv.py b/src/test/test_cvv.py
index 8c0e4e9..d11b8e8 100644
--- a/src/test/test_cvv.py
+++ b/src/test/test_cvv.py
@@ -8,10 +8,10 @@ import os
def create_class_header(version: int) -> bytes:
- magic = b'\xca\xfe\xba\xbe'
+ magic = b"\xca\xfe\xba\xbe"
minor = 0
major = version + 44
- return magic + struct.pack('>2H', minor, major)
+ return magic + struct.pack(">2H", minor, major)
def create_class_file(version: int) -> io.BytesIO:
@@ -19,19 +19,20 @@ def create_class_file(version: int) -> io.BytesIO:
def create_jar(files: list[tuple[str, int]], multi_release: bool = False) ->
ZipFile:
- result = ZipFile(io.BytesIO(), 'w')
- for (path, version) in files:
+ result = ZipFile(io.BytesIO(), "w")
+ for path, version in files:
result.writestr(path, create_class_header(version))
- manifest = f'''Manifest-Version: 1.0
+ manifest = f"""Manifest-Version: 1.0
Created-By: 21.0.6 (javatoolkit mock)
Multi-Release: {'true' if multi_release else 'false'}
-'''
- result.writestr('META-INF/MANIFEST.MF', manifest)
+"""
+ result.writestr("META-INF/MANIFEST.MF", manifest)
return result
-AnyFileInfo = T.TypeVar('AnyFileInfo',
- bound=cvv.BadFile | cvv.GoodFile | cvv.SkippedFile)
+AnyFileInfo = T.TypeVar(
+ "AnyFileInfo", bound=cvv.BadFile | cvv.GoodFile | cvv.SkippedFile
+)
def my_sort(lst: list[AnyFileInfo]) -> list[AnyFileInfo]:
@@ -41,197 +42,267 @@ def my_sort(lst: list[AnyFileInfo]) -> list[AnyFileInfo]:
def key_extractor(v: AnyFileInfo) -> tuple[str, str]:
match v.loc:
case cvv.JarLoc(cvv.FileLoc(path), member):
- return (path, member)
+ return path, member
case cvv.FileLoc(path):
- return (path, '')
+ return path, ""
return sorted(lst, key=key_extractor)
class SimpleTest(TestCase):
def test_class(self) -> None:
- m = cvv.CVVMagic('8')
- m.do_class(create_class_file(7), cvv.FileLoc('7.class'))
- m.do_class(create_class_file(8), cvv.FileLoc('8.class'))
- m.do_class(create_class_file(9), cvv.FileLoc('9.class'))
+ m = cvv.CVVMagic("8")
+ m.do_class(create_class_file(7), cvv.FileLoc("7.class"))
+ m.do_class(create_class_file(8), cvv.FileLoc("8.class"))
+ m.do_class(create_class_file(9), cvv.FileLoc("9.class"))
def make_class(path: str, encoded_version: str) -> cvv.ClassFile:
return cvv.ClassFile(
encoded_version=encoded_version,
- expected_version='1.8',
- loc=cvv.FileLoc(path)
+ expected_version="1.8",
+ loc=cvv.FileLoc(path),
)
- self.assertListEqual(my_sort(m.good), [
- make_class('7.class', '1.7'),
- make_class('8.class', '1.8'),
- ])
- self.assertListEqual(my_sort(m.bad), [
- make_class('9.class', '9')
- ])
+ self.assertListEqual(
+ my_sort(m.good),
+ [
+ make_class("7.class", "1.7"),
+ make_class("8.class", "1.8"),
+ ],
+ )
+ self.assertListEqual(my_sort(m.bad), [make_class("9.class", "9")])
self.assertListEqual(m.skipped, [])
def test_jar(self) -> None:
- m = cvv.CVVMagic('1.8')
- m.do_jar(jar_path=cvv.FileLoc('a.jar'), jar=create_jar([
- ('Main.class', 8),
- ('module-info.class', 9),
- ('my/deep/module/Foo.class', 10),
- ]))
+ m = cvv.CVVMagic("1.8")
+ m.do_jar(
+ jar_path=cvv.FileLoc("a.jar"),
+ jar=create_jar(
+ [
+ ("Main.class", 8),
+ ("module-info.class", 9),
+ ("my/deep/module/Foo.class", 10),
+ ]
+ ),
+ )
def jar_loc(path: str) -> cvv.JarLoc:
- return cvv.JarLoc(cvv.FileLoc('a.jar'), path)
+ return cvv.JarLoc(cvv.FileLoc("a.jar"), path)
def make_class(path: str, encoded_version: str) -> cvv.ClassFile:
return cvv.ClassFile(
encoded_version=encoded_version,
- expected_version='1.8',
- loc=jar_loc(path)
+ expected_version="1.8",
+ loc=jar_loc(path),
)
- self.assertListEqual(my_sort(m.good), [
- make_class('Main.class', '1.8'),
- ])
- self.assertListEqual(my_sort(m.bad), [
- make_class('my/deep/module/Foo.class', '10'),
- ])
- self.assertListEqual(my_sort(m.skipped), [
- cvv.SkippedModuleInfo(jar_loc('module-info.class')),
- ])
+ self.assertListEqual(
+ my_sort(m.good),
+ [
+ make_class("Main.class", "1.8"),
+ ],
+ )
+ self.assertListEqual(
+ my_sort(m.bad),
+ [
+ make_class("my/deep/module/Foo.class", "10"),
+ ],
+ )
+ self.assertListEqual(
+ my_sort(m.skipped),
+ [
+ cvv.SkippedModuleInfo(jar_loc("module-info.class")),
+ ],
+ )
def test_multirelease_jar(self) -> None:
- m = cvv.CVVMagic('9')
- m.do_jar(jar_path=cvv.FileLoc('a.jar'),
jar=create_jar(multi_release=True, files=[
- ('module-info.class', 9),
- ('File1.class', 9),
- ('File2.class', 8),
- ('META-INF/versions/10/module-info.class', 10),
- ('META-INF/versions/10/File1.class', 11),
- ('META-INF/versions/10/File2.class', 10),
- ('META-INF/versions/14/module-info.class', 15),
- ('META-INF/versions/14/File1.class', 13),
- ]))
-
- def make_class(path: str, encoded_version: str, expected_version:
T.Optional[str] = None) -> cvv.ClassFile:
+ m = cvv.CVVMagic("9")
+ m.do_jar(
+ jar_path=cvv.FileLoc("a.jar"),
+ jar=create_jar(
+ multi_release=True,
+ files=[
+ ("module-info.class", 9),
+ ("File1.class", 9),
+ ("File2.class", 8),
+ ("META-INF/versions/10/module-info.class", 10),
+ ("META-INF/versions/10/File1.class", 11),
+ ("META-INF/versions/10/File2.class", 10),
+ ("META-INF/versions/14/module-info.class", 15),
+ ("META-INF/versions/14/File1.class", 13),
+ ],
+ ),
+ )
+
+ def make_class(
+ path: str, encoded_version: str, expected_version: T.Optional[str]
= None
+ ) -> cvv.ClassFile:
return cvv.ClassFile(
encoded_version=encoded_version,
- expected_version=expected_version or '9',
- loc=cvv.JarLoc(cvv.FileLoc('a.jar'), path),
+ expected_version=expected_version or "9",
+ loc=cvv.JarLoc(cvv.FileLoc("a.jar"), path),
)
- self.assertListEqual(my_sort(m.good), [
- make_class('File1.class', '9'),
- make_class('File2.class', '1.8'),
- make_class('META-INF/versions/10/File2.class', '10', '10'),
- make_class('META-INF/versions/10/module-info.class', '10', '10'),
- make_class('META-INF/versions/14/File1.class', '13', '14'),
- make_class('module-info.class', '9'),
- ])
- self.assertListEqual(my_sort(m.bad), [
- make_class('META-INF/versions/10/File1.class', '11', '10'),
- make_class('META-INF/versions/14/module-info.class', '15', '14'),
- ])
+ self.assertListEqual(
+ my_sort(m.good),
+ [
+ make_class("File1.class", "9"),
+ make_class("File2.class", "1.8"),
+ make_class("META-INF/versions/10/File2.class", "10", "10"),
+ make_class("META-INF/versions/10/module-info.class", "10",
"10"),
+ make_class("META-INF/versions/14/File1.class", "13", "14"),
+ make_class("module-info.class", "9"),
+ ],
+ )
+ self.assertListEqual(
+ my_sort(m.bad),
+ [
+ make_class("META-INF/versions/10/File1.class", "11", "10"),
+ make_class("META-INF/versions/14/module-info.class", "15",
"14"),
+ ],
+ )
self.assertListEqual(m.skipped, [])
def test_multirelease_invalid_ver(self) -> None:
- m = cvv.CVVMagic('10')
- m.do_jar(jar_path=cvv.FileLoc('b.jar'),
jar=create_jar(multi_release=True, files=[
- ('Class.class', 10),
- ('META-INF/versions/8/Class.class', 8),
- ('META-INF/versions/hamburger/Class.class', 9874),
- ]))
+ m = cvv.CVVMagic("10")
+ m.do_jar(
+ jar_path=cvv.FileLoc("b.jar"),
+ jar=create_jar(
+ multi_release=True,
+ files=[
+ ("Class.class", 10),
+ ("META-INF/versions/8/Class.class", 8),
+ ("META-INF/versions/hamburger/Class.class", 9874),
+ ],
+ ),
+ )
def jar_member(path: str) -> cvv.JarLoc:
- return cvv.JarLoc(cvv.FileLoc('b.jar'), path)
+ return cvv.JarLoc(cvv.FileLoc("b.jar"), path)
def make_class(path: str, ver: str, expected: str) -> cvv.ClassFile:
- return cvv.ClassFile(jar_member(path), encoded_version=ver,
expected_version=expected)
+ return cvv.ClassFile(
+ jar_member(path), encoded_version=ver,
expected_version=expected
+ )
- self.assertListEqual(my_sort(m.good), [
- make_class('Class.class', '10', '10'),
- ])
+ self.assertListEqual(
+ my_sort(m.good),
+ [
+ make_class("Class.class", "10", "10"),
+ ],
+ )
self.assertListEqual(my_sort(m.bad), [])
- self.assertListEqual(my_sort(m.skipped), [
- cvv.SkippedVersionDir(
- jar_member('META-INF/versions/8'),
- 'The version directory "8" is less than 9'),
- cvv.SkippedVersionDir(
- jar_member('META-INF/versions/hamburger'),
- 'The version directory "hamburger" is not a number'),
- ])
+ self.assertListEqual(
+ my_sort(m.skipped),
+ [
+ cvv.SkippedVersionDir(
+ jar_member("META-INF/versions/8"),
+ 'The version directory "8" is less than 9',
+ ),
+ cvv.SkippedVersionDir(
+ jar_member("META-INF/versions/hamburger"),
+ 'The version directory "hamburger" is not a number',
+ ),
+ ],
+ )
def test_multirelease_no_manifest(self) -> None:
- m = cvv.CVVMagic('8')
- jar = cvv.FileLoc('a.jar')
- m.do_jar(create_jar(multi_release=False, files=[
- ('module/App.class', 8),
- ('module/Class.class', 8),
- ('META-INF/versions/9/module/App.class', 9),
- ('META-INF/versions/9/module/Class.class', 9),
- ('META-INF/versions/10/module/App.class', 10),
- ('META-INF/versions/10/module/Class.class', 10),
- # These 2 should be skipped, not reported as errors
- ('META-INF/versions/7/module/App.class', 7),
- ('META-INF/versions/7/module/Class.class', 8),
- ]), jar)
+ m = cvv.CVVMagic("8")
+ jar = cvv.FileLoc("a.jar")
+ m.do_jar(
+ create_jar(
+ multi_release=False,
+ files=[
+ ("module/App.class", 8),
+ ("module/Class.class", 8),
+ ("META-INF/versions/9/module/App.class", 9),
+ ("META-INF/versions/9/module/Class.class", 9),
+ ("META-INF/versions/10/module/App.class", 10),
+ ("META-INF/versions/10/module/Class.class", 10),
+ # These 2 should be skipped, not reported as errors
+ ("META-INF/versions/7/module/App.class", 7),
+ ("META-INF/versions/7/module/Class.class", 8),
+ ],
+ ),
+ jar,
+ )
def jar_member(path: str) -> cvv.JarLoc:
return cvv.JarLoc(jar, path)
def make_class(path: str) -> cvv.ClassFile:
return cvv.ClassFile(
- encoded_version='1.8',
- expected_version='1.8',
- loc=jar_member(path))
-
- self.assertListEqual(my_sort(m.good), [
- make_class('module/App.class'),
- make_class('module/Class.class'),
- ])
- self.assertListEqual(my_sort(m.bad), [
- cvv.BadMultireleaseManifest(jar_member('META-INF/MANIFEST.MF'), [
- jar_member('META-INF/versions/10'),
- jar_member('META-INF/versions/9'),
- ]),
- ])
- self.assertListEqual(my_sort(m.skipped), [
- cvv.SkippedVersionDir(jar_member('META-INF/versions/7'),
- 'The version directory "7" is less than 9'),
- ])
+ encoded_version="1.8", expected_version="1.8",
loc=jar_member(path)
+ )
+
+ self.assertListEqual(
+ my_sort(m.good),
+ [
+ make_class("module/App.class"),
+ make_class("module/Class.class"),
+ ],
+ )
+ self.assertListEqual(
+ my_sort(m.bad),
+ [
+ cvv.BadMultireleaseManifest(
+ jar_member("META-INF/MANIFEST.MF"),
+ [
+ jar_member("META-INF/versions/10"),
+ jar_member("META-INF/versions/9"),
+ ],
+ ),
+ ],
+ )
+ self.assertListEqual(
+ my_sort(m.skipped),
+ [
+ cvv.SkippedVersionDir(
+ jar_member("META-INF/versions/7"),
+ 'The version directory "7" is less than 9',
+ ),
+ ],
+ )
def test_no_manifest(self):
- m = cvv.CVVMagic('10')
- jar_path = cvv.FileLoc('/path/to/a.jar')
+ m = cvv.CVVMagic("10")
+ jar_path = cvv.FileLoc("/path/to/a.jar")
- jar = ZipFile(io.BytesIO(), 'w')
- jar.writestr('module-info.class', create_class_header(10))
+ jar = ZipFile(io.BytesIO(), "w")
+ jar.writestr("module-info.class", create_class_header(10))
m.do_jar(jar, jar_path)
- self.assertListEqual(m.good, [
- cvv.ClassFile(cvv.JarLoc(jar_path, 'module-info.class'), '10',
'10'),
- ])
+ self.assertListEqual(
+ m.good,
+ [
+ cvv.ClassFile(cvv.JarLoc(jar_path, "module-info.class"), "10",
"10"),
+ ],
+ )
self.assertListEqual(m.bad, [])
self.assertListEqual(m.skipped, [])
def test_maven_generated_manifest(self):
- m = cvv.CVVMagic('10')
- jar_path = cvv.FileLoc('a.jar')
+ m = cvv.CVVMagic("10")
+ jar_path = cvv.FileLoc("a.jar")
- jar = ZipFile(io.BytesIO(), 'w')
- jar.writestr('A.class', create_class_header(10))
- jar.writestr('META-INF/versions/12/A.class', create_class_header(12))
+ jar = ZipFile(io.BytesIO(), "w")
+ jar.writestr("A.class", create_class_header(10))
+ jar.writestr("META-INF/versions/12/A.class", create_class_header(12))
this_dir = os.path.dirname(os.path.realpath(__file__))
- with open(f'{this_dir}/res/maven-generated-manifest.mf', 'rb') as f:
- jar.writestr('META-INF/MANIFEST.MF', f.read())
+ with open(f"{this_dir}/res/maven-generated-manifest.mf", "rb") as f:
+ jar.writestr("META-INF/MANIFEST.MF", f.read())
m.do_jar(jar, jar_path)
def jar_member(member: str) -> cvv.JarLoc:
return cvv.JarLoc(jar_path, member)
- self.assertListEqual(m.good, [
- cvv.GoodFile(jar_member('A.class'), '10', '10'),
- cvv.GoodFile(jar_member('META-INF/versions/12/A.class'), '12',
'12'),
- ])
+ self.assertListEqual(
+ m.good,
+ [
+ cvv.GoodFile(jar_member("A.class"), "10", "10"),
+ cvv.GoodFile(jar_member("META-INF/versions/12/A.class"), "12",
"12"),
+ ],
+ )
self.assertListEqual(m.bad, [])
self.assertListEqual(m.skipped, [])