puppet 4.8.2-universal-darwin → 4.9.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/CONTRIBUTING.md +25 -1
- data/Gemfile +6 -0
- data/Rakefile +1 -0
- data/ext/project_data.yaml +5 -1
- data/ext/windows/service/daemon.rb +2 -1
- data/install.rb +43 -6
- data/lib/hiera/puppet_function.rb +15 -17
- data/lib/hiera/scope.rb +12 -14
- data/lib/puppet/application/face_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +4 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/data_providers/data_adapter.rb +6 -0
- data/lib/puppet/data_providers/data_function_support.rb +7 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_config.rb +31 -10
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_support.rb +6 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers.rb +6 -3
- data/lib/puppet/defaults.rb +25 -4
- data/lib/puppet/face/ca.rb +2 -0
- data/lib/puppet/face/certificate_request.rb +2 -0
- data/lib/puppet/face/certificate_revocation_list.rb +2 -0
- data/lib/puppet/face/file.rb +3 -0
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- data/lib/puppet/face/key.rb +1 -0
- data/lib/puppet/face/man.rb +4 -2
- data/lib/puppet/face/module/generate.rb +1 -1
- data/lib/puppet/face/status.rb +2 -0
- data/lib/puppet/feature/base.rb +9 -2
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/forge.rb +6 -6
- data/lib/puppet/functions/binary_file.rb +4 -10
- data/lib/puppet/functions/hiera_array.rb +1 -1
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +24 -0
- data/lib/puppet/functions/json_data.rb +18 -0
- data/lib/puppet/functions/yaml_data.rb +21 -0
- data/lib/puppet/generate/type.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +4 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
- data/lib/puppet/indirector/request.rb +5 -1
- data/lib/puppet/interface/face_collection.rb +1 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/module.rb +14 -2
- data/lib/puppet/module_tool/applications/builder.rb +3 -2
- data/lib/puppet/module_tool/applications/installer.rb +14 -14
- data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
- data/lib/puppet/module_tool/installed_modules.rb +7 -7
- data/lib/puppet/module_tool/local_tarball.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/webrick.rb +2 -1
- data/lib/puppet/parser/functions/hiera.rb +14 -0
- data/lib/puppet/parser/functions/hiera_array.rb +14 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
- data/lib/puppet/parser/functions/hiera_include.rb +14 -0
- data/lib/puppet/parser/scope.rb +14 -20
- data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/plugins/data_providers.rb +2 -0
- data/lib/puppet/pops/adaptable.rb +0 -3
- data/lib/puppet/pops/binder/producers.rb +3 -3
- data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/label_provider.rb +14 -0
- data/lib/puppet/pops/loader/loader_paths.rb +3 -1
- data/lib/puppet/pops/loader/module_loaders.rb +21 -7
- data/lib/puppet/pops/loader/typed_name.rb +0 -2
- data/lib/puppet/pops/loaders.rb +31 -12
- data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
- data/lib/puppet/pops/lookup/context.rb +121 -71
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
- data/lib/puppet/pops/lookup/data_provider.rb +102 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
- data/lib/puppet/pops/lookup/explainer.rb +122 -82
- data/lib/puppet/pops/lookup/function_provider.rb +82 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
- data/lib/puppet/pops/lookup/interpolation.rb +56 -35
- data/lib/puppet/pops/lookup/invocation.rb +179 -101
- data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
- data/lib/puppet/pops/lookup.rb +4 -3
- data/lib/puppet/pops/merge_strategy.rb +120 -39
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +816 -808
- data/lib/puppet/pops/parser/locator.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +4 -3
- data/lib/puppet/pops/pcore.rb +21 -12
- data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
- data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
- data/lib/puppet/pops/serialization/deserializer.rb +17 -4
- data/lib/puppet/pops/serialization/extension.rb +37 -8
- data/lib/puppet/pops/serialization/object.rb +14 -6
- data/lib/puppet/pops/serialization/rgen.rb +2 -1
- data/lib/puppet/pops/serialization/serializer.rb +30 -7
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +55 -12
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
- data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
- data/lib/puppet/pops/types/recursion_guard.rb +64 -20
- data/lib/puppet/pops/types/ruby_generator.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +23 -13
- data/lib/puppet/pops/types/type_factory.rb +20 -9
- data/lib/puppet/pops/types/type_formatter.rb +37 -17
- data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
- data/lib/puppet/pops/types/type_parser.rb +6 -0
- data/lib/puppet/pops/types/types.rb +225 -132
- data/lib/puppet/pops/validation/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/pops.rb +6 -9
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
- data/lib/puppet/provider/nameservice.rb +15 -0
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +2 -2
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +5 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +15 -0
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +4 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/resource.rb +2 -3
- data/lib/puppet/settings/config_file.rb +2 -1
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/environment_conf.rb +6 -2
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +10 -0
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_authority.rb +13 -2
- data/lib/puppet/ssl/host.rb +23 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
- data/lib/puppet/type/user.rb +16 -3
- data/lib/puppet/util/execution.rb +3 -3
- data/lib/puppet/util/filetype.rb +11 -5
- data/lib/puppet/util/logging.rb +2 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/windows/adsi.rb +15 -12
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +52 -0
- data/lib/semver.rb +19 -12
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +79 -0
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
- data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
- data/spec/integration/application/apply_spec.rb +88 -2
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/data_binding_spec.rb +5 -5
- data/spec/integration/defaults_spec.rb +13 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +74 -0
- data/spec/integration/util/execution_spec.rb +8 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
- data/spec/lib/puppet_spec/unindent.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +16 -0
- data/spec/unit/application/lookup_spec.rb +262 -227
- data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
- data/spec/unit/defaults_spec.rb +1 -1
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/certificate_request_spec.rb +10 -0
- data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
- data/spec/unit/face/file_spec.rb +4 -0
- data/spec/unit/face/help_spec.rb +17 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/file_system_spec.rb +143 -6
- data/spec/unit/functions/binary_file_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +257 -47
- data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
- data/spec/unit/functions/lookup_spec.rb +1319 -608
- data/spec/unit/functions/new_spec.rb +3 -3
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +4 -4
- data/spec/unit/indirector/request_spec.rb +9 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/http/connection_spec.rb +10 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/lookup/context_spec.rb +45 -16
- data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
- data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
- data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
- data/spec/unit/pops/serialization/packer_spec.rb +4 -23
- data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
- data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
- data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
- data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
- data/spec/unit/pops/types/type_factory_spec.rb +3 -3
- data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
- data/spec/unit/pops/types/types_spec.rb +25 -2
- data/spec/unit/pops/validator/validator_spec.rb +60 -4
- data/spec/unit/provider/nameservice_spec.rb +42 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +22 -0
- data/spec/unit/provider/package/pkgng_spec.rb +12 -0
- data/spec/unit/provider/package/rpm_spec.rb +8 -8
- data/spec/unit/provider/service/smf_spec.rb +13 -11
- data/spec/unit/provider/service/systemd_spec.rb +8 -1
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/puppet_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +15 -9
- data/spec/unit/resource_spec.rb +20 -17
- data/spec/unit/semver_spec.rb +14 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
- data/spec/unit/type/user_spec.rb +32 -6
- data/spec/unit/util/filetype_spec.rb +3 -3
- data/spec/unit/util/yaml_spec.rb +1 -1
- data/spec/unit/util_spec.rb +10 -2
- data/tasks/i18n.rake +20 -0
- metadata +2661 -2595
- data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
- data/lib/puppet/vendor/load_semantic.rb +0 -1
- data/lib/puppet/vendor/semantic/Gemfile +0 -20
- data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/semantic/Rakefile +0 -69
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
- data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
data/lib/puppet/type/user.rb
CHANGED
@@ -171,10 +171,23 @@ module Puppet
|
|
171
171
|
|
172
172
|
newproperty(:comment) do
|
173
173
|
desc "A description of the user. Generally the user's full name."
|
174
|
-
|
175
|
-
|
176
|
-
|
174
|
+
def insync?(is)
|
175
|
+
# nameservice provider requires special attention to encoding
|
176
|
+
# Overrides Puppet::Property#insync?
|
177
|
+
if !@should.empty? && provider.respond_to?(:comments_insync?)
|
178
|
+
return provider.comments_insync?(is, @should)
|
179
|
+
end
|
180
|
+
super(is)
|
181
|
+
end
|
182
|
+
|
183
|
+
# In the case that our comments have incompatible encodings, set external
|
184
|
+
# encoding to support concatenation for display.
|
185
|
+
# overrides Puppet::Property#change_to_s
|
186
|
+
def change_to_s(currentvalue, newvalue)
|
187
|
+
if newvalue.respond_to?(:force_encoding) && !Encoding.compatible?(currentvalue, newvalue)
|
188
|
+
return super(currentvalue, newvalue.dup.force_encoding(currentvalue.encoding))
|
177
189
|
end
|
190
|
+
super(currentvalue, newvalue)
|
178
191
|
end
|
179
192
|
end
|
180
193
|
|
@@ -184,9 +184,9 @@ module Puppet::Util::Execution
|
|
184
184
|
null_file = Puppet.features.microsoft_windows? ? 'NUL' : '/dev/null'
|
185
185
|
|
186
186
|
begin
|
187
|
-
stdin =
|
188
|
-
stdout = options[:squelch] ?
|
189
|
-
stderr = options[:combine] ? stdout :
|
187
|
+
stdin = Puppet::FileSystem.open(options[:stdinfile] || null_file, nil, 'r')
|
188
|
+
stdout = options[:squelch] ? Puppet::FileSystem.open(null_file, nil, 'w') : Puppet::FileSystem::Uniquefile.new('puppet')
|
189
|
+
stderr = options[:combine] ? stdout : Puppet::FileSystem.open(null_file, nil, 'w')
|
190
190
|
|
191
191
|
exec_args = [command, options, stdin, stdout, stderr]
|
192
192
|
|
data/lib/puppet/util/filetype.rb
CHANGED
@@ -105,7 +105,9 @@ class Puppet::Util::FileType
|
|
105
105
|
# Read the file.
|
106
106
|
def read
|
107
107
|
if Puppet::FileSystem.exist?(@path)
|
108
|
-
|
108
|
+
# this code path is used by many callers so the original default is
|
109
|
+
# being explicitly preserved
|
110
|
+
Puppet::FileSystem.read(@path, :encoding => Encoding.default_external)
|
109
111
|
else
|
110
112
|
return nil
|
111
113
|
end
|
@@ -118,7 +120,8 @@ class Puppet::Util::FileType
|
|
118
120
|
|
119
121
|
# Overwrite the file.
|
120
122
|
def write(text)
|
121
|
-
|
123
|
+
# this file is managed by the OS and should be using system encoding
|
124
|
+
tf = Tempfile.new("puppet", :encoding => Encoding.default_external)
|
122
125
|
tf.print text; tf.flush
|
123
126
|
File.chmod(@default_mode, tf.path) if @default_mode
|
124
127
|
FileUtils.cp(tf.path, @path)
|
@@ -197,7 +200,8 @@ class Puppet::Util::FileType
|
|
197
200
|
# Overwrite a specific @path's cron tab; must be passed the @path name
|
198
201
|
# and the text with which to create the cron tab.
|
199
202
|
def write(text)
|
200
|
-
|
203
|
+
# this file is managed by the OS and should be using system encoding
|
204
|
+
IO.popen("#{cmdbase()} -", "w", :encoding => Encoding.default_external) { |p|
|
201
205
|
p.print text
|
202
206
|
}
|
203
207
|
end
|
@@ -242,7 +246,8 @@ class Puppet::Util::FileType
|
|
242
246
|
# Overwrite a specific @path's cron tab; must be passed the @path name
|
243
247
|
# and the text with which to create the cron tab.
|
244
248
|
def write(text)
|
245
|
-
|
249
|
+
# this file is managed by the OS and should be using system encoding
|
250
|
+
output_file = Tempfile.new("puppet_suntab", :encoding => Encoding.default_external)
|
246
251
|
begin
|
247
252
|
output_file.print text
|
248
253
|
output_file.close
|
@@ -284,7 +289,8 @@ class Puppet::Util::FileType
|
|
284
289
|
# Overwrite a specific @path's cron tab; must be passed the @path name
|
285
290
|
# and the text with which to create the cron tab.
|
286
291
|
def write(text)
|
287
|
-
|
292
|
+
# this file is managed by the OS and should be using system encoding
|
293
|
+
output_file = Tempfile.new("puppet_aixtab", :encoding => Encoding.default_external)
|
288
294
|
|
289
295
|
begin
|
290
296
|
output_file.print text
|
data/lib/puppet/util/logging.rb
CHANGED
@@ -224,7 +224,8 @@ module Logging
|
|
224
224
|
# find the same offender, and we'd end up logging it again.
|
225
225
|
$logged_deprecation_warnings ||= {}
|
226
226
|
|
227
|
-
|
227
|
+
# Deprecation messages are UTF-8 as they are produced by Ruby
|
228
|
+
Puppet::FileSystem.open(deprecations_file, nil, "a:UTF-8") do |f|
|
228
229
|
if ($deprecation_warnings) then
|
229
230
|
$deprecation_warnings.each do |offender, message|
|
230
231
|
if (! $logged_deprecation_warnings.has_key?(offender)) then
|
@@ -59,7 +59,7 @@ class Puppet::Util::NetworkDevice::Config
|
|
59
59
|
device.options = { :debug => false }
|
60
60
|
Puppet.debug "found device: #{device.name} at #{device.line}"
|
61
61
|
devices[name] = device
|
62
|
-
when /^\s*(type|url|debug)(\s+(.+))*$/
|
62
|
+
when /^\s*(type|url|debug)(\s+(.+)\s*)*$/
|
63
63
|
parse_directive(device, $1, $3, count)
|
64
64
|
else
|
65
65
|
raise Puppet::Error, "Invalid line #{count}: #{line}"
|
data/lib/puppet/util/plist.rb
CHANGED
@@ -78,6 +78,12 @@ module Puppet::Util::Plist
|
|
78
78
|
# stubbing purposes
|
79
79
|
#
|
80
80
|
# @api private
|
81
|
+
#
|
82
|
+
# @param args [String] Extra file operation mode information to use
|
83
|
+
# (defaults to read-only mode 'r')
|
84
|
+
# This is the standard mechanism Ruby uses in the IO class, and therefore
|
85
|
+
# encoding may be explicitly like fmode : encoding or fmode : "BOM|UTF-*"
|
86
|
+
# for example, a:ASCII or w+:UTF-8
|
81
87
|
def open_file_with_args(file, args)
|
82
88
|
File.open(file, args).read
|
83
89
|
end
|
@@ -42,7 +42,7 @@ class Puppet::Util::Profiler::Aggregate < Puppet::Util::Profiler::WallClock
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def print_metrics(metrics_hash, prefix)
|
45
|
-
metrics_hash.sort_by {|k,v| v.time }.
|
45
|
+
metrics_hash.sort_by {|k,v| v.time }.reverse_each do |k,v|
|
46
46
|
@logger.call("#{prefix}#{k}: #{v.time} s (#{v.count} calls)")
|
47
47
|
print_metrics(metrics_hash[k], "#{prefix}#{k} -> ")
|
48
48
|
end
|
@@ -225,7 +225,7 @@ module Generators
|
|
225
225
|
'style_url' => style_url('', @options.css),
|
226
226
|
}
|
227
227
|
|
228
|
-
|
228
|
+
Puppet::FileSystem.open(filename, nil, "w:UTF-8") do |f|
|
229
229
|
template.write_html_on(f, values)
|
230
230
|
end
|
231
231
|
end
|
@@ -301,7 +301,7 @@ module Generators
|
|
301
301
|
values["plugins"] = res4 if res4.size>0
|
302
302
|
values["nodes"] = res5 if res5.size>0
|
303
303
|
|
304
|
-
|
304
|
+
Puppet::FileSystem.open(filename, nil, "w:UTF-8") do |f|
|
305
305
|
template.write_html_on(f, values)
|
306
306
|
end
|
307
307
|
end
|
@@ -104,7 +104,8 @@ module RDoc::PuppetParserCore
|
|
104
104
|
comment = ""
|
105
105
|
%w{README README.rdoc}.each do |rfile|
|
106
106
|
readme = File.join(File.dirname(File.dirname(@input_file_name)), rfile)
|
107
|
-
|
107
|
+
# module README should be UTF-8, not default system encoding
|
108
|
+
comment = File.open(readme,"r:UTF-8") { |f| f.read } if FileTest.readable?(readme)
|
108
109
|
end
|
109
110
|
look_for_directives_in(container, comment) unless comment.empty?
|
110
111
|
|
@@ -195,10 +195,9 @@ module Puppet::Util::Windows::ADSI
|
|
195
195
|
end
|
196
196
|
|
197
197
|
def [](attribute)
|
198
|
-
|
199
|
-
#
|
200
|
-
|
201
|
-
value
|
198
|
+
# Setting WIN32OLE.codepage in the microsoft_windows feature ensures
|
199
|
+
# values are returned as UTF-8
|
200
|
+
native_user.Get(attribute)
|
202
201
|
end
|
203
202
|
|
204
203
|
def []=(attribute, value)
|
@@ -248,8 +247,9 @@ module Puppet::Util::Windows::ADSI
|
|
248
247
|
# https://msdn.microsoft.com/en-us/library/aa746342.aspx
|
249
248
|
# WIN32OLE objects aren't enumerable, so no map
|
250
249
|
groups = []
|
251
|
-
#
|
252
|
-
|
250
|
+
# Setting WIN32OLE.codepage in the microsoft_windows feature ensures
|
251
|
+
# values are returned as UTF-8
|
252
|
+
native_user.Groups.each {|g| groups << g.Name} rescue nil
|
253
253
|
groups
|
254
254
|
end
|
255
255
|
|
@@ -372,8 +372,9 @@ module Puppet::Util::Windows::ADSI
|
|
372
372
|
|
373
373
|
users = []
|
374
374
|
wql.each do |u|
|
375
|
-
#
|
376
|
-
|
375
|
+
# Setting WIN32OLE.codepage in the microsoft_windows feature ensures
|
376
|
+
# values are returned as UTF-8
|
377
|
+
users << new(u.name)
|
377
378
|
end
|
378
379
|
|
379
380
|
users.each(&block)
|
@@ -465,8 +466,9 @@ module Puppet::Util::Windows::ADSI
|
|
465
466
|
def members
|
466
467
|
# WIN32OLE objects aren't enumerable, so no map
|
467
468
|
members = []
|
468
|
-
#
|
469
|
-
|
469
|
+
# Setting WIN32OLE.codepage in the microsoft_windows feature ensures
|
470
|
+
# values are returned as UTF-8
|
471
|
+
native_group.Members.each {|m| members << m.Name}
|
470
472
|
members
|
471
473
|
end
|
472
474
|
|
@@ -535,8 +537,9 @@ module Puppet::Util::Windows::ADSI
|
|
535
537
|
|
536
538
|
groups = []
|
537
539
|
wql.each do |g|
|
538
|
-
#
|
539
|
-
|
540
|
+
# Setting WIN32OLE.codepage in the microsoft_windows feature ensures
|
541
|
+
# values are returned as UTF-8
|
542
|
+
groups << new(g.name)
|
540
543
|
end
|
541
544
|
|
542
545
|
groups.each(&block)
|
data/lib/puppet/util.rb
CHANGED
@@ -450,6 +450,7 @@ module Util
|
|
450
450
|
|
451
451
|
begin
|
452
452
|
file = Puppet::FileSystem.pathname(file)
|
453
|
+
# encoding for Uniquefile is not important here because the caller writes to it as it sees fit
|
453
454
|
tempfile = Puppet::FileSystem::Uniquefile.new(Puppet::FileSystem.basename_string(file), Puppet::FileSystem.dir_string(file))
|
454
455
|
|
455
456
|
# Set properties of the temporary file before we write the content, because
|
@@ -0,0 +1 @@
|
|
1
|
+
$: << File.join([File.dirname(__FILE__), "semantic_puppet/lib"])
|
@@ -75,7 +75,8 @@ class PathSpec
|
|
75
75
|
|
76
76
|
# Generate specs from a filename, such as a .gitignore
|
77
77
|
def self.from_filename(filename, type=:git)
|
78
|
-
|
78
|
+
# .gitignore is a UTF-8 file
|
79
|
+
self.from_lines(File.open(filename, 'r', :encoding => Encoding::UTF_8), type)
|
79
80
|
end
|
80
81
|
|
81
82
|
def self.from_lines(lines, type=:git)
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# This adds upfront requirements on vendored code found under lib/vendor/x
|
2
2
|
# Add one requirement per vendored package (or a comment if it is loaded on demand).
|
3
3
|
|
4
|
-
# The vendored library 'semantic' is loaded on demand.
|
5
4
|
# The vendored library 'rgen' is loaded on demand.
|
6
5
|
# The vendored library 'pathspec' is loaded on demand.
|
7
6
|
# The vendored library 'deep_merge' is loaded on demand.
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'semantic_puppet/dependency'
|
2
|
+
|
3
|
+
module SemanticPuppet
|
4
|
+
module Dependency
|
5
|
+
class ModuleRelease
|
6
|
+
include GraphNode
|
7
|
+
|
8
|
+
attr_reader :name, :version
|
9
|
+
|
10
|
+
# Create a new instance of a module release.
|
11
|
+
#
|
12
|
+
# @param source [SemanticPuppet::Dependency::Source]
|
13
|
+
# @param name [String]
|
14
|
+
# @param version [SemanticPuppet::Version]
|
15
|
+
# @param dependencies [{String => SemanticPuppet::VersionRange}]
|
16
|
+
def initialize(source, name, version, dependencies = {})
|
17
|
+
@source = source
|
18
|
+
@name = name.freeze
|
19
|
+
@version = version.freeze
|
20
|
+
|
21
|
+
dependencies.each do |name, range|
|
22
|
+
add_constraint('initialize', name, range.to_s) do |node|
|
23
|
+
range === node.version
|
24
|
+
end
|
25
|
+
|
26
|
+
add_dependency(name)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def priority
|
31
|
+
@source.priority
|
32
|
+
end
|
33
|
+
|
34
|
+
def <=>(oth)
|
35
|
+
our_key = [ priority, name, version ]
|
36
|
+
their_key = [ oth.priority, oth.name, oth.version ]
|
37
|
+
|
38
|
+
return our_key <=> their_key
|
39
|
+
end
|
40
|
+
|
41
|
+
def eql?(other)
|
42
|
+
other.is_a?(ModuleRelease) &&
|
43
|
+
@name.eql?(other.name) &&
|
44
|
+
@version.eql?(other.version) &&
|
45
|
+
dependencies.eql?(other.dependencies)
|
46
|
+
end
|
47
|
+
alias == eql?
|
48
|
+
|
49
|
+
def hash
|
50
|
+
@name.hash ^ @version.hash
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
"#<#{self.class} #{name}@#{version}>"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb
RENAMED
@@ -1,15 +1,15 @@
|
|
1
|
-
require '
|
1
|
+
require 'semantic_puppet'
|
2
2
|
|
3
|
-
module
|
3
|
+
module SemanticPuppet
|
4
4
|
module Dependency
|
5
5
|
extend self
|
6
6
|
|
7
|
-
autoload :Graph, '
|
8
|
-
autoload :GraphNode, '
|
9
|
-
autoload :ModuleRelease, '
|
10
|
-
autoload :Source, '
|
7
|
+
autoload :Graph, 'semantic_puppet/dependency/graph'
|
8
|
+
autoload :GraphNode, 'semantic_puppet/dependency/graph_node'
|
9
|
+
autoload :ModuleRelease, 'semantic_puppet/dependency/module_release'
|
10
|
+
autoload :Source, 'semantic_puppet/dependency/source'
|
11
11
|
|
12
|
-
autoload :UnsatisfiableGraph, '
|
12
|
+
autoload :UnsatisfiableGraph, 'semantic_puppet/dependency/unsatisfiable_graph'
|
13
13
|
|
14
14
|
# @!group Sources
|
15
15
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
# This is the project-specific configuration file for setting up
|
3
|
+
# fast_gettext for your project.
|
4
|
+
gettext:
|
5
|
+
# This is used for the name of the .pot and .po files; they will be
|
6
|
+
# called <project_name>.pot?
|
7
|
+
project_name: 'semantic_puppet'
|
8
|
+
# This is used in comments in the .pot and .po files to indicate what
|
9
|
+
# project the files belong to and should bea little more desctiptive than
|
10
|
+
# <project_name>
|
11
|
+
package_name: Semantic Puppet Gem
|
12
|
+
# The locale that the default messages in the .pot file are in
|
13
|
+
default_locale: en
|
14
|
+
# The email used for sending bug reports.
|
15
|
+
bugs_address: docs@puppetlabs.com
|
16
|
+
# The holder of the copyright.
|
17
|
+
copyright_holder: Puppet, Inc.
|
18
|
+
# Patterns for +Dir.glob+ used to find all files that might contain
|
19
|
+
# translatable content, relative to the project root directory
|
20
|
+
source_files:
|
21
|
+
- 'lib/**/*.rb'
|
data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb
RENAMED
@@ -1,8 +1,8 @@
|
|
1
|
-
require '
|
1
|
+
require 'semantic_puppet'
|
2
2
|
|
3
|
-
module
|
3
|
+
module SemanticPuppet
|
4
4
|
|
5
|
-
# @note
|
5
|
+
# @note SemanticPuppet::Version subclasses Numeric so that it has sane Range
|
6
6
|
# semantics in Ruby 1.9+.
|
7
7
|
class Version < Numeric
|
8
8
|
include Comparable
|
@@ -10,44 +10,47 @@ module Semantic
|
|
10
10
|
class ValidationFailure < ArgumentError; end
|
11
11
|
|
12
12
|
class << self
|
13
|
-
LOOSE_REGEX = /
|
14
|
-
\A
|
15
|
-
(\d+)[.](\d+)[.](\d+) # Major . Minor . Patch
|
16
|
-
(?: [-](.*?))? # Prerelease
|
17
|
-
(?: [+](.*?))? # Build
|
18
|
-
\Z
|
19
|
-
/x
|
20
|
-
|
21
13
|
# Parse a Semantic Version string.
|
22
14
|
#
|
23
15
|
# @param ver [String] the version string to parse
|
24
16
|
# @return [Version] a comparable {Version} object
|
25
17
|
def parse(ver)
|
26
|
-
match, major, minor, patch, prerelease, build = *ver.match(
|
18
|
+
match, major, minor, patch, prerelease, build = *ver.match(/\A#{REGEX_FULL}\Z/)
|
27
19
|
|
28
20
|
if match.nil?
|
29
|
-
raise '
|
30
|
-
elsif [major, minor, patch].any? { |x| x =~ /^0\d+/ }
|
31
|
-
raise 'Version numbers MUST NOT contain leading zeroes'
|
21
|
+
raise _("Unable to parse '%{version}' as a semantic version identifier") % {version: ver}
|
32
22
|
end
|
33
23
|
|
34
24
|
prerelease = parse_prerelease(prerelease) if prerelease
|
35
|
-
|
25
|
+
# Build metadata is not yet supported in semantic_puppet, but we hope to.
|
26
|
+
# The following code prevents build metadata for now.
|
27
|
+
#build = parse_build_metadata(build) if build
|
28
|
+
if !build.nil?
|
29
|
+
raise _("'%{version}' MUST NOT include build identifiers") % {version: ver}
|
30
|
+
end
|
36
31
|
|
37
32
|
self.new(major.to_i, minor.to_i, patch.to_i, prerelease, build)
|
38
33
|
end
|
39
34
|
|
35
|
+
# Validate a Semantic Version string.
|
36
|
+
#
|
37
|
+
# @param ver [String] the version string to validate
|
38
|
+
# @return [bool] whether or not the string represents a valid Semantic Version
|
39
|
+
def valid?(ver)
|
40
|
+
!!(ver =~ /\A#{REGEX_FULL}\Z/)
|
41
|
+
end
|
42
|
+
|
40
43
|
private
|
41
44
|
def parse_prerelease(prerelease)
|
42
45
|
subject = 'Prerelease identifiers'
|
43
46
|
prerelease = prerelease.split('.', -1)
|
44
47
|
|
45
48
|
if prerelease.empty? or prerelease.any? { |x| x.empty? }
|
46
|
-
raise "
|
49
|
+
raise _("%{subject} MUST NOT be empty") % {subject: subject}
|
47
50
|
elsif prerelease.any? { |x| x =~ /[^0-9a-zA-Z-]/ }
|
48
|
-
raise "
|
51
|
+
raise _("%{subject} MUST use only ASCII alphanumerics and hyphens") % {subject: subject}
|
49
52
|
elsif prerelease.any? { |x| x =~ /^0\d+$/ }
|
50
|
-
raise "
|
53
|
+
raise _("%{subject} MUST NOT contain leading zeroes") % {subject: subject}
|
51
54
|
end
|
52
55
|
|
53
56
|
return prerelease.map { |x| x =~ /^\d+$/ ? x.to_i : x }
|
@@ -58,9 +61,9 @@ module Semantic
|
|
58
61
|
build = build.split('.', -1)
|
59
62
|
|
60
63
|
if build.empty? or build.any? { |x| x.empty? }
|
61
|
-
raise "
|
64
|
+
raise _("%{subject} MUST NOT be empty") % {subject: subject}
|
62
65
|
elsif build.any? { |x| x =~ /[^0-9a-zA-Z-]/ }
|
63
|
-
raise "
|
66
|
+
raise _("%{subject} MUST use only ASCII alphanumerics and hyphens") % {subject: subject}
|
64
67
|
end
|
65
68
|
|
66
69
|
return build
|
@@ -112,6 +115,16 @@ module Semantic
|
|
112
115
|
return compare_prerelease(other)
|
113
116
|
end
|
114
117
|
|
118
|
+
def eql?(other)
|
119
|
+
other.is_a?(Version) &&
|
120
|
+
@major.eql?(other.major) &&
|
121
|
+
@minor.eql?(other.minor) &&
|
122
|
+
@patch.eql?(other.patch) &&
|
123
|
+
@prerelease.eql?(other.instance_variable_get(:@prerelease)) &&
|
124
|
+
@build.eql?(other.instance_variable_get(:@build))
|
125
|
+
end
|
126
|
+
alias == eql?
|
127
|
+
|
115
128
|
def to_s
|
116
129
|
"#{major}.#{minor}.#{patch}" +
|
117
130
|
(@prerelease.nil? || prerelease.empty? ? '' : "-" + prerelease) +
|
@@ -164,5 +177,19 @@ module Semantic
|
|
164
177
|
def first_prerelease
|
165
178
|
self.class.new(@major, @minor, @patch, [])
|
166
179
|
end
|
180
|
+
|
181
|
+
public
|
182
|
+
|
183
|
+
# Version string matching regexes
|
184
|
+
REGEX_NUMERIC = "(0|[1-9]\\d*)[.](0|[1-9]\\d*)[.](0|[1-9]\\d*)" # Major . Minor . Patch
|
185
|
+
REGEX_PRE = "(?:[-](.*?))?" # Prerelease
|
186
|
+
REGEX_BUILD = "(?:[+](.*?))?" # Build
|
187
|
+
REGEX_FULL = REGEX_NUMERIC + REGEX_PRE + REGEX_BUILD
|
188
|
+
|
189
|
+
# The lowest precedence Version possible
|
190
|
+
MIN = self.new(0, 0, 0, []).freeze
|
191
|
+
|
192
|
+
# The highest precedence Version possible
|
193
|
+
MAX = self.new((1.0/0.0), 0, 0).freeze
|
167
194
|
end
|
168
195
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require '
|
1
|
+
require 'semantic_puppet'
|
2
2
|
|
3
|
-
module
|
3
|
+
module SemanticPuppet
|
4
4
|
class VersionRange < Range
|
5
5
|
class << self
|
6
6
|
# Parses a version range string into a comparable {VersionRange} instance.
|
@@ -46,7 +46,7 @@ module Semantic
|
|
46
46
|
end
|
47
47
|
|
48
48
|
rescue ArgumentError
|
49
|
-
raise ArgumentError, "Unparsable version range:
|
49
|
+
raise ArgumentError, _("Unparsable version range: %{range}") % {range: range_str.inspect}
|
50
50
|
end
|
51
51
|
|
52
52
|
private
|
@@ -123,7 +123,7 @@ module Semantic
|
|
123
123
|
start = process_loose_expr(expr).last.send(:first_prerelease)
|
124
124
|
end
|
125
125
|
|
126
|
-
self.new(start,
|
126
|
+
self.new(start, SemanticPuppet::Version::MAX)
|
127
127
|
end
|
128
128
|
|
129
129
|
# Returns a range covering all versions greater than or equal to the given
|
@@ -139,7 +139,7 @@ module Semantic
|
|
139
139
|
start = process_loose_expr(expr).first.send(:first_prerelease)
|
140
140
|
end
|
141
141
|
|
142
|
-
self.new(start,
|
142
|
+
self.new(start, SemanticPuppet::Version::MAX)
|
143
143
|
end
|
144
144
|
|
145
145
|
# Returns a range covering all versions less than the given `expr`.
|
@@ -154,7 +154,7 @@ module Semantic
|
|
154
154
|
finish = process_loose_expr(expr).first.send(:first_prerelease)
|
155
155
|
end
|
156
156
|
|
157
|
-
self.new(
|
157
|
+
self.new(SemanticPuppet::Version::MIN, finish, true)
|
158
158
|
end
|
159
159
|
|
160
160
|
# Returns a range covering all versions less than or equal to the given
|
@@ -166,10 +166,10 @@ module Semantic
|
|
166
166
|
def parse_lte_expression(expr)
|
167
167
|
if expr =~ /^[^+]*-/
|
168
168
|
finish = Version.parse(expr)
|
169
|
-
self.new(
|
169
|
+
self.new(SemanticPuppet::Version::MIN, finish)
|
170
170
|
else
|
171
171
|
finish = process_loose_expr(expr).last.send(:first_prerelease)
|
172
|
-
self.new(
|
172
|
+
self.new(SemanticPuppet::Version::MIN, finish, true)
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
@@ -190,7 +190,7 @@ module Semantic
|
|
190
190
|
# @example "Reasonably close" minor version
|
191
191
|
# "~1.2" # => (>=1.2.0 <1.3.0)
|
192
192
|
# @example "Reasonably close" patch version
|
193
|
-
# "~1.2.3" # => (1.2.3)
|
193
|
+
# "~1.2.3" # => (>=1.2.3 <1.3.0)
|
194
194
|
# @example "Reasonably close" prerelease version
|
195
195
|
# "~1.2.3-alpha" # => (>=1.2.3-alpha <1.2.4)
|
196
196
|
#
|
@@ -201,6 +201,10 @@ module Semantic
|
|
201
201
|
|
202
202
|
if parsed.stable?
|
203
203
|
parsed = parsed.send(:first_prerelease)
|
204
|
+
|
205
|
+
# Handle the special case of "~1.2.3" expressions.
|
206
|
+
succ = succ.next(:minor) if ((parsed.major == succ.major) && (parsed.minor == succ.minor))
|
207
|
+
|
204
208
|
succ = succ.send(:first_prerelease)
|
205
209
|
self.new(parsed, succ, true)
|
206
210
|
else
|
@@ -323,12 +327,6 @@ module Semantic
|
|
323
327
|
|
324
328
|
private
|
325
329
|
|
326
|
-
# The lowest precedence Version possible
|
327
|
-
MIN_VERSION = Version.new(0, 0, 0, []).freeze
|
328
|
-
|
329
|
-
# The highest precedence Version possible
|
330
|
-
MAX_VERSION = Version.new((1.0/0.0), 0, 0).freeze
|
331
|
-
|
332
330
|
# Determines whether this {VersionRange} has an earlier endpoint than the
|
333
331
|
# give `other` range.
|
334
332
|
#
|
@@ -342,13 +340,13 @@ module Semantic
|
|
342
340
|
# Describes whether this range has an upper limit.
|
343
341
|
# @return [Boolean] true if this range has no upper limit
|
344
342
|
def open_end?
|
345
|
-
self.end ==
|
343
|
+
self.end == SemanticPuppet::Version::MAX
|
346
344
|
end
|
347
345
|
|
348
346
|
# Describes whether this range has a lower limit.
|
349
347
|
# @return [Boolean] true if this range has no lower limit
|
350
348
|
def open_begin?
|
351
|
-
self.begin ==
|
349
|
+
self.begin == SemanticPuppet::Version::MIN
|
352
350
|
end
|
353
351
|
|
354
352
|
# Describes whether this range follows the patterns for matching all
|
@@ -0,0 +1,17 @@
|
|
1
|
+
begin
|
2
|
+
require 'gettext-setup'
|
3
|
+
rescue LoadError
|
4
|
+
def _(msg)
|
5
|
+
msg
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module SemanticPuppet
|
10
|
+
if defined?(GettextSetup)
|
11
|
+
GettextSetup.initialize(File.absolute_path('semantic_puppet/locales', File.dirname(__FILE__)))
|
12
|
+
end
|
13
|
+
|
14
|
+
autoload :Version, 'semantic_puppet/version'
|
15
|
+
autoload :VersionRange, 'semantic_puppet/version_range'
|
16
|
+
autoload :Dependency, 'semantic_puppet/dependency'
|
17
|
+
end
|