chef-cli 5.6.11 → 5.6.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f99463373ae13f85a16df321c3bb756e8eba19d8e1e7f15b3ae3f2eb173253f2
4
- data.tar.gz: 9f7d1ebb555efa92cc22c8957f24b18f1bb823e19e140518838318584158b8c0
3
+ metadata.gz: 91bf4c20f2e571268b98a467e2f708ff7e87f5a6f1caddf6c1d2eaab0815e6a9
4
+ data.tar.gz: f337d8fefb2dfbc90cbb37f003b65948dffbf901918b81ddadd0c671df93547e
5
5
  SHA512:
6
- metadata.gz: c602f596eac142ce3fbf2f81dbdc987f22768e3b4c35fbb0c1d5615eb94eaba4085444ae4a7270986229c1ff90b4f81eddb36b87a1ae9db353c96f43f613d25d
7
- data.tar.gz: e2956dcc853d9a61e74ad243e9fd7f8a391687f5be8e82a72ba89408b1a97025ef1a5f274867ca4ff99f807dee0432bb76ec1a75a3ea478132253d5f965acc50
6
+ metadata.gz: 7fbf23fb835d00f629d14c1dfd1457874db6db968e2a9095d3869359aa73c8a8fd881fb6d0f98367e382482c63e8c035984270171be31510c7353ba47882df5f
7
+ data.tar.gz: 9d7737dc9edd87a309635c13de1819b7bf366612ed7a3f629adbe1ca8b8d6a0a840a2a4cf4de5dfe71ed2e211ef792f9f2f5f58077f51dba0c3582acb4b4265f
data/chef-cli.gemspec CHANGED
@@ -41,7 +41,7 @@ Gem::Specification.new do |gem|
41
41
 
42
42
  gem.add_dependency "mixlib-cli", ">= 1.7", "< 3.0"
43
43
  gem.add_dependency "mixlib-shellout", ">= 2.0", "< 4.0"
44
- gem.add_dependency "ffi-yajl", ">= 1.0", "< 3.0"
44
+ gem.add_dependency "ffi-yajl", ">= 1.0", "< 4.0"
45
45
  gem.add_dependency "minitar", "~> 0.6"
46
46
  gem.add_dependency "chef", ">= 16.0"
47
47
  gem.add_dependency "solve", "< 5.0", "> 2.0"
@@ -180,7 +180,11 @@ module ChefCLI
180
180
  end
181
181
 
182
182
  def cookbook_full_path
183
- File.expand_path(cookbook_name_or_path, Dir.pwd)
183
+ if !cookbook_name_or_path.nil? && !cookbook_name_or_path.empty?
184
+ File.expand_path(cookbook_name_or_path, Dir.pwd)
185
+ else
186
+ ""
187
+ end
184
188
  end
185
189
 
186
190
  def policy_mode?
@@ -205,6 +209,13 @@ module ChefCLI
205
209
  msg("Hyphens are discouraged in cookbook names as they may cause problems with custom resources. See https://docs.chef.io/workstation/ctl_chef/#chef-generate-cookbook for more information.")
206
210
  end
207
211
 
212
+ if !generator_cookbook_path.empty? &&
213
+ !cookbook_full_path.empty? &&
214
+ File.identical?(Pathname.new(cookbook_full_path).parent, generator_cookbook_path)
215
+ err("The generator and the cookbook cannot be in the same directory. Please specify a cookbook directory that is different from the generator's parent.")
216
+ @params_valid = false
217
+ end
218
+
208
219
  if config[:berks] && config[:policy]
209
220
  err("Berkshelf and Policyfiles are mutually exclusive. Please specify only one.")
210
221
  @params_valid = false
@@ -23,10 +23,17 @@ module ChefCLI
23
23
 
24
24
  include Helpers
25
25
 
26
+ @@git_memo = {}
27
+
26
28
  attr_reader :cookbook_path
27
29
 
30
+ def self.uncache
31
+ @@git_memo = {}
32
+ end
33
+
28
34
  def initialize(cookbook_path)
29
35
  @cookbook_path = cookbook_path
36
+ @repo_path = nil
30
37
  @unborn_branch = nil
31
38
  @unborn_branch_ref = nil
32
39
  end
@@ -111,8 +118,24 @@ module ChefCLI
111
118
  end
112
119
 
113
120
  def git(subcommand, options = {})
114
- options = { cwd: cookbook_path }.merge(options)
115
- system_command("git #{subcommand}", options)
121
+ # memoize commands per-repo
122
+ repo_path = get_repo_path
123
+ memo_key = [repo_path, subcommand, options]
124
+ if @@git_memo.key?(memo_key)
125
+ rv = @@git_memo[memo_key]
126
+ else
127
+ options = { cwd: cookbook_path }.merge(options)
128
+ rv = system_command("git #{subcommand}", options)
129
+ @@git_memo[memo_key] = rv
130
+ end
131
+ rv
132
+ end
133
+
134
+ def get_repo_path
135
+ unless @repo_path
136
+ @repo_path = system_command("git rev-parse --show-toplevel", { cwd: cookbook_path }).stdout.strip
137
+ end
138
+ @repo_path
116
139
  end
117
140
 
118
141
  def detect_current_branch
@@ -16,5 +16,5 @@
16
16
  #
17
17
 
18
18
  module ChefCLI
19
- VERSION = "5.6.11".freeze
19
+ VERSION = "5.6.13".freeze
20
20
  end
@@ -24,15 +24,13 @@ shared_examples_for "custom generator cookbook" do
24
24
  end
25
25
  end
26
26
 
27
- before do
27
+ it "configures the generator context" do
28
28
  reset_tempdir
29
29
  code_generator.read_and_validate_params
30
30
  allow(code_generator.config_loader).to receive(:load)
31
- end
32
31
 
33
- it "configures the generator context" do
34
32
  code_generator.setup_context
35
- expect(generator_context.cookbook_name).to eq(generator_arg)
33
+ expect(generator_context.cookbook_name).to eq(File.basename(generator_arg))
36
34
  expect(code_generator.chef_runner.cookbook_path).to eq(tempdir)
37
35
  expect(code_generator.chef_runner.run_list).to eq(["recipe[a_generator_cookbook::#{generator_name}]"])
38
36
  end
@@ -55,19 +53,33 @@ shared_examples_for "custom generator cookbook" do
55
53
  end
56
54
 
57
55
  before do
56
+ reset_tempdir
57
+ code_generator.read_and_validate_params
58
+ allow(code_generator.config_loader).to receive(:load)
58
59
  allow(code_generator).to receive(:chefcli_config).and_return(chefcli_config)
59
60
  end
60
61
 
61
62
  it "configures the generator context" do
62
63
  code_generator.setup_context
63
- expect(generator_context.cookbook_name).to eq(generator_arg)
64
- expect(code_generator.chef_runner.cookbook_path).to eq(tempdir)
65
- expect(code_generator.chef_runner.run_list).to eq(["recipe[a_generator_cookbook::#{generator_name}]"])
64
+ expect(generator_context.cookbook_name).to eq(File.basename(generator_arg))
65
+ expect(code_generator.chef_runner.cookbook_path).to eq(File.expand_path("lib/chef-cli/skeletons", project_root))
66
+ expect(code_generator.chef_runner.run_list).to eq(["recipe[code_generator::#{generator_name}]"])
66
67
  end
67
68
  end
68
69
 
69
70
  context "with an invalid generator-cookbook path" do
70
71
 
72
+ let(:argv) { ["new_cookbook", "--generator-cookbook", "#{tempdir}/nested/a_generator_cookbook"] }
73
+
74
+ before do
75
+ reset_tempdir
76
+ FileUtils.mkdir_p("#{tempdir}/nested")
77
+ FileUtils.cp_r(default_generator_cookbook_path, "#{tempdir}/nested/")
78
+
79
+ code_generator.read_and_validate_params
80
+ allow(code_generator.config_loader).to receive(:load)
81
+ end
82
+
71
83
  it "fails with an informative error" do
72
84
  Dir.chdir(tempdir) do
73
85
  allow(code_generator.chef_runner).to receive(:stdout).and_return(stdout_io)
@@ -88,6 +100,10 @@ shared_examples_for "custom generator cookbook" do
88
100
  let(:metadata_file) { File.join(generator_cookbook_path, "metadata.rb") }
89
101
 
90
102
  before do
103
+ reset_tempdir
104
+ code_generator.read_and_validate_params
105
+ allow(code_generator.config_loader).to receive(:load)
106
+
91
107
  FileUtils.cp_r(default_generator_cookbook_path, generator_cookbook_path)
92
108
 
93
109
  # have to update metadata with the correct name
@@ -95,7 +111,7 @@ shared_examples_for "custom generator cookbook" do
95
111
  end
96
112
 
97
113
  it "creates the new files" do
98
- expect(code_generator.chef_runner.cookbook_path).to eq(tempdir)
114
+ expect(code_generator.chef_runner.cookbook_path).to eq("#{tempdir}")
99
115
  expect(code_generator.chef_runner.run_list).to eq(["recipe[a_generator_cookbook::#{generator_name}]"])
100
116
 
101
117
  Dir.chdir(tempdir) do
@@ -108,11 +124,16 @@ shared_examples_for "custom generator cookbook" do
108
124
 
109
125
  context "with a generator-cookbook path to a directory containing a 'code_generator' cookbook" do
110
126
 
127
+ let(:argv) { ["#{tempdir}/new_cookbook", "--generator-cookbook", generator_cookbook_path] }
128
+
111
129
  before do
130
+ reset_tempdir
112
131
  FileUtils.mkdir_p(generator_cookbook_path)
113
132
  FileUtils.cp_r(default_generator_cookbook_path, generator_cookbook_path)
114
133
 
115
134
  allow(code_generator).to receive(:stderr).and_return(stderr_io)
135
+ code_generator.read_and_validate_params
136
+ allow(code_generator.config_loader).to receive(:load)
116
137
  end
117
138
 
118
139
  it "creates the new_files (and warns about deprecated usage)" do
@@ -121,7 +142,7 @@ shared_examples_for "custom generator cookbook" do
121
142
  Dir.chdir(tempdir) do
122
143
  code_generator.run
123
144
  end
124
- generated_files = Dir.glob("#{tempdir}/#{generator_arg}/**/*", File::FNM_DOTMATCH)
145
+ generated_files = Dir.glob("#{tempdir}/new_cookbook/**/*", File::FNM_DOTMATCH)
125
146
  expected_cookbook_files.each do |expected_file|
126
147
  expect(generated_files).to include(expected_file)
127
148
  end
@@ -152,6 +152,12 @@ describe ChefCLI::Command::GeneratorCommands::Cookbook do
152
152
  expect(stderr_io.string).to include(message)
153
153
  end
154
154
 
155
+ it "errors if cookbook parent folder is same as generator parent folder" do
156
+ expect(with_argv(%w{ my_cookbook -g my_generator }).run).to eq(1)
157
+ message = "The generator and the cookbook cannot be in the same directory. Please specify a cookbook directory that is different from the generator's parent."
158
+ expect(stderr_io.string).to include(message)
159
+ end
160
+
155
161
  it "warns if a hyphenated cookbook name is passed" do
156
162
  expect(with_argv(%w{my-cookbook}).run).to eq(0)
157
163
  message = "Hyphens are discouraged in cookbook names as they may cause problems with custom resources. See https://docs.chef.io/workstation/ctl_chef/#chef-generate-cookbook for more information."
@@ -25,7 +25,8 @@ describe ChefCLI::CookbookProfiler::Git do
25
25
 
26
26
  include ChefCLI::Helpers
27
27
 
28
- let(:git_profiler) do
28
+ let!(:git_profiler) do
29
+ ChefCLI::CookbookProfiler::Git.uncache
29
30
  ChefCLI::CookbookProfiler::Git.new(cookbook_path)
30
31
  end
31
32
 
@@ -50,6 +50,10 @@ describe ChefCLI::PolicyfileLock, "building a lockfile", :skip_on_windows do
50
50
  ChefCLI::Policyfile::StorageConfig.new( cache_path: cache_path, relative_paths_root: relative_paths_root )
51
51
  end
52
52
 
53
+ let!(:git_memo) do
54
+ ChefCLI::CookbookProfiler::Git.uncache
55
+ end
56
+
53
57
  context "when a cached cookbook omits the cache key" do
54
58
 
55
59
  let(:policyfile_lock) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.11
4
+ version: 5.6.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-27 00:00:00.000000000 Z
11
+ date: 2023-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-cli
@@ -59,7 +59,7 @@ dependencies:
59
59
  version: '1.0'
60
60
  - - "<"
61
61
  - !ruby/object:Gem::Version
62
- version: '3.0'
62
+ version: '4.0'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
@@ -69,7 +69,7 @@ dependencies:
69
69
  version: '1.0'
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
- version: '3.0'
72
+ version: '4.0'
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: minitar
75
75
  requirement: !ruby/object:Gem::Requirement