puppet 4.3.2 → 4.4.0
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 +4 -4
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +4 -4
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +65 -19
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +3 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node.rb +1 -1
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +3 -3
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +38 -13
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
- data/lib/puppet/pops/evaluator/closure.rb +84 -68
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +34 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup.rb +14 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +26 -2
- data/lib/puppet/pops/model/model.rb +8 -8
- data/lib/puppet/pops/model/model_label_provider.rb +13 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +26 -19
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +11 -7
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +138 -381
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1247
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops/validation/checker4_0.rb +83 -55
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +5 -8
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +6 -18
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +28 -38
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +4 -4
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +23 -14
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +1 -1
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +42 -4
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +90 -4
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/integration/util/windows/security_spec.rb +6 -6
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +11 -3
- data/spec/unit/functions/lookup_spec.rb +58 -13
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +61 -5
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +16 -0
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +100 -43
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +47 -34
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/yum_spec.rb +11 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/launchd_spec.rb +17 -35
- data/spec/unit/provider/service/systemd_spec.rb +7 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +96 -57
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +1 -1
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +114 -26
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -1,8 +1,10 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Parser
|
1
3
|
# This module is an integral part of the Lexer.
|
2
4
|
# It handles scanning of EPP (Embedded Puppet), a form of string/expression interpolation similar to ERB.
|
3
5
|
#
|
4
6
|
require 'strscan'
|
5
|
-
module
|
7
|
+
module EppSupport
|
6
8
|
|
7
9
|
TOKEN_RENDER_STRING = [:RENDER_STRING, nil, 0]
|
8
10
|
TOKEN_RENDER_EXPR = [:RENDER_EXPR, nil, 0]
|
@@ -33,7 +35,7 @@ module Puppet::Pops::Parser::EppSupport
|
|
33
35
|
ctx = @lexing_context
|
34
36
|
queue = @token_queue
|
35
37
|
|
36
|
-
lex_error(
|
38
|
+
lex_error(Issues::EPP_INTERNAL_ERROR, :error => 'No string or file given to lexer to process.') unless scn
|
37
39
|
|
38
40
|
ctx[:epp_mode] = :text
|
39
41
|
enqueue_completed([:EPP_START, nil, 0], 0)
|
@@ -47,7 +49,7 @@ module Puppet::Pops::Parser::EppSupport
|
|
47
49
|
end
|
48
50
|
end
|
49
51
|
if ctx[:epp_open_position]
|
50
|
-
lex_error(
|
52
|
+
lex_error(Issues::EPP_UNBALANCED_TAG, {}, ctx[:epp_position])
|
51
53
|
end
|
52
54
|
|
53
55
|
# Signals end of input
|
@@ -66,7 +68,7 @@ module Puppet::Pops::Parser::EppSupport
|
|
66
68
|
when :text
|
67
69
|
# Should be at end of scan, or something is terribly wrong
|
68
70
|
unless @scanner.eos?
|
69
|
-
lex_error(
|
71
|
+
lex_error(Issues::EPP_INTERNAL_ERROR, :error => 'template scanner returns text mode and is not and end of input')
|
70
72
|
end
|
71
73
|
if s
|
72
74
|
# s may be nil if scanned text ends with an epp tag (i.e. no trailing text).
|
@@ -99,7 +101,7 @@ module Puppet::Pops::Parser::EppSupport
|
|
99
101
|
ctx[:epp_mode] = :expr
|
100
102
|
ctx[:epp_open_position] = scn.pos
|
101
103
|
else
|
102
|
-
lex_error(
|
104
|
+
lex_error(Issues::EPP_INTERNAL_ERROR, :error => "Unknown mode #{eppscanner.mode} returned by template scanner")
|
103
105
|
end
|
104
106
|
nil
|
105
107
|
end
|
@@ -198,7 +200,7 @@ module Puppet::Pops::Parser::EppSupport
|
|
198
200
|
# if s ends with <% then this is an error (unbalanced <% %>)
|
199
201
|
if s.end_with? "<%"
|
200
202
|
@mode = :error
|
201
|
-
@issue =
|
203
|
+
@issue = Issues::EPP_UNBALANCED_EXPRESSION
|
202
204
|
else
|
203
205
|
mode = :epp
|
204
206
|
end
|
@@ -236,7 +238,7 @@ module Puppet::Pops::Parser::EppSupport
|
|
236
238
|
# preceded by a % (i.e. skip %%>)
|
237
239
|
part = scanner.scan_until(/[^%]%>/)
|
238
240
|
unless part
|
239
|
-
@issue =
|
241
|
+
@issue = Issues::EPP_UNBALANCED_COMMENT
|
240
242
|
@mode = :error
|
241
243
|
return s
|
242
244
|
end
|
@@ -256,3 +258,5 @@ module Puppet::Pops::Parser::EppSupport
|
|
256
258
|
end
|
257
259
|
|
258
260
|
end
|
261
|
+
end
|
262
|
+
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Parser
|
1
3
|
|
2
4
|
# Does not support "import" and parsing ruby files
|
3
5
|
#
|
4
|
-
class
|
6
|
+
class EvaluatingParser
|
5
7
|
|
6
8
|
attr_reader :parser
|
7
9
|
|
8
10
|
def initialize()
|
9
|
-
@parser =
|
11
|
+
@parser = Parser.new()
|
10
12
|
end
|
11
13
|
|
12
14
|
def parse_string(s, file_source = nil)
|
@@ -49,7 +51,7 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
49
51
|
|
50
52
|
# Create a closure that can be called in the given scope
|
51
53
|
def closure(model, scope)
|
52
|
-
|
54
|
+
Evaluator::Closure.new(evaluator, model, scope)
|
53
55
|
end
|
54
56
|
|
55
57
|
def evaluate(scope, model)
|
@@ -67,9 +69,9 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
67
69
|
def evaluator
|
68
70
|
# Do not use the cached evaluator if this is a migration run
|
69
71
|
if (Puppet.lookup(:migration_checker) { nil })
|
70
|
-
return
|
72
|
+
return Evaluator::EvaluatorImpl.new()
|
71
73
|
end
|
72
|
-
@@evaluator ||=
|
74
|
+
@@evaluator ||= Evaluator::EvaluatorImpl.new()
|
73
75
|
@@evaluator
|
74
76
|
end
|
75
77
|
|
@@ -84,11 +86,11 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
84
86
|
end
|
85
87
|
|
86
88
|
def acceptor()
|
87
|
-
|
89
|
+
Validation::Acceptor.new
|
88
90
|
end
|
89
91
|
|
90
92
|
def validator(acceptor)
|
91
|
-
|
93
|
+
Validation::ValidatorFactory_4_0.new().validator(acceptor)
|
92
94
|
end
|
93
95
|
|
94
96
|
def assert_and_report(parse_result)
|
@@ -98,7 +100,7 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
98
100
|
end
|
99
101
|
validation_result = validate(parse_result)
|
100
102
|
|
101
|
-
|
103
|
+
IssueReporter.assert_and_report(validation_result,
|
102
104
|
:emit_warnings => true)
|
103
105
|
parse_result
|
104
106
|
end
|
@@ -149,9 +151,11 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
149
151
|
escaped << '"'
|
150
152
|
end
|
151
153
|
|
152
|
-
class EvaluatingEppParser <
|
154
|
+
class EvaluatingEppParser < EvaluatingParser
|
153
155
|
def initialize()
|
154
|
-
@parser =
|
156
|
+
@parser = EppParser.new()
|
155
157
|
end
|
156
158
|
end
|
157
159
|
end
|
160
|
+
end
|
161
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
|
-
module Puppet::Pops
|
2
|
-
|
1
|
+
module Puppet::Pops
|
2
|
+
module Parser
|
3
|
+
module HeredocSupport
|
4
|
+
include LexerSupport
|
3
5
|
|
4
6
|
# Pattern for heredoc `@(endtag[:syntax][/escapes])
|
5
7
|
# Produces groups for endtag (group 1), syntax (group 2), and escapes (group 3)
|
@@ -15,12 +17,12 @@ module Puppet::Pops::Parser::HeredocSupport
|
|
15
17
|
|
16
18
|
# scanner is at position before @(
|
17
19
|
# find end of the heredoc spec
|
18
|
-
str = scn.scan_until(/\)/) || lex_error(
|
20
|
+
str = scn.scan_until(/\)/) || lex_error(Issues::HEREDOC_UNCLOSED_PARENTHESIS, :followed_by => followed_by)
|
19
21
|
pos_after_heredoc = scn.pos
|
20
22
|
|
21
23
|
# Note: allows '+' as separator in syntax, but this needs validation as empty segments are not allowed
|
22
24
|
md = str.match(PATTERN_HEREDOC)
|
23
|
-
lex_error(
|
25
|
+
lex_error(Issues::HEREDOC_INVALID_SYNTAX) unless md
|
24
26
|
endtag = md[1]
|
25
27
|
syntax = md[2] || ''
|
26
28
|
escapes = md[3]
|
@@ -33,7 +35,7 @@ module Puppet::Pops::Parser::HeredocSupport
|
|
33
35
|
endtag = $1.strip
|
34
36
|
end
|
35
37
|
|
36
|
-
lex_error(
|
38
|
+
lex_error(Issues::HEREDOC_MISSING_ENDTAG) unless endtag.length >= 1
|
37
39
|
|
38
40
|
resulting_escapes = []
|
39
41
|
if escapes
|
@@ -41,7 +43,7 @@ module Puppet::Pops::Parser::HeredocSupport
|
|
41
43
|
|
42
44
|
escapes = escapes.split('')
|
43
45
|
unless escapes.length == escapes.uniq.length
|
44
|
-
lex_error(
|
46
|
+
lex_error(Issues::HEREDOC_MULTIPLE_AT_ESCAPES, :escapes => escapes)
|
45
47
|
end
|
46
48
|
resulting_escapes = ["\\"]
|
47
49
|
escapes.each do |e|
|
@@ -51,7 +53,7 @@ module Puppet::Pops::Parser::HeredocSupport
|
|
51
53
|
when "L"
|
52
54
|
resulting_escapes += ["\n", "\r\n"]
|
53
55
|
else
|
54
|
-
lex_error(
|
56
|
+
lex_error(Issues::HEREDOC_INVALID_ESCAPE, :actual => e)
|
55
57
|
end
|
56
58
|
end
|
57
59
|
end
|
@@ -66,14 +68,14 @@ module Puppet::Pops::Parser::HeredocSupport
|
|
66
68
|
if ctx[:newline_jump]
|
67
69
|
scn.pos = ctx[:newline_jump]
|
68
70
|
else
|
69
|
-
scn.scan_until(/\n/) || lex_error(
|
71
|
+
scn.scan_until(/\n/) || lex_error(Issues::HEREDOC_WITHOUT_TEXT)
|
70
72
|
end
|
71
73
|
# offset 0 for the heredoc, and its line number
|
72
74
|
heredoc_offset = scn.pos
|
73
75
|
heredoc_line = locator.line_for_offset(heredoc_offset)-1
|
74
76
|
|
75
77
|
# Compute message to emit if there is no end (to make it refer to the opening heredoc position).
|
76
|
-
eof_error = create_lex_error(
|
78
|
+
eof_error = create_lex_error(Issues::HEREDOC_WITHOUT_END_TAGGED_LINE)
|
77
79
|
|
78
80
|
# Text from this position (+ lexing contexts offset for any preceding heredoc) is heredoc until a line
|
79
81
|
# that terminates the heredoc is found.
|
@@ -97,13 +99,13 @@ module Puppet::Pops::Parser::HeredocSupport
|
|
97
99
|
|
98
100
|
# Use a new lexer instance configured with a sub-locator to enable correct positioning
|
99
101
|
sublexer = self.class.new()
|
100
|
-
locator =
|
102
|
+
locator = Locator::SubLocator.sub_locator(str,
|
101
103
|
locator.file, heredoc_line, heredoc_offset, leading.length())
|
102
104
|
|
103
105
|
# Emit a token that provides the grammar with location information about the lines on which the heredoc
|
104
106
|
# content is based.
|
105
107
|
enqueue([:SUBLOCATE,
|
106
|
-
|
108
|
+
LexerSupport::TokenValue.new([:SUBLOCATE,
|
107
109
|
lines, lines.reduce(0) {|size, s| size + s.length} ],
|
108
110
|
heredoc_offset,
|
109
111
|
locator)])
|
@@ -138,3 +140,5 @@ module Puppet::Pops::Parser::HeredocSupport
|
|
138
140
|
|
139
141
|
|
140
142
|
end
|
143
|
+
end
|
144
|
+
end
|
@@ -12,12 +12,14 @@ require 'puppet/pops/parser/interpolation_support'
|
|
12
12
|
require 'puppet/pops/parser/epp_support'
|
13
13
|
require 'puppet/pops/parser/slurp_support'
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
include
|
19
|
-
include
|
20
|
-
include
|
15
|
+
module Puppet::Pops
|
16
|
+
module Parser
|
17
|
+
class Lexer2
|
18
|
+
include LexerSupport
|
19
|
+
include HeredocSupport
|
20
|
+
include InterpolationSupport
|
21
|
+
include SlurpSupport
|
22
|
+
include EppSupport
|
21
23
|
|
22
24
|
# ALl tokens have three slots, the token name (a Symbol), the token text (String), and a token text length.
|
23
25
|
# All operator and punctuation tokens reuse singleton arrays Tokens that require unique values create
|
@@ -356,7 +358,7 @@ class Puppet::Pops::Parser::Lexer2
|
|
356
358
|
scn = @scanner
|
357
359
|
la = scn.peek(2)
|
358
360
|
if la[1] == '*'
|
359
|
-
lex_error(
|
361
|
+
lex_error(Issues::UNCLOSED_MLCOMMENT) if scn.skip(PATTERN_MLCOMMENT).nil?
|
360
362
|
nil
|
361
363
|
else
|
362
364
|
before = scn.pos
|
@@ -432,7 +434,7 @@ class Puppet::Pops::Parser::Lexer2
|
|
432
434
|
else
|
433
435
|
# move to faulty position ('::<uc-letter>' was ok)
|
434
436
|
scn.pos = scn.pos + 3
|
435
|
-
lex_error(
|
437
|
+
lex_error(Issues::ILLEGAL_FULLY_QUALIFIED_CLASS_REFERENCE)
|
436
438
|
end
|
437
439
|
else
|
438
440
|
value = scn.scan(PATTERN_BARE_WORD)
|
@@ -445,7 +447,7 @@ class Puppet::Pops::Parser::Lexer2
|
|
445
447
|
else
|
446
448
|
# move to faulty position ('::' was ok)
|
447
449
|
scn.pos = scn.pos + 2
|
448
|
-
lex_error(
|
450
|
+
lex_error(Issues::ILLEGAL_FULLY_QUALIFIED_NAME)
|
449
451
|
end
|
450
452
|
end
|
451
453
|
else
|
@@ -524,7 +526,7 @@ class Puppet::Pops::Parser::Lexer2
|
|
524
526
|
length = scn.pos - before
|
525
527
|
assert_numeric(invalid_number, before)
|
526
528
|
scn.pos = before + 1
|
527
|
-
lex_error(
|
529
|
+
lex_error(Issues::ILLEGAL_NUMBER, {:value => invalid_number})
|
528
530
|
end
|
529
531
|
end
|
530
532
|
end
|
@@ -544,9 +546,9 @@ class Puppet::Pops::Parser::Lexer2
|
|
544
546
|
scn.pos = scn.pos + 1
|
545
547
|
fully_qualified = scn.match?(/::/)
|
546
548
|
if fully_qualified
|
547
|
-
lex_error(
|
549
|
+
lex_error(Issues::ILLEGAL_FULLY_QUALIFIED_NAME)
|
548
550
|
else
|
549
|
-
lex_error(
|
551
|
+
lex_error(Issues::ILLEGAL_NAME_OR_BARE_WORD)
|
550
552
|
end
|
551
553
|
end
|
552
554
|
end
|
@@ -563,7 +565,7 @@ class Puppet::Pops::Parser::Lexer2
|
|
563
565
|
else
|
564
566
|
# move to faulty position ([A-Z] was ok)
|
565
567
|
scn.pos = scn.pos + 1
|
566
|
-
lex_error(
|
568
|
+
lex_error(Issues::ILLEGAL_CLASS_REFERENCE)
|
567
569
|
end
|
568
570
|
end
|
569
571
|
end
|
@@ -604,20 +606,22 @@ class Puppet::Pops::Parser::Lexer2
|
|
604
606
|
|
605
607
|
def lex_string(string, path='')
|
606
608
|
initvars
|
609
|
+
assert_not_bom(string)
|
607
610
|
@scanner = StringScanner.new(string)
|
608
|
-
@locator =
|
611
|
+
@locator = Locator.locator(string, path)
|
609
612
|
end
|
610
613
|
|
611
614
|
# Lexes an unquoted string.
|
612
615
|
# @param string [String] the string to lex
|
613
|
-
# @param locator [
|
616
|
+
# @param locator [Locator] the locator to use (a default is used if nil is given)
|
614
617
|
# @param escapes [Array<String>] array of character strings representing the escape sequences to transform
|
615
618
|
# @param interpolate [Boolean] whether interpolation of expressions should be made or not.
|
616
619
|
#
|
617
620
|
def lex_unquoted_string(string, locator, escapes, interpolate)
|
618
621
|
initvars
|
622
|
+
assert_not_bom(string)
|
619
623
|
@scanner = StringScanner.new(string)
|
620
|
-
@locator = locator ||
|
624
|
+
@locator = locator || Locator.locator(string, '')
|
621
625
|
@lexing_context[:escapes] = escapes || UQ_ESCAPES
|
622
626
|
@lexing_context[:uq_slurp_pattern] = interpolate ? (escapes.include?('$') ? SLURP_UQ_PATTERN : SLURP_UQNE_PATTERN) : SLURP_ALL_PATTERN
|
623
627
|
end
|
@@ -640,9 +644,10 @@ class Puppet::Pops::Parser::Lexer2
|
|
640
644
|
#
|
641
645
|
def lex_file(file)
|
642
646
|
initvars
|
643
|
-
contents = Puppet::FileSystem.exist?(file) ? Puppet::FileSystem.read(file) : ''
|
647
|
+
contents = Puppet::FileSystem.exist?(file) ? Puppet::FileSystem.read(file, :encoding => 'utf-8') : ''
|
648
|
+
assert_not_bom(contents)
|
644
649
|
@scanner = StringScanner.new(contents.freeze)
|
645
|
-
@locator =
|
650
|
+
@locator = Locator.locator(contents, file)
|
646
651
|
end
|
647
652
|
|
648
653
|
def initvars
|
@@ -679,7 +684,7 @@ class Puppet::Pops::Parser::Lexer2
|
|
679
684
|
# every token in the lexed content.
|
680
685
|
#
|
681
686
|
scn = @scanner
|
682
|
-
lex_error_without_pos(
|
687
|
+
lex_error_without_pos(Issues::NO_INPUT_TO_LEXER) unless scn
|
683
688
|
|
684
689
|
ctx = @lexing_context
|
685
690
|
queue = @token_queue
|
@@ -759,3 +764,5 @@ class Puppet::Pops::Parser::Lexer2
|
|
759
764
|
end
|
760
765
|
|
761
766
|
end
|
767
|
+
end
|
768
|
+
end
|
@@ -1,7 +1,13 @@
|
|
1
|
+
|
2
|
+
module Puppet::Pops
|
3
|
+
module Parser
|
4
|
+
|
5
|
+
require 'puppet/util/multi_match'
|
6
|
+
|
1
7
|
# This is an integral part of the Lexer. It is broken out into a separate module
|
2
8
|
# for maintainability of the code, and making the various parts of the lexer focused.
|
3
9
|
#
|
4
|
-
module
|
10
|
+
module LexerSupport
|
5
11
|
|
6
12
|
# Returns "<eof>" if at end of input, else the following 5 characters with \n \r \t escaped
|
7
13
|
def followed_by
|
@@ -56,7 +62,7 @@ module Puppet::Pops::Parser::LexerSupport
|
|
56
62
|
})
|
57
63
|
end
|
58
64
|
|
59
|
-
# @param issue [
|
65
|
+
# @param issue [Issues::Issue] the issue
|
60
66
|
# @param args [Hash<Symbol,String>] Issue arguments
|
61
67
|
# @param pos [Integer]
|
62
68
|
# @return [Puppet::ParseErrorWithIssue] the created error
|
@@ -75,16 +81,16 @@ module Puppet::Pops::Parser::LexerSupport
|
|
75
81
|
#
|
76
82
|
def assert_numeric(value, pos)
|
77
83
|
if value =~ /^0[xX]/
|
78
|
-
lex_error(
|
84
|
+
lex_error(Issues::INVALID_HEX_NUMBER, {:value => value}, pos) unless value =~ /^0[xX][0-9A-Fa-f]+$/
|
79
85
|
|
80
86
|
elsif value =~ /^0[^.]/
|
81
|
-
lex_error(
|
87
|
+
lex_error(Issues::INVALID_OCTAL_NUMBER, {:value => value}, pos) unless value =~ /^0[0-7]+$/
|
82
88
|
|
83
89
|
elsif value =~ /^\d+[eE.]/
|
84
|
-
lex_error(
|
90
|
+
lex_error(Issues::INVALID_DECIMAL_NUMBER, {:value => value}, pos) unless value =~ /^\d+(?:\.\d+)?(?:[eE]-?\d+)?$/
|
85
91
|
|
86
92
|
else
|
87
|
-
lex_error(
|
93
|
+
lex_error(Issues::ILLEGAL_NUMBER, {:value => value}, pos) unless value =~ /^\d+$/
|
88
94
|
end
|
89
95
|
end
|
90
96
|
|
@@ -92,7 +98,7 @@ module Puppet::Pops::Parser::LexerSupport
|
|
92
98
|
# and its position in its source container. There is a cost associated with computing the
|
93
99
|
# line and position on line information.
|
94
100
|
#
|
95
|
-
class TokenValue <
|
101
|
+
class TokenValue < Locatable
|
96
102
|
attr_reader :token_array
|
97
103
|
attr_reader :offset
|
98
104
|
attr_reader :locator
|
@@ -139,4 +145,76 @@ module Puppet::Pops::Parser::LexerSupport
|
|
139
145
|
#
|
140
146
|
end
|
141
147
|
|
148
|
+
|
149
|
+
MM = Puppet::Util::MultiMatch
|
150
|
+
MM_ANY = MM::NOT_NIL
|
151
|
+
|
152
|
+
BOM_UTF_8 = MM.new(0xEF, 0xBB, 0xBF, MM_ANY)
|
153
|
+
BOM_UTF_16_1 = MM.new(0xFE, 0xFF, MM_ANY, MM_ANY)
|
154
|
+
BOM_UTF_16_2 = MM.new(0xFF, 0xFE, MM_ANY, MM_ANY)
|
155
|
+
BOM_UTF_32_1 = MM.new(0x00, 0x00, 0xFE, 0xFF )
|
156
|
+
BOM_UTF_32_2 = MM.new(0xFF, 0xFE, 0x00, 0x00 )
|
157
|
+
|
158
|
+
BOM_UTF_1 = MM.new(0xF7, 0x64, 0x4C, MM_ANY)
|
159
|
+
BOM_UTF_EBCDIC = MM.new(0xDD, 0x73, 0x66, 0x73 )
|
160
|
+
BOM_SCSU = MM.new(0x0E, 0xFE, 0xFF, MM_ANY)
|
161
|
+
BOM_BOCU = MM.new(0xFB, 0xEE, 0x28, MM_ANY)
|
162
|
+
BOM_GB_18030 = MM.new(0x84, 0x31, 0x95, 0x33 )
|
163
|
+
|
164
|
+
LONGEST_BOM = 4
|
165
|
+
|
166
|
+
def assert_not_bom(content)
|
167
|
+
name, size =
|
168
|
+
case bom = get_bom(content)
|
169
|
+
|
170
|
+
when BOM_UTF_32_1, BOM_UTF_32_2
|
171
|
+
['UTF-32', 4]
|
172
|
+
|
173
|
+
when BOM_GB_18030
|
174
|
+
['GB-18030', 4]
|
175
|
+
|
176
|
+
when BOM_UTF_EBCDIC
|
177
|
+
['UTF-EBCDIC', 4]
|
178
|
+
|
179
|
+
when BOM_SCSU
|
180
|
+
['SCSU', 3]
|
181
|
+
|
182
|
+
when BOM_UTF_8
|
183
|
+
['UTF-8', 3]
|
184
|
+
|
185
|
+
when BOM_UTF_1
|
186
|
+
['UTF-1', 3]
|
187
|
+
|
188
|
+
when BOM_BOCU
|
189
|
+
['BOCU', 3]
|
190
|
+
|
191
|
+
when BOM_UTF_16_1, BOM_UTF_16_2
|
192
|
+
['UTF-16', 2]
|
193
|
+
|
194
|
+
else
|
195
|
+
return
|
196
|
+
end
|
197
|
+
|
198
|
+
lex_error_without_pos(
|
199
|
+
Puppet::Pops::Issues::ILLEGAL_BOM,
|
200
|
+
{ :format_name => name,
|
201
|
+
:bytes => "[#{bom.values[0,size].map {|b| "%X" % b}.join(" ")}]"
|
202
|
+
})
|
203
|
+
end
|
204
|
+
|
205
|
+
def get_bom(content)
|
206
|
+
# get 5 bytes as efficiently as possible (none of the string methods works since a bom consists of
|
207
|
+
# illegal characters on most platforms, and there is no get_bytes(n). xplicit calls are faster than
|
208
|
+
# looping with a lambda. The get_byte returns nil if there are too few characters, and they
|
209
|
+
# are changed to spaces
|
210
|
+
MM.new(
|
211
|
+
(content.getbyte(0) || ' '),
|
212
|
+
(content.getbyte(1) || ' '),
|
213
|
+
(content.getbyte(2) || ' '),
|
214
|
+
(content.getbyte(3) || ' ')
|
215
|
+
)
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
end
|
142
220
|
end
|