berkshelf 2.0.18 → 3.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/.ruby-version +1 -1
- data/.travis.yml +4 -1
- data/CHANGELOG.md +2 -26
- data/Gemfile +12 -2
- data/README.md +9 -1
- data/berkshelf.gemspec +9 -18
- data/bin/berks +3 -13
- data/features/apply_command.feature +11 -9
- data/features/berksfile.feature +8 -10
- data/features/config.feature +1 -2
- data/features/configure_command.feature +13 -14
- data/features/contingent_command.feature +13 -1
- data/features/cookbook_command.feature +2 -4
- data/features/groups_install.feature +10 -2
- data/features/help.feature +1 -1
- data/features/init_command.feature +5 -7
- data/features/install_command.feature +157 -228
- data/features/json_formatter.feature +27 -15
- data/features/licenses.feature +18 -12
- data/features/list_command.feature +6 -1
- data/features/lockfile.feature +116 -72
- data/features/outdated_command.feature +3 -47
- data/features/package_command.feature +10 -7
- data/features/shelf/show.feature +2 -2
- data/features/shelf/uninstall.feature +2 -2
- data/features/show_command.feature +10 -3
- data/features/step_definitions/chef/config_steps.rb +12 -0
- data/features/step_definitions/chef_server_steps.rb +16 -16
- data/features/step_definitions/cli_steps.rb +3 -79
- data/features/step_definitions/config_steps.rb +43 -0
- data/features/step_definitions/environment_steps.rb +7 -0
- data/features/step_definitions/filesystem_steps.rb +12 -57
- data/features/step_definitions/gem_steps.rb +1 -2
- data/features/step_definitions/json_steps.rb +3 -1
- data/features/step_definitions/lockfile_steps.rb +4 -0
- data/features/step_definitions/utility_steps.rb +0 -19
- data/features/support/aruba.rb +12 -0
- data/features/support/env.rb +52 -57
- data/features/update_command.feature +37 -23
- data/features/upload_command.feature +96 -160
- data/generator_files/Berksfile.erb +2 -1
- data/generator_files/Vagrantfile.erb +3 -0
- data/generator_files/default_test.rb.erb +1 -1
- data/generator_files/helpers.rb.erb +1 -1
- data/lib/berkshelf.rb +43 -24
- data/lib/berkshelf/api_client.rb +67 -0
- data/lib/berkshelf/api_client/remote_cookbook.rb +42 -0
- data/lib/berkshelf/berksfile.rb +232 -420
- data/lib/berkshelf/cached_cookbook.rb +22 -10
- data/lib/berkshelf/chef/config.rb +1 -0
- data/lib/berkshelf/cli.rb +66 -68
- data/lib/berkshelf/commands/shelf.rb +1 -1
- data/lib/berkshelf/community_rest.rb +10 -17
- data/lib/berkshelf/config.rb +23 -27
- data/lib/berkshelf/cookbook_generator.rb +3 -4
- data/lib/berkshelf/cookbook_store.rb +74 -17
- data/lib/berkshelf/core_ext/file.rb +2 -2
- data/lib/berkshelf/core_ext/pathname.rb +7 -5
- data/lib/berkshelf/{cookbook_source.rb → dependency.rb} +47 -67
- data/lib/berkshelf/downloader.rb +49 -106
- data/lib/berkshelf/errors.rb +64 -71
- data/lib/berkshelf/formatters.rb +11 -9
- data/lib/berkshelf/formatters/human_readable.rb +9 -9
- data/lib/berkshelf/formatters/json.rb +14 -4
- data/lib/berkshelf/init_generator.rb +3 -3
- data/lib/berkshelf/installer.rb +136 -0
- data/lib/berkshelf/location.rb +91 -131
- data/lib/berkshelf/locations/git_location.rb +9 -11
- data/lib/berkshelf/locations/github_location.rb +1 -1
- data/lib/berkshelf/locations/path_location.rb +10 -27
- data/lib/berkshelf/lockfile.rb +92 -70
- data/lib/berkshelf/logger.rb +4 -7
- data/lib/berkshelf/mixin/config.rb +21 -4
- data/lib/berkshelf/resolver.rb +60 -150
- data/lib/berkshelf/resolver/graph.rb +44 -0
- data/lib/berkshelf/source.rb +55 -0
- data/lib/berkshelf/source_uri.rb +38 -0
- data/lib/berkshelf/version.rb +1 -1
- data/spec/config/knife.rb +1 -1
- data/spec/fixtures/cassettes/Berkshelf_Resolver/_initialize/adds_the_dependencies_of_the_dependency_as_dependencies.yml +3694 -0
- data/spec/fixtures/cookbooks/example_cookbook/Berksfile.lock +1 -1
- data/spec/fixtures/lockfiles/default.lock +1 -1
- data/spec/spec_helper.rb +20 -121
- data/spec/support/chef_api.rb +3 -4
- data/spec/support/chef_server.rb +20 -11
- data/spec/support/git.rb +127 -0
- data/spec/support/kitchen.rb +12 -0
- data/spec/support/path_helpers.rb +69 -0
- data/spec/unit/berkshelf/api_client/remote_cookbook_spec.rb +23 -0
- data/spec/unit/berkshelf/api_client_spec.rb +57 -0
- data/spec/unit/berkshelf/berksfile_spec.rb +206 -324
- data/spec/unit/berkshelf/cached_cookbook_spec.rb +73 -38
- data/spec/unit/berkshelf/community_rest_spec.rb +30 -71
- data/spec/unit/berkshelf/config_spec.rb +3 -14
- data/spec/unit/berkshelf/cookbook_generator_spec.rb +1 -2
- data/spec/unit/berkshelf/cookbook_store_spec.rb +12 -7
- data/spec/unit/berkshelf/dependency_spec.rb +285 -0
- data/spec/unit/berkshelf/downloader_spec.rb +4 -183
- data/spec/unit/berkshelf/formatters/null_spec.rb +1 -1
- data/spec/unit/berkshelf/formatters_spec.rb +4 -2
- data/spec/unit/berkshelf/git_spec.rb +15 -15
- data/spec/unit/berkshelf/installer_spec.rb +39 -0
- data/spec/unit/berkshelf/location_spec.rb +87 -114
- data/spec/unit/berkshelf/locations/git_location_spec.rb +41 -53
- data/spec/unit/berkshelf/locations/path_location_spec.rb +13 -23
- data/spec/unit/berkshelf/lockfile_spec.rb +38 -40
- data/spec/unit/berkshelf/resolver/graph_spec.rb +44 -0
- data/spec/unit/berkshelf/resolver_spec.rb +34 -83
- data/spec/unit/berkshelf/source_spec.rb +23 -0
- data/spec/unit/berkshelf/source_uri_spec.rb +29 -0
- metadata +149 -188
- checksums.yaml +0 -7
- data/features/default_locations.feature +0 -127
- data/features/step_definitions/berksfile_steps.rb +0 -8
- data/features/step_definitions/configure_cli_steps.rb +0 -19
- data/features/vendor_install.feature +0 -19
- data/lib/berkshelf/core_ext/openuri.rb +0 -36
- data/lib/berkshelf/core_ext/rbzip2.rb +0 -8
- data/lib/berkshelf/locations/chef_api_location.rb +0 -228
- data/lib/berkshelf/locations/site_location.rb +0 -92
- data/lib/berkshelf/test.rb +0 -35
- data/spec/knife.rb.sample +0 -12
- data/spec/support/test_generators.rb +0 -27
- data/spec/unit/berkshelf/cli_spec.rb +0 -16
- data/spec/unit/berkshelf/cookbook_source_spec.rb +0 -358
- data/spec/unit/berkshelf/core_ext/pathname_spec.rb +0 -46
- data/spec/unit/berkshelf/locations/chef_api_location_spec.rb +0 -139
- data/spec/unit/berkshelf/locations/site_location_spec.rb +0 -19
@@ -3,27 +3,36 @@ Feature: --format json
|
|
3
3
|
I want to be able to get all output in JSON format
|
4
4
|
So I can easily parse the output in scripts
|
5
5
|
|
6
|
+
Background:
|
7
|
+
Given the Berkshelf API server's cache is empty
|
8
|
+
And the Chef Server is empty
|
9
|
+
And the cookbook store is empty
|
10
|
+
|
6
11
|
Scenario: JSON output installing a cookbook from the default location
|
7
12
|
Given I write to "Berksfile" with:
|
8
13
|
"""
|
9
|
-
|
14
|
+
source "http://localhost:26210"
|
15
|
+
|
16
|
+
cookbook 'berkshelf', '1.0.0'
|
10
17
|
"""
|
18
|
+
And the Chef Server has cookbooks:
|
19
|
+
| berkshelf | 1.0.0 |
|
20
|
+
And the Berkshelf API server cache is up to date
|
11
21
|
When I successfully run `berks install --format json`
|
12
|
-
Then the
|
22
|
+
Then the output should contain JSON:
|
13
23
|
"""
|
14
24
|
{
|
15
25
|
"cookbooks": [
|
16
26
|
{
|
17
27
|
"version": "1.0.0",
|
18
|
-
"
|
19
|
-
"name": "berkshelf-cookbook-fixture"
|
28
|
+
"name": "berkshelf"
|
20
29
|
}
|
21
30
|
],
|
22
31
|
"errors": [
|
23
32
|
|
24
33
|
],
|
25
34
|
"messages": [
|
26
|
-
|
35
|
+
"building universe..."
|
27
36
|
]
|
28
37
|
}
|
29
38
|
"""
|
@@ -33,10 +42,12 @@ Feature: --format json
|
|
33
42
|
| berkshelf-cookbook-fixture | 1.0.0 |
|
34
43
|
And I write to "Berksfile" with:
|
35
44
|
"""
|
45
|
+
source "http://localhost:26210"
|
46
|
+
|
36
47
|
cookbook 'berkshelf-cookbook-fixture', '1.0.0'
|
37
48
|
"""
|
38
49
|
When I successfully run `berks install --format json`
|
39
|
-
Then the
|
50
|
+
Then the output should contain JSON:
|
40
51
|
"""
|
41
52
|
{
|
42
53
|
"cookbooks": [
|
@@ -49,19 +60,20 @@ Feature: --format json
|
|
49
60
|
|
50
61
|
],
|
51
62
|
"messages": [
|
52
|
-
|
63
|
+
"building universe..."
|
53
64
|
]
|
54
65
|
}
|
55
66
|
"""
|
56
67
|
|
57
|
-
@chef_server
|
58
68
|
Scenario: JSON output when running the upload command
|
59
|
-
Given
|
60
|
-
|
61
|
-
|
62
|
-
|
69
|
+
Given I write to "Berksfile" with:
|
70
|
+
"""
|
71
|
+
source "http://localhost:26210"
|
72
|
+
|
73
|
+
cookbook 'example_cookbook', path: '../../spec/fixtures/cookbooks/example_cookbook-0.5.0'
|
74
|
+
"""
|
63
75
|
When I successfully run `berks upload --format json`
|
64
|
-
Then the
|
76
|
+
Then the output should contain JSON:
|
65
77
|
"""
|
66
78
|
{
|
67
79
|
"cookbooks": [
|
@@ -69,14 +81,14 @@ Feature: --format json
|
|
69
81
|
"name": "example_cookbook",
|
70
82
|
"version": "0.5.0",
|
71
83
|
"location": "../../spec/fixtures/cookbooks/example_cookbook-0.5.0",
|
72
|
-
"uploaded_to": "http://localhost:
|
84
|
+
"uploaded_to": "http://localhost:26310/"
|
73
85
|
}
|
74
86
|
],
|
75
87
|
"errors": [
|
76
88
|
|
77
89
|
],
|
78
90
|
"messages": [
|
79
|
-
|
91
|
+
"building universe..."
|
80
92
|
]
|
81
93
|
}
|
82
94
|
"""
|
data/features/licenses.feature
CHANGED
@@ -3,12 +3,18 @@ Feature: Installing cookbooks with specific licenses
|
|
3
3
|
I want to ensure my company only uses cookbooks that fall in our legal realm
|
4
4
|
So that I can safely install and legally use community cookbooks
|
5
5
|
|
6
|
+
Background:
|
7
|
+
Given the Berkshelf API server's cache is empty
|
8
|
+
And the Chef Server is empty
|
9
|
+
And the cookbook store is empty
|
10
|
+
|
6
11
|
Scenario: With licenses defined
|
7
12
|
Given the cookbook store has the cookbooks:
|
8
13
|
| berkshelf-cookbook-fixture | 0.1.0 | mit |
|
9
14
|
And I write to "Berksfile" with:
|
10
15
|
"""
|
11
|
-
|
16
|
+
source "http://localhost:26210"
|
17
|
+
|
12
18
|
cookbook 'berkshelf-cookbook-fixture', '~> 0.1'
|
13
19
|
"""
|
14
20
|
And I have a Berkshelf config file containing:
|
@@ -22,14 +28,14 @@ Feature: Installing cookbooks with specific licenses
|
|
22
28
|
"""
|
23
29
|
is not in your list of allowed licenses
|
24
30
|
"""
|
25
|
-
And the exit status should be 0
|
26
31
|
|
27
32
|
Scenario: With a license that is not listed
|
28
33
|
Given the cookbook store has the cookbooks:
|
29
34
|
| berkshelf-cookbook-fixture | 0.1.0 | mit |
|
30
35
|
And I write to "Berksfile" with:
|
31
36
|
"""
|
32
|
-
|
37
|
+
source "http://localhost:26210"
|
38
|
+
|
33
39
|
cookbook 'berkshelf-cookbook-fixture', '~> 0.1'
|
34
40
|
"""
|
35
41
|
And I have a Berkshelf config file containing:
|
@@ -43,14 +49,14 @@ Feature: Installing cookbooks with specific licenses
|
|
43
49
|
"""
|
44
50
|
'mit' is not in your list of allowed licenses
|
45
51
|
"""
|
46
|
-
And the exit status should be 0
|
47
52
|
|
48
53
|
Scenario: With raise_license_exception defined
|
49
54
|
Given the cookbook store has the cookbooks:
|
50
55
|
| berkshelf-cookbook-fixture | 0.1.0 | mit |
|
51
56
|
And I write to "Berksfile" with:
|
52
57
|
"""
|
53
|
-
|
58
|
+
source "http://localhost:26210"
|
59
|
+
|
54
60
|
cookbook 'berkshelf-cookbook-fixture', '~> 0.1'
|
55
61
|
"""
|
56
62
|
And I have a Berkshelf config file containing:
|
@@ -65,14 +71,14 @@ Feature: Installing cookbooks with specific licenses
|
|
65
71
|
"""
|
66
72
|
is not in your list of allowed licenses
|
67
73
|
"""
|
68
|
-
And the exit status should be 0
|
69
74
|
|
70
75
|
Scenario: With a license that is not listed
|
71
76
|
Given the cookbook store has the cookbooks:
|
72
77
|
| berkshelf-cookbook-fixture | 0.1.0 | mit |
|
73
78
|
And I write to "Berksfile" with:
|
74
79
|
"""
|
75
|
-
|
80
|
+
source "http://localhost:26210"
|
81
|
+
|
76
82
|
cookbook 'berkshelf-cookbook-fixture', '~> 0.1'
|
77
83
|
"""
|
78
84
|
And I have a Berkshelf config file containing:
|
@@ -87,15 +93,16 @@ Feature: Installing cookbooks with specific licenses
|
|
87
93
|
"""
|
88
94
|
'mit' is not in your list of allowed licenses
|
89
95
|
"""
|
90
|
-
And the
|
96
|
+
And the exit status should be "LicenseNotAllowed"
|
91
97
|
|
92
98
|
Scenario: With a :path location
|
93
99
|
Given the cookbook store has the cookbooks:
|
94
100
|
| fake | 0.1.0 | mit |
|
95
101
|
And I write to "Berksfile" with:
|
96
102
|
"""
|
97
|
-
|
98
|
-
|
103
|
+
source "http://localhost:26210"
|
104
|
+
|
105
|
+
cookbook 'fake', path: '../../spec/tmp/berkshelf/cookbooks/fake-0.1.0'
|
99
106
|
"""
|
100
107
|
And I have a Berkshelf config file containing:
|
101
108
|
"""
|
@@ -104,9 +111,8 @@ Feature: Installing cookbooks with specific licenses
|
|
104
111
|
"raise_license_exception": true
|
105
112
|
}
|
106
113
|
"""
|
107
|
-
When I run `berks install`
|
114
|
+
When I successfully run `berks install`
|
108
115
|
Then the output should not contain:
|
109
116
|
"""
|
110
117
|
'mit' is not in your list of allowed licenses
|
111
118
|
"""
|
112
|
-
And the exit status should be 0
|
@@ -9,6 +9,8 @@ Feature: Listing cookbooks defined by a Berksfile
|
|
9
9
|
| fake2 | 1.0.1 |
|
10
10
|
Given I write to "Berksfile" with:
|
11
11
|
"""
|
12
|
+
source "http://localhost:26210"
|
13
|
+
|
12
14
|
cookbook 'fake1', '1.0.0'
|
13
15
|
cookbook 'fake2', '1.0.1'
|
14
16
|
"""
|
@@ -22,7 +24,10 @@ Feature: Listing cookbooks defined by a Berksfile
|
|
22
24
|
And the exit status should be 0
|
23
25
|
|
24
26
|
Scenario: Running the list command with no sources defined
|
25
|
-
Given
|
27
|
+
Given I write to "Berksfile" with:
|
28
|
+
"""
|
29
|
+
source "http://localhost:26210"
|
30
|
+
"""
|
26
31
|
When I successfully run `berks list`
|
27
32
|
Then the output should contain:
|
28
33
|
"""
|
data/features/lockfile.feature
CHANGED
@@ -8,26 +8,30 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
8
8
|
| fake | 1.0.0 |
|
9
9
|
And I write to "Berksfile" with:
|
10
10
|
"""
|
11
|
+
source "http://localhost:26210"
|
12
|
+
|
11
13
|
cookbook 'fake', '1.0.0'
|
12
14
|
"""
|
13
15
|
When I successfully run `berks install`
|
14
16
|
Then the file "Berksfile.lock" should contain JSON:
|
15
17
|
"""
|
16
18
|
{
|
17
|
-
"
|
19
|
+
"dependencies":{
|
18
20
|
"fake":{
|
21
|
+
"constraint":"= 1.0.0",
|
19
22
|
"locked_version":"1.0.0"
|
20
23
|
}
|
21
24
|
}
|
22
25
|
}
|
23
26
|
"""
|
24
27
|
|
25
|
-
Scenario: Wiring the Berksfile.lock when
|
28
|
+
Scenario: Wiring the Berksfile.lock when a 1.0 lockfile is present
|
26
29
|
Given the cookbook store has the cookbooks:
|
27
30
|
| fake | 1.0.0 |
|
28
31
|
And I write to "Berksfile" with:
|
29
32
|
"""
|
30
|
-
|
33
|
+
source "http://localhost:26210"
|
34
|
+
|
31
35
|
cookbook 'fake', '1.0.0'
|
32
36
|
"""
|
33
37
|
And I write to "Berksfile.lock" with:
|
@@ -35,12 +39,46 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
35
39
|
cookbook 'fake', :locked_version => '1.0.0'
|
36
40
|
"""
|
37
41
|
When I successfully run `berks install`
|
38
|
-
Then the output should
|
42
|
+
Then the output should warn about the old lockfile format
|
43
|
+
Then the file "Berksfile.lock" should contain JSON:
|
44
|
+
"""
|
45
|
+
{
|
46
|
+
"dependencies": {
|
47
|
+
"fake": {
|
48
|
+
"constraint": "= 1.0.0",
|
49
|
+
"locked_version": "1.0.0"
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
"""
|
54
|
+
|
55
|
+
Scenario: Wiring the Berksfile.lock when a 2.0 lockfile is present
|
56
|
+
Given the cookbook store has the cookbooks:
|
57
|
+
| fake | 1.0.0 |
|
58
|
+
And I write to "Berksfile" with:
|
59
|
+
"""
|
60
|
+
source "http://localhost:26210"
|
61
|
+
|
62
|
+
cookbook 'fake', '1.0.0'
|
63
|
+
"""
|
64
|
+
And I write to "Berksfile.lock" with:
|
65
|
+
"""
|
66
|
+
{
|
67
|
+
"dependencies": {
|
68
|
+
"fake": {
|
69
|
+
"constraint": "= 1.0.0",
|
70
|
+
"locked_version": "1.0.0"
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}
|
74
|
+
"""
|
75
|
+
When I successfully run `berks install`
|
39
76
|
Then the file "Berksfile.lock" should contain JSON:
|
40
77
|
"""
|
41
78
|
{
|
42
|
-
"
|
79
|
+
"dependencies": {
|
43
80
|
"fake": {
|
81
|
+
"constraint": "= 1.0.0",
|
44
82
|
"locked_version": "1.0.0"
|
45
83
|
}
|
46
84
|
}
|
@@ -51,19 +89,22 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
51
89
|
Given a cookbook named "fake"
|
52
90
|
And I write to "Berksfile" with:
|
53
91
|
"""
|
92
|
+
source "http://localhost:26210"
|
93
|
+
|
54
94
|
cookbook 'fake', '0.0.0', path: './fake'
|
55
95
|
"""
|
56
|
-
And I
|
96
|
+
And I write to "Berksfile.lock" with:
|
57
97
|
"""
|
58
|
-
cookbook 'fake', :locked_version => '0.0.0', path: '
|
98
|
+
cookbook 'fake', :locked_version => '0.0.0', path: '../../tmp/aruba/fake'
|
59
99
|
"""
|
60
100
|
When I successfully run `berks install`
|
61
|
-
Then the output should
|
101
|
+
Then the output should warn about the old lockfile format
|
62
102
|
Then the file "Berksfile.lock" should contain JSON:
|
63
103
|
"""
|
64
104
|
{
|
65
|
-
"
|
105
|
+
"dependencies":{
|
66
106
|
"fake":{
|
107
|
+
"constraint":"= 0.0.0",
|
67
108
|
"path":"./fake"
|
68
109
|
}
|
69
110
|
}
|
@@ -75,12 +116,14 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
75
116
|
| fake | 1.0.0 |
|
76
117
|
And I write to "Berksfile" with:
|
77
118
|
"""
|
119
|
+
source "http://localhost:26210"
|
120
|
+
|
78
121
|
cookbook 'fake'
|
79
122
|
"""
|
80
123
|
And I write to "Berksfile.lock" with:
|
81
124
|
"""
|
82
125
|
{
|
83
|
-
"
|
126
|
+
"dependencies":{
|
84
127
|
"non-existent":{
|
85
128
|
"path":"/this/path/does/not/exist"
|
86
129
|
}
|
@@ -91,14 +134,13 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
91
134
|
Then the file "Berksfile.lock" should contain JSON:
|
92
135
|
"""
|
93
136
|
{
|
94
|
-
"
|
137
|
+
"dependencies":{
|
95
138
|
"fake":{
|
96
139
|
"locked_version":"1.0.0"
|
97
140
|
}
|
98
141
|
}
|
99
142
|
}
|
100
143
|
"""
|
101
|
-
And the exit status should be 0
|
102
144
|
|
103
145
|
Scenario: Installing a cookbook with dependencies
|
104
146
|
Given the cookbook store has the cookbooks:
|
@@ -107,18 +149,21 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
107
149
|
| dep | ~> 1.0.0 |
|
108
150
|
And I write to "Berksfile" with:
|
109
151
|
"""
|
152
|
+
source "http://localhost:26210"
|
153
|
+
|
110
154
|
cookbook 'fake', '1.0.0'
|
111
155
|
"""
|
112
156
|
When I successfully run `berks install`
|
113
157
|
Then the file "Berksfile.lock" should contain JSON:
|
114
158
|
"""
|
115
159
|
{
|
116
|
-
"
|
160
|
+
"dependencies": {
|
117
161
|
"fake":{
|
118
|
-
"
|
162
|
+
"constraint": "= 1.0.0",
|
163
|
+
"locked_version": "1.0.0"
|
119
164
|
},
|
120
165
|
"dep":{
|
121
|
-
"locked_version":"1.0.0"
|
166
|
+
"locked_version": "1.0.0"
|
122
167
|
}
|
123
168
|
}
|
124
169
|
}
|
@@ -129,14 +174,16 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
129
174
|
| berkshelf-cookbook-fixture | 1.0.0 |
|
130
175
|
And I write to "Berksfile" with:
|
131
176
|
"""
|
132
|
-
|
177
|
+
source "http://localhost:26210"
|
178
|
+
|
133
179
|
cookbook 'berkshelf-cookbook-fixture', '~> 1.0.0'
|
134
180
|
"""
|
135
181
|
And I write to "Berksfile.lock" with:
|
136
182
|
"""
|
137
183
|
{
|
138
|
-
"
|
184
|
+
"dependencies":{
|
139
185
|
"berkshelf-cookbook-fixture":{
|
186
|
+
"constraint":"~> 1.0.0",
|
140
187
|
"locked_version":"1.0.0"
|
141
188
|
}
|
142
189
|
}
|
@@ -146,8 +193,9 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
146
193
|
Then the file "Berksfile.lock" should contain JSON:
|
147
194
|
"""
|
148
195
|
{
|
149
|
-
"
|
196
|
+
"dependencies":{
|
150
197
|
"berkshelf-cookbook-fixture":{
|
198
|
+
"constraint":"~> 1.0.0",
|
151
199
|
"locked_version":"1.0.0"
|
152
200
|
}
|
153
201
|
}
|
@@ -160,14 +208,16 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
160
208
|
| berkshelf-cookbook-fixture | 1.0.0 |
|
161
209
|
And I write to "Berksfile" with:
|
162
210
|
"""
|
163
|
-
|
211
|
+
source "http://localhost:26210"
|
212
|
+
|
164
213
|
cookbook 'berkshelf-cookbook-fixture', '~> 0.1'
|
165
214
|
"""
|
166
215
|
And I write to "Berksfile.lock" with:
|
167
216
|
"""
|
168
217
|
{
|
169
|
-
"
|
218
|
+
"dependencies":{
|
170
219
|
"berkshelf-cookbook-fixture":{
|
220
|
+
"constraint":"~> 0.1",
|
171
221
|
"locked_version":"0.1.0"
|
172
222
|
}
|
173
223
|
}
|
@@ -177,8 +227,9 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
177
227
|
Then the file "Berksfile.lock" should contain JSON:
|
178
228
|
"""
|
179
229
|
{
|
180
|
-
"
|
230
|
+
"dependencies":{
|
181
231
|
"berkshelf-cookbook-fixture":{
|
232
|
+
"constraint":"~> 0.1",
|
182
233
|
"locked_version":"0.2.0"
|
183
234
|
}
|
184
235
|
}
|
@@ -190,14 +241,16 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
190
241
|
| berkshelf-cookbook-fixture | 1.0.0 |
|
191
242
|
And I write to "Berksfile" with:
|
192
243
|
"""
|
193
|
-
|
244
|
+
source "http://localhost:26210"
|
245
|
+
|
194
246
|
cookbook 'berkshelf-cookbook-fixture', '1.0.0'
|
195
247
|
"""
|
196
248
|
And I write to "Berksfile.lock" with:
|
197
249
|
"""
|
198
250
|
{
|
199
|
-
"
|
251
|
+
"dependencies":{
|
200
252
|
"berkshelf-cookbook-fixture":{
|
253
|
+
"constraint":"= 1.0.0",
|
201
254
|
"locked_version":"1.0.0"
|
202
255
|
}
|
203
256
|
}
|
@@ -207,8 +260,9 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
207
260
|
Then the file "Berksfile.lock" should contain JSON:
|
208
261
|
"""
|
209
262
|
{
|
210
|
-
"
|
263
|
+
"dependencies":{
|
211
264
|
"berkshelf-cookbook-fixture":{
|
265
|
+
"constraint":"= 1.0.0",
|
212
266
|
"locked_version":"1.0.0"
|
213
267
|
}
|
214
268
|
}
|
@@ -217,17 +271,18 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
217
271
|
|
218
272
|
Scenario: Updating a Berksfile.lock with a git location
|
219
273
|
Given the cookbook store has the cookbooks:
|
220
|
-
| berkshelf-cookbook-fixture |
|
274
|
+
| berkshelf-cookbook-fixture | 1.0.0 |
|
221
275
|
And I write to "Berksfile" with:
|
222
276
|
"""
|
223
|
-
|
277
|
+
source "http://localhost:26210"
|
278
|
+
|
224
279
|
cookbook 'berkshelf-cookbook-fixture', git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git', ref: '919afa0c4'
|
225
280
|
"""
|
226
281
|
When I successfully run `berks install`
|
227
282
|
Then the file "Berksfile.lock" should contain JSON:
|
228
283
|
"""
|
229
284
|
{
|
230
|
-
"
|
285
|
+
"dependencies":{
|
231
286
|
"berkshelf-cookbook-fixture":{
|
232
287
|
"git":"git://github.com/RiotGames/berkshelf-cookbook-fixture.git",
|
233
288
|
"ref":"919afa0c402089df23ebdf36637f12271b8a96b4",
|
@@ -239,17 +294,18 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
239
294
|
|
240
295
|
Scenario: Updating a Berksfile.lock with a git location and a branch
|
241
296
|
Given the cookbook store has the cookbooks:
|
242
|
-
| berkshelf-cookbook-fixture |
|
297
|
+
| berkshelf-cookbook-fixture | 1.0.0 |
|
243
298
|
And I write to "Berksfile" with:
|
244
299
|
"""
|
245
|
-
|
300
|
+
source "http://localhost:26210"
|
301
|
+
|
246
302
|
cookbook 'berkshelf-cookbook-fixture', git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git', branch: 'master'
|
247
303
|
"""
|
248
304
|
When I successfully run `berks install`
|
249
305
|
Then the file "Berksfile.lock" should contain JSON:
|
250
306
|
"""
|
251
307
|
{
|
252
|
-
"
|
308
|
+
"dependencies":{
|
253
309
|
"berkshelf-cookbook-fixture":{
|
254
310
|
"git":"git://github.com/RiotGames/berkshelf-cookbook-fixture.git",
|
255
311
|
"ref":"a97b9447cbd41a5fe58eee2026e48ccb503bd3bc",
|
@@ -264,14 +320,15 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
264
320
|
| berkshelf-cookbook-fixture | 70a527e17d91f01f031204562460ad1c17f972ee |
|
265
321
|
And I write to "Berksfile" with:
|
266
322
|
"""
|
267
|
-
|
323
|
+
source "http://localhost:26210"
|
324
|
+
|
268
325
|
cookbook 'berkshelf-cookbook-fixture', git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git', tag: 'v0.2.0'
|
269
326
|
"""
|
270
327
|
When I successfully run `berks install`
|
271
328
|
Then the file "Berksfile.lock" should contain JSON:
|
272
329
|
"""
|
273
330
|
{
|
274
|
-
"
|
331
|
+
"dependencies":{
|
275
332
|
"berkshelf-cookbook-fixture":{
|
276
333
|
"git":"git://github.com/RiotGames/berkshelf-cookbook-fixture.git",
|
277
334
|
"ref":"70a527e17d91f01f031204562460ad1c17f972ee",
|
@@ -286,14 +343,15 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
286
343
|
| berkshelf-cookbook-fixture | 919afa0c402089df23ebdf36637f12271b8a96b4 |
|
287
344
|
And I write to "Berksfile" with:
|
288
345
|
"""
|
289
|
-
|
346
|
+
source "http://localhost:26210"
|
347
|
+
|
290
348
|
cookbook 'berkshelf-cookbook-fixture', github: 'RiotGames/berkshelf-cookbook-fixture', ref: '919afa0c4'
|
291
349
|
"""
|
292
350
|
When I successfully run `berks install`
|
293
351
|
Then the file "Berksfile.lock" should contain JSON:
|
294
352
|
"""
|
295
353
|
{
|
296
|
-
"
|
354
|
+
"dependencies":{
|
297
355
|
"berkshelf-cookbook-fixture":{
|
298
356
|
"git":"git://github.com/RiotGames/berkshelf-cookbook-fixture.git",
|
299
357
|
"ref":"919afa0c402089df23ebdf36637f12271b8a96b4",
|
@@ -306,14 +364,15 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
306
364
|
Scenario: Updating a Berksfile.lock when a git location with :rel
|
307
365
|
Given I write to "Berksfile" with:
|
308
366
|
"""
|
309
|
-
|
367
|
+
source "http://localhost:26210"
|
368
|
+
|
310
369
|
cookbook 'berkshelf-cookbook-fixture', github: 'RiotGames/berkshelf-cookbook-fixture', branch: 'rel', rel: 'cookbooks/berkshelf-cookbook-fixture'
|
311
370
|
"""
|
312
371
|
When I successfully run `berks install`
|
313
372
|
Then the file "Berksfile.lock" should contain JSON:
|
314
373
|
"""
|
315
374
|
{
|
316
|
-
"
|
375
|
+
"dependencies":{
|
317
376
|
"berkshelf-cookbook-fixture":{
|
318
377
|
"git":"git://github.com/RiotGames/berkshelf-cookbook-fixture.git",
|
319
378
|
"ref":"93f5768b7d14df45e10d16c8bf6fe98ba3ff809a",
|
@@ -328,14 +387,15 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
328
387
|
Given a cookbook named "fake"
|
329
388
|
And I write to "Berksfile" with:
|
330
389
|
"""
|
331
|
-
|
390
|
+
source "http://localhost:26210"
|
391
|
+
|
332
392
|
cookbook 'fake', path: './fake'
|
333
393
|
"""
|
334
394
|
When I successfully run `berks install`
|
335
395
|
Then the file "Berksfile.lock" should contain JSON:
|
336
396
|
"""
|
337
397
|
{
|
338
|
-
"
|
398
|
+
"dependencies":{
|
339
399
|
"fake":{
|
340
400
|
"path":"./fake"
|
341
401
|
}
|
@@ -347,7 +407,8 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
347
407
|
Given a cookbook named "fake"
|
348
408
|
And the cookbook "fake" has the file "Berksfile" with:
|
349
409
|
"""
|
350
|
-
|
410
|
+
source "http://localhost:26210"
|
411
|
+
|
351
412
|
metadata
|
352
413
|
"""
|
353
414
|
When I cd to "fake"
|
@@ -355,7 +416,7 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
355
416
|
Then the file "Berksfile.lock" should contain JSON:
|
356
417
|
"""
|
357
418
|
{
|
358
|
-
"
|
419
|
+
"dependencies": {
|
359
420
|
"fake": {
|
360
421
|
"path": "."
|
361
422
|
}
|
@@ -367,13 +428,14 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
367
428
|
Given a cookbook named "fake"
|
368
429
|
And the cookbook "fake" has the file "Berksfile" with:
|
369
430
|
"""
|
370
|
-
|
431
|
+
source "http://localhost:26210"
|
432
|
+
|
371
433
|
metadata
|
372
434
|
"""
|
373
435
|
And the cookbook "fake" has the file "Berksfile.lock" with:
|
374
436
|
"""
|
375
437
|
{
|
376
|
-
"
|
438
|
+
"dependencies": {
|
377
439
|
"fake": {
|
378
440
|
"path": "."
|
379
441
|
}
|
@@ -385,46 +447,28 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
385
447
|
Then the file "Berksfile.lock" should contain JSON:
|
386
448
|
"""
|
387
449
|
{
|
388
|
-
"
|
450
|
+
"dependencies": {
|
389
451
|
"fake": {
|
390
452
|
"path": "."
|
391
453
|
}
|
392
454
|
}
|
393
455
|
}
|
394
456
|
"""
|
395
|
-
And the exit status should be 0
|
396
|
-
|
397
|
-
Scenario: Updating a Berksfile.lock with a different site location
|
398
|
-
Given pending we have a reliable non-opscode site to test
|
399
|
-
# Given I write to "Berksfile" with:
|
400
|
-
# """
|
401
|
-
# cookbook 'fake', site: 'example.com'
|
402
|
-
# """
|
403
|
-
# When I successfully run `berks install`
|
404
|
-
# Then the file "Berksfile.lock" should contain JSON:
|
405
|
-
# """
|
406
|
-
# {
|
407
|
-
# "sources":{
|
408
|
-
# "sudo":{
|
409
|
-
# "site":"opscode",
|
410
|
-
# "locked_version":"2.0.4"
|
411
|
-
# }
|
412
|
-
# }
|
413
|
-
# }
|
414
|
-
# """
|
415
457
|
|
416
458
|
Scenario: Installing when the locked version is no longer satisfied
|
417
459
|
Given the cookbook store has the cookbooks:
|
418
460
|
| berkshelf-cookbook-fixture | 1.0.0 |
|
419
461
|
Given I write to "Berksfile" with:
|
420
462
|
"""
|
421
|
-
|
463
|
+
source "http://localhost:26210"
|
464
|
+
|
422
465
|
cookbook 'berkshelf-cookbook-fixture', '1.0.0'
|
423
466
|
"""
|
424
467
|
And I successfully run `berks install`
|
425
468
|
And I write to "Berksfile" with:
|
426
469
|
"""
|
427
|
-
|
470
|
+
source "http://localhost:26210"
|
471
|
+
|
428
472
|
cookbook 'berkshelf-cookbook-fixture', '~> 1.3.0'
|
429
473
|
"""
|
430
474
|
When I run `berks install`
|
@@ -437,16 +481,17 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
437
481
|
In Berksfile.lock:
|
438
482
|
berkshelf-cookbook-fixture (1.0.0)
|
439
483
|
|
440
|
-
Try running `berks update berkshelf-cookbook-fixture, which will try to find
|
484
|
+
Try running `berks update berkshelf-cookbook-fixture, which will try to find 'berkshelf-cookbook-fixture' matching '~> 1.3.0'
|
441
485
|
"""
|
442
|
-
And the
|
486
|
+
And the exit status should be "OutdatedDependency"
|
443
487
|
|
444
488
|
Scenario: Installing when the Lockfile is empty
|
445
489
|
Given the cookbook store has the cookbooks:
|
446
490
|
| fake | 1.0.0 |
|
447
491
|
And I write to "Berksfile" with:
|
448
492
|
"""
|
449
|
-
|
493
|
+
source "http://localhost:26210"
|
494
|
+
|
450
495
|
cookbook 'fake', '1.0.0'
|
451
496
|
"""
|
452
497
|
And an empty file named "Berksfile.lock"
|
@@ -455,12 +500,12 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
455
500
|
"""
|
456
501
|
Using fake (1.0.0)
|
457
502
|
"""
|
458
|
-
And the exit status should be 0
|
459
503
|
|
460
504
|
Scenario: Installing when the Lockfile is in a bad state
|
461
505
|
Given I write to "Berksfile" with:
|
462
506
|
"""
|
463
|
-
|
507
|
+
source "http://localhost:26210"
|
508
|
+
|
464
509
|
cookbook 'fake', '1.0.0'
|
465
510
|
"""
|
466
511
|
Given I write to "Berksfile.lock" with:
|
@@ -472,5 +517,4 @@ Feature: Creating and reading the Berkshelf lockfile
|
|
472
517
|
"""
|
473
518
|
Error reading the Berkshelf lockfile `Berksfile.lock` (JSON::ParserError)
|
474
519
|
"""
|
475
|
-
And the
|
476
|
-
|
520
|
+
And the exit status should be "LockfileParserError"
|