tetra 2.0.7 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +3 -3
- data/README.md +5 -4
- data/bin/tetra +6 -4
- data/lib/template/bashrc +19 -14
- data/lib/template/bundled/apache-maven-3.9.12/LICENSE +616 -0
- data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/NOTICE +0 -6
- data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvn +9 -0
- data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvn.cmd +14 -0
- data/lib/template/bundled/{apache-maven-3.9.9/boot/plexus-classworlds-2.8.0.jar → apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/asm-9.9.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/asm.license +29 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/commons-cli-1.11.0.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/commons-codec-1.20.0.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/error_prone_annotations-2.41.0.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/failureaccess-1.0.3.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/gson-2.13.2.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/guava-33.5.0-jre.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/guice-5.1.0-classes.jar +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/jansi-2.4.1.jar → apache-maven-3.9.12/lib/jansi-2.4.2.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/jansi-native/Windows/arm64/libjansi.so → apache-maven-3.9.12/lib/jansi-native/Windows/arm64/jansi.dll} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/jspecify-1.0.0.jar +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-artifact-3.9.9.jar → apache-maven-3.9.12/lib/maven-artifact-3.9.12.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-builder-support-3.9.9.jar → apache-maven-3.9.12/lib/maven-builder-support-3.9.12.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-compat-3.9.9.jar → apache-maven-3.9.12/lib/maven-compat-3.9.12.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-core-3.9.9.jar → apache-maven-3.9.12/lib/maven-core-3.9.12.jar} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/maven-embedder-3.9.12.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/maven-model-3.9.12.jar +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-model-builder-3.9.9.jar → apache-maven-3.9.12/lib/maven-model-builder-3.9.12.jar} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/maven-plugin-api-3.9.12.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/maven-repository-metadata-3.9.12.jar +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-api-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-api-1.9.25.jar} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/maven-resolver-connector-basic-1.9.25.jar +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-impl-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-impl-1.9.25.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-named-locks-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-named-locks-1.9.25.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-provider-3.9.9.jar → apache-maven-3.9.12/lib/maven-resolver-provider-3.9.12.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-spi-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-spi-1.9.25.jar} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/maven-resolver-transport-file-1.9.25.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/maven-resolver-transport-http-1.9.25.jar +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-transport-wagon-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-transport-wagon-1.9.25.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-util-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-util-1.9.25.jar} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/maven-settings-3.9.12.jar +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-settings-builder-3.9.9.jar → apache-maven-3.9.12/lib/maven-settings-builder-3.9.12.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-slf4j-provider-3.9.9.jar → apache-maven-3.9.12/lib/maven-slf4j-provider-3.9.12.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/org.eclipse.sisu.inject-0.9.0.M3.jar → apache-maven-3.9.12/lib/org.eclipse.sisu.inject-0.9.0.M4.jar} +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/org.eclipse.sisu.plexus-0.9.0.M3.jar → apache-maven-3.9.12/lib/org.eclipse.sisu.plexus-0.9.0.M4.jar} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/plexus-component-annotations-2.2.0.jar +0 -0
- data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-interpolation-1.27.jar → apache-maven-3.9.12/lib/plexus-interpolation-1.29.jar} +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/plexus-sec-dispatcher.license +202 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/plexus-utils-3.6.0.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.12/lib/plexus-utils.license +202 -0
- data/lib/template/kit.spec +3 -3
- data/lib/template/package.spec +13 -10
- data/lib/tetra/constants.rb +10 -1
- data/lib/tetra/data/license_map.yml +124 -0
- data/lib/tetra/facades/ant.rb +4 -7
- data/lib/tetra/facades/bash.rb +28 -19
- data/lib/tetra/facades/git.rb +69 -34
- data/lib/tetra/facades/gradle.rb +3 -2
- data/lib/tetra/facades/mvn.rb +8 -8
- data/lib/tetra/facades/process_runner.rb +58 -37
- data/lib/tetra/facades/tar.rb +5 -4
- data/lib/tetra/facades/unzip.rb +5 -4
- data/lib/tetra/generatable.rb +4 -3
- data/lib/tetra/kit.rb +12 -6
- data/lib/tetra/license_mapper.rb +34 -0
- data/lib/tetra/logger.rb +7 -4
- data/lib/tetra/maven_website.rb +64 -27
- data/lib/tetra/packages/kit_package.rb +4 -4
- data/lib/tetra/packages/package.rb +47 -8
- data/lib/tetra/packages/scriptable.rb +12 -8
- data/lib/tetra/packages/speccable.rb +7 -1
- data/lib/tetra/pom.rb +38 -16
- data/lib/tetra/pom_getter.rb +55 -43
- data/lib/tetra/project.rb +14 -15
- data/lib/tetra/project_initer.rb +32 -20
- data/lib/tetra/ui/change_sources_subcommand.rb +13 -7
- data/lib/tetra/ui/dry_run_subcommand.rb +5 -3
- data/lib/tetra/ui/generate_all_subcommand.rb +1 -1
- data/lib/tetra/ui/generate_kit_subcommand.rb +2 -1
- data/lib/tetra/ui/generate_script_subcommand.rb +2 -3
- data/lib/tetra/ui/generate_spec_subcommand.rb +3 -2
- data/lib/tetra/ui/get_pom_subcommand.rb +17 -12
- data/lib/tetra/ui/init_subcommand.rb +12 -4
- data/lib/tetra/ui/main.rb +6 -1
- data/lib/tetra/ui/move_jars_to_kit_subcommand.rb +2 -2
- data/lib/tetra/ui/patch_subcommand.rb +1 -1
- data/lib/tetra/ui/subcommand.rb +37 -31
- data/lib/tetra/version.rb +2 -3
- data/lib/tetra/version_matcher.rb +62 -44
- data/lib/tetra.rb +10 -6
- metadata +186 -271
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -26
- data/.github/ISSUE_TEMPLATE/feature_request.md +0 -15
- data/.github/dependabot.yml +0 -24
- data/.github/workflows/action-lint.yml +0 -15
- data/.github/workflows/codeql-analysis.yml +0 -94
- data/.github/workflows/dependency-review.yml +0 -17
- data/.github/workflows/markdown.yml +0 -23
- data/.github/workflows/rubocop.yml +0 -51
- data/.github/workflows/test.yml +0 -62
- data/.gitignore +0 -27
- data/.markdownlint.yaml +0 -11
- data/.rubocop.yml +0 -35
- data/.rubocop_todo.yml +0 -438
- data/.sonarcloud.properties +0 -4
- data/Gemfile +0 -6
- data/Gemfile.lock +0 -228
- data/Rakefile +0 -9
- data/lib/template/bundled/apache-maven-3.9.9/LICENSE +0 -760
- data/lib/template/bundled/apache-maven-3.9.9/lib/commons-cli-1.8.0.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/commons-codec-1.17.1.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/failureaccess-1.0.2.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/guava-33.2.1-jre.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/guice-5.1.0.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/maven-embedder-3.9.9.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/maven-model-3.9.9.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/maven-plugin-api-3.9.9.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/maven-repository-metadata-3.9.9.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/maven-resolver-connector-basic-1.9.22.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/maven-resolver-transport-file-1.9.22.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/maven-resolver-transport-http-1.9.22.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/maven-settings-3.9.9.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/plexus-component-annotations-2.1.0.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/plexus-utils-3.5.1.jar +0 -0
- data/lib/template/bundled/apache-maven-3.9.9/lib/plexus-xml-3.0.1.jar +0 -0
- data/spec/data/ant-super-simple-code/build/HW.class +0 -0
- data/spec/data/ant-super-simple-code/build/mypackage/HW.class +0 -0
- data/spec/data/ant-super-simple-code/build.xml +0 -133
- data/spec/data/ant-super-simple-code/dist/antsimple-20130618.jar +0 -0
- data/spec/data/ant-super-simple-code/lib/junit-4.11.jar +0 -0
- data/spec/data/ant-super-simple-code/lib/log4j-1.2.13.jar +0 -0
- data/spec/data/ant-super-simple-code/src/mypackage/HW.java +0 -15
- data/spec/data/antlr/antlr-2.7.2.jar +0 -0
- data/spec/data/antlr/pom.xml +0 -6
- data/spec/data/commons-collections4-4.5.0-M2-src.tar.gz +0 -0
- data/spec/data/commons-collections4-4.5.0-M2-src.zip +0 -0
- data/spec/data/commons-logging/commons-logging-1.3.4.jar +0 -0
- data/spec/data/commons-logging/parent_pom.xml +0 -1995
- data/spec/data/commons-logging/pom.xml +0 -833
- data/spec/data/nailgun/nailgun-0.7.1.jar +0 -0
- data/spec/data/nailgun/pom.xml +0 -153
- data/spec/data/struts-apps/pom.xml +0 -1147
- data/spec/data/tomcat/pom.xml +0 -33
- data/spec/lib/coarse/dry_run_subcommand_spec.rb +0 -59
- data/spec/lib/coarse/generate_all_subcommand_spec.rb +0 -132
- data/spec/lib/coarse/generate_spec_subcommand_spec.rb +0 -30
- data/spec/lib/coarse/init_subcommand_spec.rb +0 -101
- data/spec/lib/coarse/main_spec.rb +0 -21
- data/spec/lib/fine/ant_spec.rb +0 -25
- data/spec/lib/fine/git_spec.rb +0 -181
- data/spec/lib/fine/kit_package_spec.rb +0 -31
- data/spec/lib/fine/kit_spec.rb +0 -27
- data/spec/lib/fine/maven_website_spec.rb +0 -61
- data/spec/lib/fine/mvn_spec.rb +0 -27
- data/spec/lib/fine/package_spec.rb +0 -68
- data/spec/lib/fine/pom_getter_spec.rb +0 -36
- data/spec/lib/fine/pom_spec.rb +0 -98
- data/spec/lib/fine/project_spec.rb +0 -234
- data/spec/lib/fine/scriptable_spec.rb +0 -56
- data/spec/lib/fine/speccable_spec.rb +0 -93
- data/spec/lib/fine/tar_spec.rb +0 -22
- data/spec/lib/fine/unzip_spec.rb +0 -22
- data/spec/lib/fine/version_matcher_spec.rb +0 -64
- data/spec/spec_helper.rb +0 -90
- data/tetra.gemspec +0 -44
- data/utils/delete_nonet_user.sh +0 -8
- data/utils/setup_nonet_user.sh +0 -8
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/README.txt +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/m2.conf +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvnDebug +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvnDebug.cmd +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvnyjp +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/boot/plexus-classworlds.license +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/conf/logging/simplelogger.properties +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/conf/settings.xml +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/conf/toolchains.xml +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/aopalliance-1.0.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/aopalliance.license +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/commons-cli.license +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/commons-codec.license +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/failureaccess.license → apache-maven-3.9.12/lib/error_prone_annotations.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/ext/README.txt +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/ext/hazelcast/README.txt +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/ext/redisson/README.txt +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/guava.license → apache-maven-3.9.12/lib/failureaccess.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/guice.license → apache-maven-3.9.12/lib/gson.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/httpclient.license → apache-maven-3.9.12/lib/guava.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/httpcore.license → apache-maven-3.9.12/lib/guice.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/httpclient-4.5.14.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/jansi.license → apache-maven-3.9.12/lib/httpclient.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/httpcore-4.4.16.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/javax.inject.license → apache-maven-3.9.12/lib/httpcore.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/jansi-native/README.txt +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/jansi-native/Windows/x86/jansi.dll +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/jansi-native/Windows/x86_64/jansi.dll +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/jcl-over-slf4j.license → apache-maven-3.9.12/lib/jansi.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/javax.annotation-api-1.3.2.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/javax.annotation-api.license +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/javax.inject-1.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-cipher.license → apache-maven-3.9.12/lib/javax.inject.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/jcl-over-slf4j-1.7.36.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-component-annotations.license → apache-maven-3.9.12/lib/jcl-over-slf4j.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-interpolation.license → apache-maven-3.9.12/lib/jspecify.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/maven-shared-utils-3.4.2.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/org.eclipse.sisu.inject.license +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/org.eclipse.sisu.plexus.license +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/plexus-cipher-2.0.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-sec-dispatcher.license → apache-maven-3.9.12/lib/plexus-cipher.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-utils.license → apache-maven-3.9.12/lib/plexus-component-annotations.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-xml.license → apache-maven-3.9.12/lib/plexus-interpolation.license} +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/plexus-sec-dispatcher-2.0.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/slf4j-api-1.7.36.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/slf4j-api.license +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/wagon-file-3.5.3.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/wagon-http-3.5.3.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/wagon-http-shared-3.5.3.jar +0 -0
- /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/wagon-provider-api-3.5.3.jar +0 -0
data/lib/tetra/ui/subcommand.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Tetra
|
|
4
4
|
# implements common options and utility methods
|
|
@@ -24,12 +24,12 @@ module Tetra
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
# maps verbosity options to log level
|
|
27
|
-
def configure_log_level(
|
|
28
|
-
if
|
|
27
|
+
def configure_log_level(verbose, very_verbose, very_very_verbose)
|
|
28
|
+
if very_very_verbose
|
|
29
29
|
log.level = ::Logger::DEBUG
|
|
30
|
-
elsif
|
|
30
|
+
elsif very_verbose
|
|
31
31
|
log.level = ::Logger::INFO
|
|
32
|
-
elsif
|
|
32
|
+
elsif verbose
|
|
33
33
|
log.level = ::Logger::WARN
|
|
34
34
|
else
|
|
35
35
|
log.level = ::Logger::ERROR
|
|
@@ -52,56 +52,62 @@ module Tetra
|
|
|
52
52
|
dry_running = project.dry_running?
|
|
53
53
|
has_finished = !project.version.nil?
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
condition_met = case state
|
|
56
|
+
when :is_in_progress
|
|
57
|
+
dry_running
|
|
58
|
+
when :is_not_in_progress
|
|
59
|
+
!dry_running
|
|
60
|
+
when :has_finished
|
|
61
|
+
!dry_running && has_finished
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
if condition_met
|
|
58
65
|
yield
|
|
59
66
|
else
|
|
60
|
-
|
|
61
|
-
(state == :has_finished && !dry_running && !has_finished)
|
|
62
|
-
puts "Please start a dry-run first, use \"tetra dry-run\""
|
|
63
|
-
elsif (state == :is_not_in_progress) ||
|
|
64
|
-
(state == :has_finished && dry_running)
|
|
65
|
-
puts "There is a dry-run in progress, please finish it (^D) or abort it (^C^D)"
|
|
66
|
-
end
|
|
67
|
+
handle_dry_run_error(state, dry_running, has_finished)
|
|
67
68
|
end
|
|
68
69
|
end
|
|
69
70
|
|
|
70
71
|
# outputs output of a file generation
|
|
71
72
|
def print_generation_result(project, result_path, conflict_count = 0)
|
|
72
73
|
puts "#{format_path(result_path, project)} generated"
|
|
73
|
-
puts "Warning: #{conflict_count} unresolved conflicts, please review and commit" if conflict_count
|
|
74
|
+
puts "Warning: #{conflict_count} unresolved conflicts, please review and commit" if conflict_count.positive?
|
|
74
75
|
end
|
|
75
76
|
|
|
76
77
|
# generates a version of path relative to the current directory
|
|
77
78
|
def format_path(path, project)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
)
|
|
79
|
+
path_obj = Pathname.new(path)
|
|
80
|
+
full_path = if path_obj.relative?
|
|
81
|
+
File.join(project.full_path, path)
|
|
82
|
+
else
|
|
83
|
+
path
|
|
84
|
+
end
|
|
85
85
|
Pathname.new(full_path).relative_path_from(Pathname.new(Dir.pwd))
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
# handles most fatal exceptions
|
|
89
89
|
def checking_exceptions
|
|
90
90
|
yield
|
|
91
|
-
rescue Errno::EACCES => e
|
|
92
|
-
$stderr.puts e
|
|
93
|
-
rescue Errno::ENOENT => e
|
|
91
|
+
rescue Errno::EACCES, Errno::ENOENT, Errno::EEXIST => e
|
|
94
92
|
$stderr.puts e
|
|
95
|
-
rescue
|
|
96
|
-
$stderr.puts e
|
|
97
|
-
rescue NoProjectDirectoryError => e
|
|
93
|
+
rescue Tetra::NoProjectDirectoryError => e
|
|
98
94
|
$stderr.puts "#{e.directory} is not a tetra project directory, see \"tetra init\""
|
|
99
|
-
rescue GitAlreadyInitedError
|
|
95
|
+
rescue Tetra::GitAlreadyInitedError
|
|
100
96
|
$stderr.puts "This directory is already a tetra project"
|
|
101
|
-
rescue ExecutionFailed => e
|
|
97
|
+
rescue Tetra::ExecutionFailed => e
|
|
102
98
|
$stderr.puts "Failed to run `#{e.commandline}` (exit status #{e.status})"
|
|
103
99
|
rescue Interrupt
|
|
104
100
|
$stderr.puts "Execution interrupted by the user"
|
|
105
101
|
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
def handle_dry_run_error(state, dry_running, has_finished)
|
|
106
|
+
if (state == :is_in_progress) || (state == :has_finished && !dry_running && !has_finished)
|
|
107
|
+
puts "Please start a dry-run first, use \"tetra dry-run\""
|
|
108
|
+
elsif (state == :is_not_in_progress) || (state == :has_finished && dry_running)
|
|
109
|
+
puts "There is a dry-run in progress, please finish it (^D) or abort it (^C^D)"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
106
112
|
end
|
|
107
113
|
end
|
data/lib/tetra/version.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Tetra
|
|
4
4
|
# heuristically matches version strings
|
|
@@ -10,62 +10,68 @@ module Tetra
|
|
|
10
10
|
# by a ., -, _, ~ or space
|
|
11
11
|
# returns a [name, version] pair
|
|
12
12
|
def split_version(full_name)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
# 1. Match from the start (\A)
|
|
14
|
+
# 2. Capture everything that is NOT a digit (ZERO or more times) -> *?
|
|
15
|
+
# 3. Handle the optional separator
|
|
16
|
+
# 4. Capture the version (MUST start with a digit)
|
|
17
|
+
matches = full_name.match(/\A(?<name>[^0-9]*?)(?:[.\-_ ~,]?(?<version>[0-9].*))\z/)
|
|
18
|
+
|
|
19
|
+
if matches
|
|
20
|
+
[matches[:name], matches[:version]]
|
|
16
21
|
else
|
|
17
|
-
[
|
|
22
|
+
[full_name, nil]
|
|
18
23
|
end
|
|
19
24
|
end
|
|
20
25
|
|
|
21
26
|
# returns the "best match" between a version number and a set of available version numbers
|
|
22
|
-
# using a heuristic criterion.
|
|
23
|
-
# - split the version number in chunks divided by ., - etc.
|
|
24
|
-
# - every chunk with same index is "compared", differences make up a score
|
|
25
|
-
# - "comparison" is a subtraction if the chunk is an integer, a string distance measure otherwise
|
|
26
|
-
# - score weighs differently on chunk index (first chunks are most important)
|
|
27
|
-
# - lowest score wins
|
|
27
|
+
# using a heuristic criterion.
|
|
28
28
|
def best_match(my_version, their_versions)
|
|
29
|
+
return nil if their_versions.nil? || their_versions.empty?
|
|
30
|
+
|
|
29
31
|
log.debug("version comparison: #{my_version} vs #{their_versions.join(', ')}")
|
|
30
32
|
|
|
31
|
-
my_chunks = my_version.split(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
scoreboard =
|
|
50
|
-
|
|
51
|
-
their_chunks = their_chunks_hash[their_version]
|
|
33
|
+
my_chunks = my_version.split(Tetra::CHUNK_SEPARATOR_VERSION_MATCHER)
|
|
34
|
+
|
|
35
|
+
# Use to_h (Ruby 2.6+) instead of Hash[]
|
|
36
|
+
# Pre-calculate chunks for all versions to avoid re-splitting in the loop
|
|
37
|
+
their_chunks_map = their_versions.to_h do |their_version|
|
|
38
|
+
chunks = their_version ? their_version.split(Tetra::CHUNK_SEPARATOR_VERSION_MATCHER) : []
|
|
39
|
+
|
|
40
|
+
# Pad with nil to match my_chunks length if shorter
|
|
41
|
+
padding_needed = [my_chunks.length - chunks.length, 0].max
|
|
42
|
+
chunks.fill(nil, chunks.length, padding_needed)
|
|
43
|
+
|
|
44
|
+
[their_version, chunks]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Calculate max length across all candidates (including myself)
|
|
48
|
+
max_chunks_length = ([my_chunks.length] + their_chunks_map.values.map(&:length)).max
|
|
49
|
+
|
|
50
|
+
# Calculate scores
|
|
51
|
+
scoreboard = their_versions.map do |their_version|
|
|
52
|
+
their_chunks = their_chunks_map[their_version]
|
|
52
53
|
score = 0
|
|
54
|
+
|
|
53
55
|
their_chunks.each_with_index do |their_chunk, i|
|
|
56
|
+
# Weighting: Earlier chunks are vastly more important
|
|
54
57
|
score_multiplier = 100**(max_chunks_length - i - 1)
|
|
55
58
|
my_chunk = my_chunks[i]
|
|
59
|
+
|
|
56
60
|
score += chunk_distance(my_chunk, their_chunk) * score_multiplier
|
|
57
61
|
end
|
|
58
|
-
|
|
62
|
+
|
|
63
|
+
{ version: their_version, score: score }
|
|
59
64
|
end
|
|
60
65
|
|
|
61
|
-
|
|
66
|
+
# Sort by lowest score (best match)
|
|
67
|
+
sorted_scoreboard = scoreboard.sort_by { |entry| entry[:score] }
|
|
62
68
|
|
|
63
69
|
log.debug("scoreboard: ")
|
|
64
|
-
|
|
65
|
-
log.debug(" #{i + 1}. #{
|
|
70
|
+
sorted_scoreboard.each_with_index do |entry, i|
|
|
71
|
+
log.debug(" #{i + 1}. #{entry[:version]} (score: #{entry[:score]})")
|
|
66
72
|
end
|
|
67
73
|
|
|
68
|
-
|
|
74
|
+
sorted_scoreboard.first[:version]
|
|
69
75
|
end
|
|
70
76
|
|
|
71
77
|
# returns a score representing the distance between two version chunks
|
|
@@ -73,19 +79,31 @@ module Tetra
|
|
|
73
79
|
# for strings, the score is the Levenshtein distance
|
|
74
80
|
# in any case score is normalized between 0 (identical) and 99 (very different/uncomparable)
|
|
75
81
|
def chunk_distance(my_chunk, their_chunk)
|
|
76
|
-
|
|
77
|
-
|
|
82
|
+
# Normalize nils to "0"
|
|
83
|
+
my_chunk ||= "0"
|
|
84
|
+
their_chunk ||= "0"
|
|
85
|
+
|
|
86
|
+
# If exact match, distance is 0
|
|
87
|
+
return 0 if my_chunk == their_chunk
|
|
78
88
|
|
|
79
|
-
if
|
|
80
|
-
|
|
89
|
+
if integer?(my_chunk) && integer?(their_chunk)
|
|
90
|
+
diff = (my_chunk.to_i - their_chunk.to_i).abs
|
|
91
|
+
[diff, 99].min
|
|
81
92
|
else
|
|
82
|
-
|
|
93
|
+
dist = Text::Levenshtein.distance(my_chunk.upcase, their_chunk.upcase)
|
|
94
|
+
[dist, 99].min
|
|
83
95
|
end
|
|
84
96
|
end
|
|
85
97
|
|
|
98
|
+
private
|
|
99
|
+
|
|
86
100
|
# true for integer strings
|
|
87
|
-
def
|
|
88
|
-
|
|
101
|
+
def integer?(string)
|
|
102
|
+
# Faster than regex for simple digit checks
|
|
103
|
+
Integer(string, 10)
|
|
104
|
+
true
|
|
105
|
+
rescue ArgumentError, TypeError
|
|
106
|
+
false
|
|
89
107
|
end
|
|
90
108
|
end
|
|
91
109
|
end
|
data/lib/tetra.rb
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# ruby standard library
|
|
4
4
|
require "digest/sha1"
|
|
5
5
|
require "English"
|
|
6
6
|
require "erb"
|
|
7
|
-
require "find"
|
|
8
7
|
require "forwardable"
|
|
8
|
+
require "json"
|
|
9
9
|
require "logger"
|
|
10
|
+
require "net/http"
|
|
11
|
+
require "open3"
|
|
10
12
|
require "open-uri"
|
|
11
13
|
require "pathname"
|
|
12
|
-
require "singleton"
|
|
13
14
|
require "rexml/document"
|
|
14
|
-
require "
|
|
15
|
+
require "singleton"
|
|
16
|
+
require "stringio"
|
|
17
|
+
require "tempfile"
|
|
18
|
+
require "uri"
|
|
15
19
|
|
|
16
20
|
# third party libraries
|
|
17
21
|
require "clamp"
|
|
18
|
-
require "json"
|
|
19
|
-
require "open4"
|
|
20
22
|
require "text"
|
|
23
|
+
require "yaml"
|
|
21
24
|
require "zip"
|
|
22
25
|
|
|
23
26
|
# base components
|
|
@@ -46,6 +49,7 @@ require "tetra/maven_website"
|
|
|
46
49
|
require "tetra/pom_getter"
|
|
47
50
|
|
|
48
51
|
# package building
|
|
52
|
+
require "tetra/license_mapper"
|
|
49
53
|
require "tetra/packages/speccable"
|
|
50
54
|
require "tetra/packages/scriptable"
|
|
51
55
|
require "tetra/packages/kit_package"
|