tetra 2.0.7 → 2.0.8
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 +184 -274
- 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/lib/template/kit/.keep +0 -1
- data/lib/template/kit/jars/.keep +0 -1
- data/lib/template/packages/.keep +0 -1
- data/lib/template/src/.keep +0 -1
- 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"
|