r10k 3.5.2
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 +7 -0
- data/.gitattributes +1 -0
- data/.github/pull_request_template.md +1 -0
- data/.github/workflows/docker.yml +56 -0
- data/.github/workflows/release.yml +36 -0
- data/.gitignore +9 -0
- data/.travis.yml +45 -0
- data/CHANGELOG.mkd +1759 -0
- data/CODEOWNERS +2 -0
- data/CONTRIBUTING.mkd +105 -0
- data/Gemfile +15 -0
- data/LICENSE +14 -0
- data/README.mkd +118 -0
- data/Rakefile +3 -0
- data/azure-pipelines.yml +86 -0
- data/bin/r10k +17 -0
- data/doc/common-patterns.mkd +44 -0
- data/doc/dynamic-environments.mkd +31 -0
- data/doc/dynamic-environments/configuration.mkd +669 -0
- data/doc/dynamic-environments/git-environments.mkd +75 -0
- data/doc/dynamic-environments/introduction.mkd +69 -0
- data/doc/dynamic-environments/master-configuration.mkd +40 -0
- data/doc/dynamic-environments/quickstart.mkd +201 -0
- data/doc/dynamic-environments/svn-environments.mkd +45 -0
- data/doc/dynamic-environments/usage.mkd +132 -0
- data/doc/dynamic-environments/workflow-guide.mkd +247 -0
- data/doc/faq.mkd +164 -0
- data/doc/git/cloning-and-mirroring.mkd +60 -0
- data/doc/git/providers.mkd +111 -0
- data/doc/puppetfile.mkd +309 -0
- data/doc/updating-your-puppetfile.mkd +38 -0
- data/docker/.gitignore +1 -0
- data/docker/.rspec +4 -0
- data/docker/Gemfile +11 -0
- data/docker/Makefile +89 -0
- data/docker/README.md +28 -0
- data/docker/r10k/Dockerfile +67 -0
- data/docker/r10k/adduser.sh +13 -0
- data/docker/r10k/docker-entrypoint.d/10-analytics.sh +30 -0
- data/docker/r10k/docker-entrypoint.sh +11 -0
- data/docker/r10k/release.Dockerfile +54 -0
- data/docker/spec/dockerfile_spec.rb +43 -0
- data/docker/spec/fixtures/Puppetfile +2 -0
- data/integration/Gemfile +19 -0
- data/integration/README.mkd +29 -0
- data/integration/Rakefile +77 -0
- data/integration/component/pre-suite/05_install_dev_r10k.rb +12 -0
- data/integration/files/README.mkd +4 -0
- data/integration/files/hiera.yaml +8 -0
- data/integration/files/modules/helloworld/manifests/init.pp +3 -0
- data/integration/files/modules/hieratest/manifests/init.pp +3 -0
- data/integration/files/modules/unicode/files/pretend_unicode +1 -0
- data/integration/files/modules/unicode/manifests/init.pp +6 -0
- data/integration/files/pre-suite/git_config.pp.erb +19 -0
- data/integration/files/pre-suite/prod_env.config +3 -0
- data/integration/files/r10k_conf.yaml.erb +9 -0
- data/integration/lib/README.mkd +4 -0
- data/integration/lib/git_utils.rb +205 -0
- data/integration/lib/master_manipulator.rb +205 -0
- data/integration/lib/r10k_utils.rb +222 -0
- data/integration/manifests/README.mkd +4 -0
- data/integration/pre-suite/00_pe_install.rb +6 -0
- data/integration/pre-suite/10_git_config.rb +48 -0
- data/integration/pre-suite/20_pe_r10k.rb +55 -0
- data/integration/pre-suite/README.mkd +5 -0
- data/integration/tests/Puppetfile/HTTP_PROXY_affects_forge_source.rb +72 -0
- data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +70 -0
- data/integration/tests/README.mkd +4 -0
- data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +83 -0
- data/integration/tests/basic_functionality/negative/neg_deploy_with_invalid_r10k_yaml.rb +51 -0
- data/integration/tests/basic_functionality/negative/neg_deploy_with_missing_r10k_yaml.rb +28 -0
- data/integration/tests/basic_functionality/negative/neg_invalid_git_provider.rb +45 -0
- data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +34 -0
- data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +103 -0
- data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +128 -0
- data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +61 -0
- data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +109 -0
- data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +108 -0
- data/integration/tests/command_line/deploy_env_without_mod_update.rb +76 -0
- data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +77 -0
- data/integration/tests/command_line/negative/neg_invalid_cmd_line_arg.rb +23 -0
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +70 -0
- data/integration/tests/git_source/git_source_git.rb +128 -0
- data/integration/tests/git_source/git_source_ssh.rb +87 -0
- data/integration/tests/git_source/git_source_submodule.rb +70 -0
- data/integration/tests/git_source/negative/neg_git_broken_remote.rb +38 -0
- data/integration/tests/git_source/negative/neg_git_unauthorized_https.rb +46 -0
- data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +73 -0
- data/integration/tests/git_source/negative/neg_git_unicode_branch.rb +35 -0
- data/integration/tests/i18n/deploy_module_with_unicode_in_file_name.rb +64 -0
- data/integration/tests/purging/content_not_purged_at_root.rb +89 -0
- data/integration/tests/purging/default_purging.rb +125 -0
- data/integration/tests/purging/does_not_purge_files_on_white_list.rb +93 -0
- data/integration/tests/purging/invalid_whitelist_types.rb +63 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_1000_branches.rb +66 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +111 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +117 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_hiera.rb +100 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_multi_source.rb +133 -0
- data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +161 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_basedir.rb +46 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +48 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +45 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +43 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_remote.rb +45 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_branch_name_collision.rb +64 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +44 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +58 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_env_name.rb +34 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_puppet_file.rb +36 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +49 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_read_only.rb +58 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +51 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +104 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +81 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_module.rb +49 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +82 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +68 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_non-existent_base_dir.rb +94 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +93 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +117 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_unicode_paths.rb +60 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +166 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +163 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +111 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +78 -0
- data/integration/tests/user_scenario/complex_workflow/single_env_git_module_update.rb +100 -0
- data/lib/r10k.rb +11 -0
- data/lib/r10k/action/base.rb +31 -0
- data/lib/r10k/action/cri_runner.rb +72 -0
- data/lib/r10k/action/deploy.rb +9 -0
- data/lib/r10k/action/deploy/deploy_helpers.rb +34 -0
- data/lib/r10k/action/deploy/display.rb +89 -0
- data/lib/r10k/action/deploy/environment.rb +196 -0
- data/lib/r10k/action/deploy/module.rb +84 -0
- data/lib/r10k/action/puppetfile.rb +10 -0
- data/lib/r10k/action/puppetfile/check.rb +31 -0
- data/lib/r10k/action/puppetfile/cri_runner.rb +26 -0
- data/lib/r10k/action/puppetfile/install.rb +45 -0
- data/lib/r10k/action/puppetfile/purge.rb +28 -0
- data/lib/r10k/action/runner.rb +96 -0
- data/lib/r10k/action/visitor.rb +31 -0
- data/lib/r10k/cli.rb +51 -0
- data/lib/r10k/cli/deploy.rb +114 -0
- data/lib/r10k/cli/ext/logging.rb +15 -0
- data/lib/r10k/cli/help.rb +7 -0
- data/lib/r10k/cli/puppetfile.rb +74 -0
- data/lib/r10k/cli/version.rb +31 -0
- data/lib/r10k/deployment.rb +132 -0
- data/lib/r10k/deployment/config.rb +56 -0
- data/lib/r10k/environment.rb +37 -0
- data/lib/r10k/environment/bare.rb +16 -0
- data/lib/r10k/environment/base.rb +150 -0
- data/lib/r10k/environment/git.rb +81 -0
- data/lib/r10k/environment/name.rb +86 -0
- data/lib/r10k/environment/svn.rb +91 -0
- data/lib/r10k/environment/with_modules.rb +139 -0
- data/lib/r10k/errors.rb +61 -0
- data/lib/r10k/errors/formatting.rb +28 -0
- data/lib/r10k/feature.rb +56 -0
- data/lib/r10k/feature/collection.rb +23 -0
- data/lib/r10k/features.rb +20 -0
- data/lib/r10k/forge/module_release.rb +228 -0
- data/lib/r10k/git.rb +196 -0
- data/lib/r10k/git/alternates.rb +63 -0
- data/lib/r10k/git/cache.rb +108 -0
- data/lib/r10k/git/errors.rb +34 -0
- data/lib/r10k/git/rugged.rb +17 -0
- data/lib/r10k/git/rugged/bare_repository.rb +85 -0
- data/lib/r10k/git/rugged/base_repository.rb +93 -0
- data/lib/r10k/git/rugged/cache.rb +11 -0
- data/lib/r10k/git/rugged/credentials.rb +91 -0
- data/lib/r10k/git/rugged/thin_repository.rb +89 -0
- data/lib/r10k/git/rugged/working_repository.rb +145 -0
- data/lib/r10k/git/shellgit.rb +9 -0
- data/lib/r10k/git/shellgit/bare_repository.rb +43 -0
- data/lib/r10k/git/shellgit/base_repository.rb +137 -0
- data/lib/r10k/git/shellgit/cache.rb +11 -0
- data/lib/r10k/git/shellgit/thin_repository.rb +69 -0
- data/lib/r10k/git/shellgit/working_repository.rb +111 -0
- data/lib/r10k/git/stateful_repository.rb +95 -0
- data/lib/r10k/initializers.rb +67 -0
- data/lib/r10k/instance_cache.rb +32 -0
- data/lib/r10k/keyed_factory.rb +39 -0
- data/lib/r10k/logging.rb +109 -0
- data/lib/r10k/logging/terminaloutputter.rb +36 -0
- data/lib/r10k/module.rb +38 -0
- data/lib/r10k/module/base.rb +113 -0
- data/lib/r10k/module/forge.rb +177 -0
- data/lib/r10k/module/git.rb +109 -0
- data/lib/r10k/module/local.rb +36 -0
- data/lib/r10k/module/metadata_file.rb +31 -0
- data/lib/r10k/module/svn.rb +112 -0
- data/lib/r10k/puppetfile.rb +286 -0
- data/lib/r10k/settings.rb +194 -0
- data/lib/r10k/settings/collection.rb +123 -0
- data/lib/r10k/settings/container.rb +97 -0
- data/lib/r10k/settings/definition.rb +124 -0
- data/lib/r10k/settings/enum_definition.rb +30 -0
- data/lib/r10k/settings/helpers.rb +38 -0
- data/lib/r10k/settings/list.rb +107 -0
- data/lib/r10k/settings/loader.rb +99 -0
- data/lib/r10k/settings/mixin.rb +54 -0
- data/lib/r10k/settings/uri_definition.rb +19 -0
- data/lib/r10k/source.rb +42 -0
- data/lib/r10k/source/base.rb +74 -0
- data/lib/r10k/source/exec.rb +51 -0
- data/lib/r10k/source/git.rb +142 -0
- data/lib/r10k/source/hash.rb +182 -0
- data/lib/r10k/source/svn.rb +136 -0
- data/lib/r10k/source/yaml.rb +20 -0
- data/lib/r10k/source/yamldir.rb +32 -0
- data/lib/r10k/svn.rb +6 -0
- data/lib/r10k/svn/remote.rb +68 -0
- data/lib/r10k/svn/working_dir.rb +125 -0
- data/lib/r10k/util/attempt.rb +84 -0
- data/lib/r10k/util/basedir.rb +65 -0
- data/lib/r10k/util/commands.rb +31 -0
- data/lib/r10k/util/exec_env.rb +36 -0
- data/lib/r10k/util/license.rb +24 -0
- data/lib/r10k/util/platform.rb +42 -0
- data/lib/r10k/util/purgeable.rb +88 -0
- data/lib/r10k/util/setopts.rb +55 -0
- data/lib/r10k/util/subprocess.rb +84 -0
- data/lib/r10k/util/subprocess/result.rb +56 -0
- data/lib/r10k/util/subprocess/runner.rb +26 -0
- data/lib/r10k/util/subprocess/runner/jruby.rb +23 -0
- data/lib/r10k/util/subprocess/runner/posix.rb +103 -0
- data/lib/r10k/util/subprocess/runner/pump.rb +59 -0
- data/lib/r10k/util/subprocess/runner/windows.rb +23 -0
- data/lib/r10k/util/subprocess/subprocess_error.rb +24 -0
- data/lib/r10k/util/symbolize_keys.rb +35 -0
- data/lib/r10k/version.rb +6 -0
- data/locales/config.yaml +21 -0
- data/locales/r10k.pot +545 -0
- data/r10k.gemspec +50 -0
- data/r10k.yaml.example +112 -0
- data/spec/fixtures/empty/.empty +0 -0
- data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
- data/spec/fixtures/module/forge/bad_module/metadata.json +1 -0
- data/spec/fixtures/module/forge/eight_hundred/Modulefile +8 -0
- data/spec/fixtures/module/forge/eight_hundred/metadata.json +19 -0
- data/spec/fixtures/unit/action/r10k.yaml +5 -0
- data/spec/fixtures/unit/action/r10k_cachedir.yaml +2 -0
- data/spec/fixtures/unit/action/r10k_generate_types.yaml +3 -0
- data/spec/fixtures/unit/action/r10k_puppet_path.yaml +3 -0
- data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +5 -0
- data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +10 -0
- data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +1 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
- data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +3 -0
- data/spec/integration/git/rugged/bare_repository_spec.rb +13 -0
- data/spec/integration/git/rugged/thin_repository_spec.rb +14 -0
- data/spec/integration/git/rugged/working_repository_spec.rb +48 -0
- data/spec/integration/git/shellgit/bare_repository_spec.rb +13 -0
- data/spec/integration/git/shellgit/thin_repository_spec.rb +14 -0
- data/spec/integration/git/shellgit/working_repository_spec.rb +13 -0
- data/spec/integration/git/stateful_repository_spec.rb +159 -0
- data/spec/matchers/exit_with.rb +28 -0
- data/spec/matchers/match_realpath.rb +18 -0
- data/spec/r10k-mocks.rb +3 -0
- data/spec/r10k-mocks/mock_config.rb +33 -0
- data/spec/r10k-mocks/mock_env.rb +15 -0
- data/spec/r10k-mocks/mock_source.rb +13 -0
- data/spec/shared-contexts/git-fixtures.rb +55 -0
- data/spec/shared-examples/deploy-actions.rb +69 -0
- data/spec/shared-examples/git-repository.rb +38 -0
- data/spec/shared-examples/git/bare_repository.rb +132 -0
- data/spec/shared-examples/git/thin_repository.rb +26 -0
- data/spec/shared-examples/git/working_repository.rb +207 -0
- data/spec/shared-examples/puppetfile-action.rb +39 -0
- data/spec/shared-examples/settings/ancestry.rb +44 -0
- data/spec/shared-examples/subprocess-runner.rb +83 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/unit/action/cri_runner_spec.rb +72 -0
- data/spec/unit/action/deploy/deploy_helpers_spec.rb +38 -0
- data/spec/unit/action/deploy/display_spec.rb +31 -0
- data/spec/unit/action/deploy/environment_spec.rb +395 -0
- data/spec/unit/action/deploy/module_spec.rb +139 -0
- data/spec/unit/action/puppetfile/check_spec.rb +41 -0
- data/spec/unit/action/puppetfile/cri_runner_spec.rb +47 -0
- data/spec/unit/action/puppetfile/install_spec.rb +84 -0
- data/spec/unit/action/puppetfile/purge_spec.rb +42 -0
- data/spec/unit/action/runner_spec.rb +213 -0
- data/spec/unit/action/visitor_spec.rb +39 -0
- data/spec/unit/cli_spec.rb +9 -0
- data/spec/unit/deployment/config_spec.rb +33 -0
- data/spec/unit/deployment_spec.rb +162 -0
- data/spec/unit/environment/base_spec.rb +109 -0
- data/spec/unit/environment/git_spec.rb +97 -0
- data/spec/unit/environment/name_spec.rb +135 -0
- data/spec/unit/environment/svn_spec.rb +133 -0
- data/spec/unit/errors/formatting_spec.rb +84 -0
- data/spec/unit/feature_spec.rb +50 -0
- data/spec/unit/forge/module_release_spec.rb +213 -0
- data/spec/unit/git/alternates_spec.rb +116 -0
- data/spec/unit/git/cache_spec.rb +55 -0
- data/spec/unit/git/rugged/cache_spec.rb +29 -0
- data/spec/unit/git/rugged/credentials_spec.rb +109 -0
- data/spec/unit/git/shellgit/cache_spec.rb +27 -0
- data/spec/unit/git/stateful_repository_spec.rb +40 -0
- data/spec/unit/git_spec.rb +102 -0
- data/spec/unit/initializers_spec.rb +68 -0
- data/spec/unit/instance_cache_spec.rb +78 -0
- data/spec/unit/keyed_factory_spec.rb +51 -0
- data/spec/unit/logging/terminaloutputter_spec.rb +53 -0
- data/spec/unit/logging_spec.rb +68 -0
- data/spec/unit/module/base_spec.rb +72 -0
- data/spec/unit/module/forge_spec.rb +207 -0
- data/spec/unit/module/git_spec.rb +274 -0
- data/spec/unit/module/metadata_file_spec.rb +68 -0
- data/spec/unit/module/svn_spec.rb +178 -0
- data/spec/unit/module_spec.rb +29 -0
- data/spec/unit/puppetfile_spec.rb +300 -0
- data/spec/unit/settings/collection_spec.rb +123 -0
- data/spec/unit/settings/container_spec.rb +92 -0
- data/spec/unit/settings/definition_spec.rb +79 -0
- data/spec/unit/settings/enum_definition_spec.rb +20 -0
- data/spec/unit/settings/inheritance_spec.rb +38 -0
- data/spec/unit/settings/list_spec.rb +88 -0
- data/spec/unit/settings/loader_spec.rb +110 -0
- data/spec/unit/settings/uri_definition_spec.rb +23 -0
- data/spec/unit/settings_spec.rb +246 -0
- data/spec/unit/source/base_spec.rb +31 -0
- data/spec/unit/source/exec_spec.rb +81 -0
- data/spec/unit/source/git_spec.rb +185 -0
- data/spec/unit/source/hash_spec.rb +54 -0
- data/spec/unit/source/svn_spec.rb +196 -0
- data/spec/unit/source/yaml_spec.rb +42 -0
- data/spec/unit/source_spec.rb +10 -0
- data/spec/unit/svn/remote_spec.rb +21 -0
- data/spec/unit/svn/working_dir_spec.rb +56 -0
- data/spec/unit/util/attempt_spec.rb +82 -0
- data/spec/unit/util/commands_spec.rb +61 -0
- data/spec/unit/util/exec_env_spec.rb +56 -0
- data/spec/unit/util/purgeable_spec.rb +230 -0
- data/spec/unit/util/setopts_spec.rb +59 -0
- data/spec/unit/util/subprocess/result_spec.rb +36 -0
- data/spec/unit/util/subprocess/runner/posix_spec.rb +7 -0
- data/spec/unit/util/subprocess/runner/pump_spec.rb +79 -0
- data/spec/unit/util/subprocess/runner/windows_spec.rb +7 -0
- data/spec/unit/util/subprocess/subprocess_error_spec.rb +26 -0
- data/spec/unit/util/subprocess_spec.rb +65 -0
- data/spec/unit/util/symbolize_keys_spec.rb +67 -0
- metadata +582 -0
data/r10k.gemspec
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
lib = File.expand_path('../lib/', __FILE__)
|
|
2
|
+
$:.unshift lib unless $:.include?(lib)
|
|
3
|
+
|
|
4
|
+
require 'r10k/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = "r10k"
|
|
8
|
+
s.version = R10K::VERSION
|
|
9
|
+
s.platform = Gem::Platform::RUBY
|
|
10
|
+
|
|
11
|
+
s.authors = "Adrien Thebo"
|
|
12
|
+
s.email = "adrien@somethingsinistral.net"
|
|
13
|
+
s.homepage = "https://github.com/puppetlabs/r10k"
|
|
14
|
+
s.summary = "Puppet environment and module deployment"
|
|
15
|
+
s.description = <<-DESCRIPTION
|
|
16
|
+
R10K provides a general purpose toolset for deploying Puppet environments and modules.
|
|
17
|
+
It implements the Puppetfile format and provides a native implementation of Puppet
|
|
18
|
+
dynamic environments.
|
|
19
|
+
DESCRIPTION
|
|
20
|
+
|
|
21
|
+
s.required_ruby_version = '>= 2.3.0'
|
|
22
|
+
|
|
23
|
+
s.license = 'Apache-2.0'
|
|
24
|
+
|
|
25
|
+
s.add_dependency 'colored2', '3.1.2'
|
|
26
|
+
s.add_dependency 'cri', ['>= 2.15.10', '< 3.0.0']
|
|
27
|
+
|
|
28
|
+
s.add_dependency 'log4r', '1.1.10'
|
|
29
|
+
s.add_dependency 'multi_json', '~> 1.10'
|
|
30
|
+
|
|
31
|
+
s.add_dependency 'puppet_forge', '~> 2.3.0'
|
|
32
|
+
|
|
33
|
+
s.add_dependency 'gettext-setup', '~>0.24'
|
|
34
|
+
# These two pins narrow what is allowed by gettext-setup,
|
|
35
|
+
# to preserver compatability with Ruby 2.4
|
|
36
|
+
s.add_dependency 'fast_gettext', '~> 1.1.0'
|
|
37
|
+
s.add_dependency 'gettext', ['>= 3.0.2', '< 3.3.0']
|
|
38
|
+
|
|
39
|
+
s.add_development_dependency 'rspec', '~> 3.1'
|
|
40
|
+
|
|
41
|
+
s.add_development_dependency 'rake'
|
|
42
|
+
|
|
43
|
+
s.add_development_dependency 'yard', '~> 0.9.11'
|
|
44
|
+
s.add_development_dependency 'minitar', '~> 0.9.0'
|
|
45
|
+
|
|
46
|
+
s.files = %x[git ls-files].split($/)
|
|
47
|
+
s.require_path = 'lib'
|
|
48
|
+
s.bindir = 'bin'
|
|
49
|
+
s.executables = 'r10k'
|
|
50
|
+
end
|
data/r10k.yaml.example
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
# This example configuration details the most commonly used configuration
|
|
3
|
+
# options for the `r10k deploy` command.
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
# The 'cachedir' setting controls where cached content, such as mirrored Git
|
|
7
|
+
# repositories, are stored on the local machine. This location should be
|
|
8
|
+
# persistent, as environments and modules may rely on these files in order to
|
|
9
|
+
# be updated.
|
|
10
|
+
#
|
|
11
|
+
# The default value is "~/.r10k"
|
|
12
|
+
#cachedir: '/var/cache/r10k'
|
|
13
|
+
|
|
14
|
+
# The 'proxy' setting configures an HTTP proxy to use for all HTTP/HTTPS
|
|
15
|
+
# operations performed by r10k. This includes requests to the Puppet Forge
|
|
16
|
+
# as well as any Git operations performed against an HTTP/HTTPS remote.
|
|
17
|
+
# You can also configure specific proxies for only Git or Forge operations
|
|
18
|
+
# using settings below. Authenticated proxies can be configured by providing
|
|
19
|
+
# credentials in the URL, e.g. 'https://username:password@proxy.example.com:8888'
|
|
20
|
+
#proxy: 'https://proxy.example.com:8888'
|
|
21
|
+
|
|
22
|
+
# The 'sources' setting determines what repositories r10k will use when creating
|
|
23
|
+
# Puppet environments.
|
|
24
|
+
sources:
|
|
25
|
+
# Each source should have a unique name, and preferrably should only use
|
|
26
|
+
# alphanumeric characters and underscores.
|
|
27
|
+
#operations:
|
|
28
|
+
# The 'remote' setting determines the location of the VCS repository used
|
|
29
|
+
# for creating environments.
|
|
30
|
+
#remote: 'git@github.com:my-org/org-operations-modules'
|
|
31
|
+
|
|
32
|
+
# The 'basedir' setting specifies where environments will be created for
|
|
33
|
+
# this source. This setting should match the Puppet 'environmentpath'
|
|
34
|
+
# setting in puppet.conf.
|
|
35
|
+
#
|
|
36
|
+
# See http://docs.puppetlabs.com/references/latest/configuration.html#environmentpath
|
|
37
|
+
# for more information about the Puppet 'environmentpath' setting.
|
|
38
|
+
#basedir: '/etc/puppetlabs/puppet/environments'
|
|
39
|
+
|
|
40
|
+
# The Puppetfile filename in the repo, defaults to 'Puppetfile'. This
|
|
41
|
+
# setting can be used, to allow custom Puppetfile names to allow hybrid
|
|
42
|
+
# use of librarian-puppet (transitive dependency resolution) and r10k
|
|
43
|
+
# (code management on the server).
|
|
44
|
+
#puppetfile_name: 'Puppetfile.r10k'
|
|
45
|
+
|
|
46
|
+
# One or more sources can be specified; each source is simple another entry
|
|
47
|
+
# in the sources map.
|
|
48
|
+
#qa:
|
|
49
|
+
#remote: 'git@github.com:my-org/org-qa-modules'
|
|
50
|
+
|
|
51
|
+
# Multiple sources can have the same 'basedir' setting, in case there is a
|
|
52
|
+
# reason to push different sets of environments to the same Puppet master.
|
|
53
|
+
# If two different sources have the same basedir care should be exercised
|
|
54
|
+
# to make sure that two sources don't try create multiple environments with
|
|
55
|
+
# the same name. See the 'prefix' setting for more information.
|
|
56
|
+
#basedir: '/etc/puppetlabs/puppet/environments'
|
|
57
|
+
|
|
58
|
+
# Sources can use the 'prefix' setting to avoid collisions between multiple
|
|
59
|
+
# sources being created in the same directory. Setting prefix to true
|
|
60
|
+
# prepends the source name and an underscore to each environment, so for
|
|
61
|
+
# the qa source the "production" branch will create the "qa_production"
|
|
62
|
+
# branch.
|
|
63
|
+
#
|
|
64
|
+
# The default value is 'false'.
|
|
65
|
+
#prefix: true
|
|
66
|
+
|
|
67
|
+
# Additional configuration can be supplied to configure how r10k uses Git
|
|
68
|
+
# and what version of Git it uses.
|
|
69
|
+
git:
|
|
70
|
+
|
|
71
|
+
# As of 1.5.0 r10k can interact with Git repositories in two ways - by
|
|
72
|
+
# shelling out to the 'git' executable, and by using libgit2 through the
|
|
73
|
+
# 'rugged' library.
|
|
74
|
+
#provider: 'shellgit' # Either 'shellgit' or 'rugged', defaults to 'shellgit'
|
|
75
|
+
|
|
76
|
+
# The 'private_key' setting sets the the SSH private key to use for remote
|
|
77
|
+
# Git repositories accessed over SSH.
|
|
78
|
+
#
|
|
79
|
+
# The 'private_key' setting is only used by the 'rugged' Git provider.
|
|
80
|
+
#private_key: '/root/.ssh/id_rsa'
|
|
81
|
+
|
|
82
|
+
# The 'username' setting sets the SSH username for remote Git repositories
|
|
83
|
+
# when a username is not provided in the URL. The username defaults to the
|
|
84
|
+
# current user.
|
|
85
|
+
#
|
|
86
|
+
# The 'username' setting is only used by the 'rugged' Git provider.
|
|
87
|
+
#username: 'git'
|
|
88
|
+
|
|
89
|
+
# The 'proxy' setting configures an HTTP proxy to use for all Git sources
|
|
90
|
+
# that have an HTTP/HTTPS remote URL. This can be overridden on a
|
|
91
|
+
# per-repository basis using the 'repositories' setting below.
|
|
92
|
+
#proxy: 'https://proxy.example.com:8888'
|
|
93
|
+
|
|
94
|
+
# The 'repositories' setting allows other git related settings to be
|
|
95
|
+
# configured for each remote repository individually. The value of
|
|
96
|
+
# this setting should be a list of repositories with a 'remote' key
|
|
97
|
+
# to identify the specific repository to be configured.
|
|
98
|
+
#repositories:
|
|
99
|
+
# - remote: "ssh://tessier-ashpool.freeside/protected-repo.git"
|
|
100
|
+
# private_key: "/etc/puppetlabs/r10k/ssh/id_rsa-protected-repo-deploy-key"
|
|
101
|
+
# proxy: 'https://proxy.example.com:8888'
|
|
102
|
+
|
|
103
|
+
# Configuration options for downloading modules from the Puppet Forge
|
|
104
|
+
forge:
|
|
105
|
+
# The 'proxy' setting specifies an optional HTTP proxy to use when making
|
|
106
|
+
# requests to the Puppet Forge. This will override the top level 'proxy'
|
|
107
|
+
# option or any proxy related environment variables when configured.
|
|
108
|
+
#proxy: 'https://proxy.example.com:8888'
|
|
109
|
+
|
|
110
|
+
# The 'baseurl' setting indicates where Forge modules should be installed
|
|
111
|
+
# from. This defaults to 'https://forgeapi.puppetlabs.com'
|
|
112
|
+
#baseurl: 'https://forgemirror.example.com'
|
|
File without changes
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I am bad JSON!
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
name 'branan-eight_hundred'
|
|
2
|
+
version '8.0.0'
|
|
3
|
+
source 'https://github.com/branan/puppet-module-eight_hundred'
|
|
4
|
+
author 'Branan Purvine-Riley'
|
|
5
|
+
license 'Apache License 2.0'
|
|
6
|
+
summary '800 modules! WOOOOOOO!'
|
|
7
|
+
description '800 modules! WOOOOOOOOOOOOOOOOOO!'
|
|
8
|
+
project_page 'https://github.com/branan/puppet-module-eight_hundred'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"checksums": {
|
|
3
|
+
"Modulefile": "1e780d794bcd6629dc3006129fc02edf"
|
|
4
|
+
},
|
|
5
|
+
"license": "Apache License 2.0",
|
|
6
|
+
"types": [
|
|
7
|
+
|
|
8
|
+
],
|
|
9
|
+
"version": "8.0.0",
|
|
10
|
+
"dependencies": [
|
|
11
|
+
|
|
12
|
+
],
|
|
13
|
+
"summary": "800 modules! WOOOOOOO!",
|
|
14
|
+
"source": "https://github.com/branan/puppet-module-eight_hundred",
|
|
15
|
+
"description": "800 modules! WOOOOOOOOOOOOOOOOOO!",
|
|
16
|
+
"author": "Branan Purvine-Riley",
|
|
17
|
+
"name": "branan-eight_hundred",
|
|
18
|
+
"project_page": "https://github.com/branan/puppet-module-eight_hundred"
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mod 'branan/eight_hundred', '1.0.0', :git => 'https://github.com/branan/eight_hundred', :ref => 'master'
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
forge "http://forge.puppetlabs.com"
|
|
2
|
+
|
|
3
|
+
mod "puppetlabs/stdlib", '4.11.0'
|
|
4
|
+
mod "puppetlabs/stdlib", '4.12.0'
|
|
5
|
+
mod "puppetlabs/concat", '2.1.0'
|
|
6
|
+
mod "otheruser/concat", '2.1.0'
|
|
7
|
+
|
|
8
|
+
mod 'apache',
|
|
9
|
+
:git => 'https://github.com/puppetlabs/puppetlabs-apache',
|
|
10
|
+
:branch => 'docs_experiment'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mod 'branan/eight_hundred' :git => 'https://github.com/branan/eight_hundred'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'a-shrubbery!'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mod 'branan/eight_hundred', undefined_lookup_function('eight_hundred')
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mod 'puppetlabs/apt', '2.1.1'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mod 'puppetlabs/apt'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/git/rugged/bare_repository'
|
|
3
|
+
|
|
4
|
+
describe R10K::Git::Rugged::BareRepository, :if => R10K::Features.available?(:rugged) do
|
|
5
|
+
include_context 'Git integration'
|
|
6
|
+
|
|
7
|
+
let(:dirname) { 'bare-repo.git' }
|
|
8
|
+
|
|
9
|
+
subject { described_class.new(basedir, dirname) }
|
|
10
|
+
|
|
11
|
+
it_behaves_like 'a git repository'
|
|
12
|
+
it_behaves_like 'a git bare repository'
|
|
13
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/git/rugged/thin_repository'
|
|
3
|
+
|
|
4
|
+
describe R10K::Git::Rugged::ThinRepository, :if => R10K::Features.available?(:rugged) do
|
|
5
|
+
include_context 'Git integration'
|
|
6
|
+
|
|
7
|
+
let(:dirname) { 'working-repo' }
|
|
8
|
+
|
|
9
|
+
let(:cacherepo) { R10K::Git::Rugged::Cache.generate(remote) }
|
|
10
|
+
|
|
11
|
+
subject { described_class.new(basedir, dirname, cacherepo) }
|
|
12
|
+
|
|
13
|
+
it_behaves_like "a git thin repository"
|
|
14
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/git/rugged/working_repository'
|
|
3
|
+
|
|
4
|
+
describe R10K::Git::Rugged::WorkingRepository, :if => R10K::Features.available?(:rugged) do
|
|
5
|
+
include_context 'Git integration'
|
|
6
|
+
|
|
7
|
+
let(:dirname) { 'working-repo' }
|
|
8
|
+
|
|
9
|
+
subject { described_class.new(basedir, dirname) }
|
|
10
|
+
|
|
11
|
+
it_behaves_like 'a git repository'
|
|
12
|
+
it_behaves_like 'a git working repository'
|
|
13
|
+
|
|
14
|
+
describe "checking out an unresolvable ref" do
|
|
15
|
+
it "raises an error indicating that the ref was unresolvable" do
|
|
16
|
+
expect(subject).to receive(:resolve).with("unresolvable")
|
|
17
|
+
expect {
|
|
18
|
+
subject.checkout("unresolvable")
|
|
19
|
+
}.to raise_error(R10K::Git::GitError, /Unable to check out unresolvable ref 'unresolvable'/)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "checking out a specific SHA" do
|
|
24
|
+
let(:_rugged_repo) { double("Repository") }
|
|
25
|
+
|
|
26
|
+
before do
|
|
27
|
+
subject.clone(remote)
|
|
28
|
+
allow(subject).to receive(:with_repo).and_yield(_rugged_repo)
|
|
29
|
+
allow(subject).to receive(:resolve).and_return("157011a4eaa27f1202a9d94335ee4876b26d377e")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "with force" do
|
|
33
|
+
it "does not receive a checkout call" do
|
|
34
|
+
expect(_rugged_repo).to_not receive(:checkout)
|
|
35
|
+
expect(_rugged_repo).to receive(:reset)
|
|
36
|
+
subject.checkout("157011a4eaa27f1202a9d94335ee4876b26d377e", {:force => true})
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "without force" do
|
|
41
|
+
it "does receive a checkout call" do
|
|
42
|
+
expect(_rugged_repo).to receive(:checkout)
|
|
43
|
+
expect(_rugged_repo).to_not receive(:reset)
|
|
44
|
+
subject.checkout("157011a4eaa27f1202a9d94335ee4876b26d377e", {:force => false})
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/git/shellgit/bare_repository'
|
|
3
|
+
|
|
4
|
+
describe R10K::Git::ShellGit::BareRepository do
|
|
5
|
+
include_context 'Git integration'
|
|
6
|
+
|
|
7
|
+
let(:dirname) { 'bare-repo.git' }
|
|
8
|
+
|
|
9
|
+
subject { described_class.new(basedir, dirname) }
|
|
10
|
+
|
|
11
|
+
it_behaves_like 'a git repository'
|
|
12
|
+
it_behaves_like 'a git bare repository'
|
|
13
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/git/shellgit/thin_repository'
|
|
3
|
+
|
|
4
|
+
describe R10K::Git::ShellGit::ThinRepository do
|
|
5
|
+
include_context 'Git integration'
|
|
6
|
+
|
|
7
|
+
let(:dirname) { 'working-repo' }
|
|
8
|
+
|
|
9
|
+
let(:cacherepo) { R10K::Git::ShellGit::Cache.generate(remote) }
|
|
10
|
+
|
|
11
|
+
subject { described_class.new(basedir, dirname, cacherepo) }
|
|
12
|
+
|
|
13
|
+
it_behaves_like "a git thin repository"
|
|
14
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/git/shellgit/working_repository'
|
|
3
|
+
|
|
4
|
+
describe R10K::Git::ShellGit::WorkingRepository do
|
|
5
|
+
include_context 'Git integration'
|
|
6
|
+
|
|
7
|
+
let(:dirname) { 'working-repo' }
|
|
8
|
+
|
|
9
|
+
subject { described_class.new(basedir, dirname) }
|
|
10
|
+
|
|
11
|
+
it_behaves_like 'a git repository'
|
|
12
|
+
it_behaves_like 'a git working repository'
|
|
13
|
+
end
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/git'
|
|
3
|
+
require 'r10k/git/stateful_repository'
|
|
4
|
+
|
|
5
|
+
describe R10K::Git::StatefulRepository do
|
|
6
|
+
include_context 'Git integration'
|
|
7
|
+
|
|
8
|
+
let(:dirname) { 'working-repo' }
|
|
9
|
+
|
|
10
|
+
let(:cacherepo) { R10K::Git.cache.generate(remote) }
|
|
11
|
+
let(:thinrepo) { R10K::Git.thin_repository.new(basedir, dirname, cacherepo) }
|
|
12
|
+
let(:ref) { '0.9.x' }
|
|
13
|
+
|
|
14
|
+
subject { described_class.new(remote, basedir, dirname) }
|
|
15
|
+
|
|
16
|
+
describe 'status' do
|
|
17
|
+
describe "when the directory does not exist" do
|
|
18
|
+
it "is absent" do
|
|
19
|
+
expect(subject.status(ref)).to eq :absent
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "when the directory is not a git repository" do
|
|
24
|
+
it "is mismatched" do
|
|
25
|
+
thinrepo.path.mkdir
|
|
26
|
+
expect(subject.status(ref)).to eq :mismatched
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "when the directory has a .git file" do
|
|
31
|
+
it "is mismatched" do
|
|
32
|
+
thinrepo.path.mkdir
|
|
33
|
+
File.open("#{thinrepo.path}/.git", "w") {}
|
|
34
|
+
expect(subject.status(ref)).to eq :mismatched
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe "when the repository doesn't match the desired remote" do
|
|
39
|
+
it "is mismatched" do
|
|
40
|
+
thinrepo.clone(remote, {:ref => '1.0.0'})
|
|
41
|
+
allow(subject.repo).to receive(:origin).and_return('http://some.site/repo.git')
|
|
42
|
+
expect(subject.status(ref)).to eq :mismatched
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "when the wrong ref is checked out" do
|
|
47
|
+
it "is outdated" do
|
|
48
|
+
thinrepo.clone(remote, {:ref => '1.0.0'})
|
|
49
|
+
expect(subject.status(ref)).to eq :outdated
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe "when the ref is a branch and the cache is not synced" do
|
|
54
|
+
it "is outdated" do
|
|
55
|
+
thinrepo.clone(remote, {:ref => ref})
|
|
56
|
+
cacherepo.reset!
|
|
57
|
+
expect(subject.status(ref)).to eq :outdated
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "when the ref can't be resolved" do
|
|
62
|
+
let(:ref) { '1.1.x' }
|
|
63
|
+
|
|
64
|
+
it "is outdated" do
|
|
65
|
+
thinrepo.clone(remote, {:ref => '0.9.x'})
|
|
66
|
+
expect(subject.status(ref)).to eq :outdated
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe "when the workdir has local modifications" do
|
|
71
|
+
it "is dirty when workdir is up to date" do
|
|
72
|
+
thinrepo.clone(remote, {:ref => ref})
|
|
73
|
+
File.open(File.join(thinrepo.path, 'README.markdown'), 'a') { |f| f.write('local modifications!') }
|
|
74
|
+
|
|
75
|
+
expect(subject.status(ref)).to eq :dirty
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "is dirty when workdir is not up to date" do
|
|
79
|
+
thinrepo.clone(remote, {:ref => '1.0.0'})
|
|
80
|
+
File.open(File.join(thinrepo.path, 'README.markdown'), 'a') { |f| f.write('local modifications!') }
|
|
81
|
+
|
|
82
|
+
expect(subject.status(ref)).to eq :dirty
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe "if the right ref is checked out" do
|
|
87
|
+
it "is insync" do
|
|
88
|
+
thinrepo.clone(remote, {:ref => ref})
|
|
89
|
+
expect(subject.status(ref)).to eq :insync
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe "syncing" do
|
|
95
|
+
describe "when the ref is unresolvable" do
|
|
96
|
+
let(:ref) { '1.1.x' }
|
|
97
|
+
|
|
98
|
+
it "raises an error" do
|
|
99
|
+
expect {
|
|
100
|
+
subject.sync(ref)
|
|
101
|
+
}.to raise_error(R10K::Git::UnresolvableRefError)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe "when the repo is absent" do
|
|
106
|
+
it "creates the repo" do
|
|
107
|
+
subject.sync(ref)
|
|
108
|
+
expect(subject.status(ref)).to eq :insync
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe "when the repo is mismatched" do
|
|
113
|
+
it "removes and recreates the repo" do
|
|
114
|
+
thinrepo.path.mkdir
|
|
115
|
+
subject.sync(ref)
|
|
116
|
+
expect(subject.status(ref)).to eq :insync
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
describe "when the repo is out of date" do
|
|
121
|
+
it "updates the repository" do
|
|
122
|
+
thinrepo.clone(remote, {:ref => '1.0.0'})
|
|
123
|
+
subject.sync(ref)
|
|
124
|
+
expect(subject.status(ref)).to eq :insync
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
describe "when the workdir is dirty" do
|
|
129
|
+
before(:each) do
|
|
130
|
+
thinrepo.clone(remote, {:ref => ref})
|
|
131
|
+
File.open(File.join(thinrepo.path, 'README.markdown'), 'a') { |f| f.write('local modifications!') }
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context "when force == true" do
|
|
135
|
+
let(:force) { true }
|
|
136
|
+
|
|
137
|
+
it "warns and overwrites local modifications" do
|
|
138
|
+
expect(subject.logger).to receive(:warn).with(/overwriting local modifications/i)
|
|
139
|
+
|
|
140
|
+
subject.sync(ref, force)
|
|
141
|
+
|
|
142
|
+
expect(subject.status(ref)).to eq :insync
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
context "when force != true" do
|
|
147
|
+
let(:force) { false }
|
|
148
|
+
|
|
149
|
+
it "warns and does not overwrite local modifications" do
|
|
150
|
+
expect(subject.logger).to receive(:warn).with(/skipping.*due to local modifications/i)
|
|
151
|
+
|
|
152
|
+
subject.sync(ref, force)
|
|
153
|
+
|
|
154
|
+
expect(subject.status(ref)).to eq :dirty
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|