r10k 3.5.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|