modulesync 0.5.0 → 0.6.0
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.
- data/.gitignore +2 -1
- data/.travis.yml +9 -0
- data/CHANGELOG.md +19 -0
- data/README.md +11 -0
- data/Rakefile +11 -0
- data/features/support/env.rb +5 -0
- data/features/update.feature +201 -0
- data/lib/modulesync.rb +10 -8
- data/lib/modulesync/cli.rb +12 -3
- data/lib/modulesync/constants.rb +0 -1
- data/lib/modulesync/git.rb +10 -10
- data/modulesync.gemspec +3 -1
- metadata +41 -3
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
##2015-08-11 - 0.6.0
|
2
|
+
|
3
|
+
### Summary
|
4
|
+
|
5
|
+
This release adds two new flags to help modulesync better integrate with CI tools.
|
6
|
+
|
7
|
+
#### Features
|
8
|
+
|
9
|
+
- Add --project-root flag
|
10
|
+
- Create --offline flag to disable git functionality
|
11
|
+
|
12
|
+
#### Bugfixes
|
13
|
+
|
14
|
+
- Fix :remote option for repo
|
15
|
+
|
16
|
+
#### Maintenance
|
17
|
+
|
18
|
+
- Added tests
|
19
|
+
|
1
20
|
##2015-06-30 - 0.5.0
|
2
21
|
|
3
22
|
### Summary
|
data/README.md
CHANGED
@@ -121,6 +121,17 @@ overwrites local changes.
|
|
121
121
|
msync update --noop
|
122
122
|
```
|
123
123
|
|
124
|
+
#### Offline support
|
125
|
+
The --offline flag was added to allow a user to disable git support within
|
126
|
+
msync. One reason for this is because the user wants to control git commands
|
127
|
+
external to msync. Note, when using this command, msync assumes you have
|
128
|
+
create the folder structure and git repositories correctly. If not, msync will
|
129
|
+
fail to update correctly.
|
130
|
+
|
131
|
+
```
|
132
|
+
msync update --offline
|
133
|
+
```
|
134
|
+
|
124
135
|
#### Damage mode
|
125
136
|
|
126
137
|
Make changes for real and push them back to master. This operates on the
|
data/Rakefile
ADDED
@@ -0,0 +1,201 @@
|
|
1
|
+
Feature: update
|
2
|
+
ModuleSync needs to update module boilerplate
|
3
|
+
|
4
|
+
Scenario: Adding a new file
|
5
|
+
Given a file named "managed_modules.yml" with:
|
6
|
+
"""
|
7
|
+
---
|
8
|
+
- puppet-test
|
9
|
+
"""
|
10
|
+
And a file named "modulesync.yml" with:
|
11
|
+
"""
|
12
|
+
---
|
13
|
+
namespace: maestrodev
|
14
|
+
git_base: https://github.com/
|
15
|
+
"""
|
16
|
+
And a file named "config_defaults.yml" with:
|
17
|
+
"""
|
18
|
+
---
|
19
|
+
test:
|
20
|
+
name: aruba
|
21
|
+
"""
|
22
|
+
And a directory named "moduleroot"
|
23
|
+
And a file named "moduleroot/test" with:
|
24
|
+
"""
|
25
|
+
<%= @configs['name'] %>
|
26
|
+
"""
|
27
|
+
When I run `msync update --noop`
|
28
|
+
Then the exit status should be 0
|
29
|
+
And the output should match /Files added:\s+test/
|
30
|
+
Given I run `cat modules/puppet-test/test`
|
31
|
+
Then the output should contain "aruba"
|
32
|
+
|
33
|
+
Scenario: Adding a new file into foobar project-root
|
34
|
+
Given a file named "managed_modules.yml" with:
|
35
|
+
"""
|
36
|
+
---
|
37
|
+
- puppet-test
|
38
|
+
"""
|
39
|
+
And a file named "modulesync.yml" with:
|
40
|
+
"""
|
41
|
+
---
|
42
|
+
namespace: maestrodev
|
43
|
+
git_base: https://github.com/
|
44
|
+
"""
|
45
|
+
And a file named "config_defaults.yml" with:
|
46
|
+
"""
|
47
|
+
---
|
48
|
+
test:
|
49
|
+
name: aruba
|
50
|
+
"""
|
51
|
+
And a directory named "moduleroot"
|
52
|
+
And a file named "moduleroot/test" with:
|
53
|
+
"""
|
54
|
+
<%= @configs['name'] %>
|
55
|
+
"""
|
56
|
+
When I run `msync update --noop --project-root=foobar`
|
57
|
+
Then the exit status should be 0
|
58
|
+
And the output should match /Files added:\s+test/
|
59
|
+
Given I run `cat foobar/puppet-test/test`
|
60
|
+
Then the output should contain "aruba"
|
61
|
+
|
62
|
+
Scenario: Modifying an existing file
|
63
|
+
Given a file named "managed_modules.yml" with:
|
64
|
+
"""
|
65
|
+
---
|
66
|
+
- puppet-test
|
67
|
+
"""
|
68
|
+
And a file named "modulesync.yml" with:
|
69
|
+
"""
|
70
|
+
---
|
71
|
+
namespace: maestrodev
|
72
|
+
git_base: https://github.com/
|
73
|
+
"""
|
74
|
+
And a file named "config_defaults.yml" with:
|
75
|
+
"""
|
76
|
+
---
|
77
|
+
Gemfile:
|
78
|
+
gem_source: https://somehost.com
|
79
|
+
"""
|
80
|
+
And a directory named "moduleroot"
|
81
|
+
And a file named "moduleroot/Gemfile" with:
|
82
|
+
"""
|
83
|
+
source '<%= @configs['gem_source'] %>'
|
84
|
+
"""
|
85
|
+
When I run `msync update --noop`
|
86
|
+
Then the exit status should be 0
|
87
|
+
And the output should match:
|
88
|
+
"""
|
89
|
+
Files changed:\s+
|
90
|
+
+diff --git a/Gemfile b/Gemfile
|
91
|
+
"""
|
92
|
+
Given I run `cat modules/puppet-test/Gemfile`
|
93
|
+
Then the output should contain:
|
94
|
+
"""
|
95
|
+
source 'https://somehost.com'
|
96
|
+
"""
|
97
|
+
|
98
|
+
Scenario: Adding a new file in a new subdirectory
|
99
|
+
Given a file named "managed_modules.yml" with:
|
100
|
+
"""
|
101
|
+
---
|
102
|
+
- puppet-test
|
103
|
+
"""
|
104
|
+
And a file named "modulesync.yml" with:
|
105
|
+
"""
|
106
|
+
---
|
107
|
+
namespace: maestrodev
|
108
|
+
git_base: https://github.com/
|
109
|
+
"""
|
110
|
+
And a file named "config_defaults.yml" with:
|
111
|
+
"""
|
112
|
+
---
|
113
|
+
spec/spec_helper.rb:
|
114
|
+
require:
|
115
|
+
- puppetlabs_spec_helper/module_helper
|
116
|
+
"""
|
117
|
+
And a file named "moduleroot/spec/spec_helper.rb" with:
|
118
|
+
"""
|
119
|
+
<% @configs['require'].each do |required| -%>
|
120
|
+
require '<%= required %>'
|
121
|
+
<% end %>
|
122
|
+
"""
|
123
|
+
When I run `msync update --noop`
|
124
|
+
Then the exit status should be 0
|
125
|
+
And the output should match:
|
126
|
+
"""
|
127
|
+
Files added:\s+
|
128
|
+
spec/spec_helper.rb
|
129
|
+
"""
|
130
|
+
Given I run `cat modules/puppet-test/spec/spec_helper.rb`
|
131
|
+
Then the output should contain:
|
132
|
+
"""
|
133
|
+
require 'puppetlabs_spec_helper/module_helper'
|
134
|
+
"""
|
135
|
+
When I run `msync update --offline --noop`
|
136
|
+
Then the exit status should be 0
|
137
|
+
And the output should match:
|
138
|
+
"""
|
139
|
+
Files added:\s+
|
140
|
+
spec/spec_helper.rb
|
141
|
+
"""
|
142
|
+
When I run `msync update --offline`
|
143
|
+
Then the exit status should be 0
|
144
|
+
And the output should match:
|
145
|
+
"""
|
146
|
+
"""
|
147
|
+
|
148
|
+
Scenario: Updating a module with a .sync.yml file
|
149
|
+
Given a file named "managed_modules.yml" with:
|
150
|
+
"""
|
151
|
+
---
|
152
|
+
- puppetlabs-stdlib
|
153
|
+
"""
|
154
|
+
And a file named "modulesync.yml" with:
|
155
|
+
"""
|
156
|
+
---
|
157
|
+
git_base: https://github.com/
|
158
|
+
"""
|
159
|
+
And a file named "config_defaults.yml" with:
|
160
|
+
"""
|
161
|
+
---
|
162
|
+
spec/spec_helper.rb:
|
163
|
+
require:
|
164
|
+
- puppetlabs_spec_helper/module_helper
|
165
|
+
"""
|
166
|
+
And a file named "moduleroot/spec/spec_helper.rb" with:
|
167
|
+
"""
|
168
|
+
<% @configs['require'].each do |required| -%>
|
169
|
+
require '<%= required %>'
|
170
|
+
<% end %>
|
171
|
+
"""
|
172
|
+
And a file named "moduleroot/.travis.yml" with:
|
173
|
+
"""
|
174
|
+
---
|
175
|
+
sudo: false
|
176
|
+
language: ruby
|
177
|
+
cache: bundler
|
178
|
+
bundler_args: --without system_tests
|
179
|
+
script: "bundle exec rake validate && bundle exec rake lint && bundle exec rake spec SPEC_OPTS='--color --format documentation'"
|
180
|
+
matrix:
|
181
|
+
fast_finish: true
|
182
|
+
include:
|
183
|
+
- rvm: 1.8.7
|
184
|
+
env: PUPPET_GEM_VERSION="~> 3.0"
|
185
|
+
- rvm: 1.9.3
|
186
|
+
env: PUPPET_GEM_VERSION="~> 3.0"
|
187
|
+
- rvm: 2.1.5
|
188
|
+
env: PUPPET_GEM_VERSION="~> 3.0"
|
189
|
+
- rvm: 2.1.5
|
190
|
+
env: PUPPET_GEM_VERSION="~> 3.0" FUTURE_PARSER="yes"
|
191
|
+
- rvm: 2.1.6
|
192
|
+
env: PUPPET_GEM_VERSION="~> 4.0" STRICT_VARIABLES="yes"
|
193
|
+
notifications:
|
194
|
+
email: false
|
195
|
+
"""
|
196
|
+
When I run `msync update --noop`
|
197
|
+
Then the exit status should be 0
|
198
|
+
And the output should match:
|
199
|
+
"""
|
200
|
+
Not managing spec/spec_helper.rb in puppetlabs-stdlib
|
201
|
+
"""
|
data/lib/modulesync.rb
CHANGED
@@ -13,8 +13,8 @@ module ModuleSync
|
|
13
13
|
"#{config_path}/#{MODULE_FILES_DIR}/#{file}"
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.module_file(puppet_module, file)
|
17
|
-
"#{
|
16
|
+
def self.module_file(project_root, puppet_module, file)
|
17
|
+
"#{project_root}/#{puppet_module}/#{file}"
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.local_files(path)
|
@@ -56,9 +56,11 @@ module ModuleSync
|
|
56
56
|
# managed_modules is either an array or a hash
|
57
57
|
managed_modules.each do |puppet_module, opts|
|
58
58
|
puts "Syncing #{puppet_module}"
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
unless options[:offline]
|
60
|
+
git_base = "#{options[:git_base]}#{options[:namespace]}"
|
61
|
+
Git.pull(git_base, puppet_module, options[:branch], options[:project_root], opts || {})
|
62
|
+
end
|
63
|
+
module_configs = Util.parse_config("#{options[:project_root]}/#{puppet_module}/#{MODULE_CONF_FILE}")
|
62
64
|
global_defaults = defaults[GLOBAL_DEFAULTS_KEY] || {}
|
63
65
|
module_defaults = module_configs[GLOBAL_DEFAULTS_KEY] || {}
|
64
66
|
files_to_manage = (module_files | defaults.keys | module_configs.keys) - [GLOBAL_DEFAULTS_KEY]
|
@@ -70,17 +72,17 @@ module ModuleSync
|
|
70
72
|
puts "Not managing #{file} in #{puppet_module}"
|
71
73
|
files_to_delete << file
|
72
74
|
elsif file_configs['delete']
|
73
|
-
Renderer.remove(module_file(puppet_module, file))
|
75
|
+
Renderer.remove(module_file(options['project_root'], puppet_module, file))
|
74
76
|
else
|
75
77
|
erb = Renderer.build(local_file(options[:configs], file))
|
76
78
|
template = Renderer.render(erb, file_configs)
|
77
|
-
Renderer.sync(template, "#{
|
79
|
+
Renderer.sync(template, "#{options[:project_root]}/#{puppet_module}/#{file}")
|
78
80
|
end
|
79
81
|
end
|
80
82
|
files_to_manage -= files_to_delete
|
81
83
|
if options[:noop]
|
82
84
|
Git.update_noop(puppet_module, options)
|
83
|
-
|
85
|
+
elsif not options[:offline]
|
84
86
|
Git.update(puppet_module, files_to_manage, options)
|
85
87
|
end
|
86
88
|
end
|
data/lib/modulesync/cli.rb
CHANGED
@@ -14,6 +14,7 @@ module ModuleSync
|
|
14
14
|
:managed_modules_conf => 'managed_modules.yml',
|
15
15
|
:configs => '.',
|
16
16
|
:tag_pattern => '%s',
|
17
|
+
:project_root => './modules',
|
17
18
|
}
|
18
19
|
end
|
19
20
|
|
@@ -35,7 +36,7 @@ module ModuleSync
|
|
35
36
|
@options.merge!(Hash.transform_keys_to_symbols(Util.parse_config(MODULESYNC_CONF_FILE)))
|
36
37
|
@options[:command] = args[0] if commands_available.include?(args[0])
|
37
38
|
opt_parser = OptionParser.new do |opts|
|
38
|
-
opts.banner = "Usage: msync update [-m <commit message>] [-c <directory> ] [--noop] [--bump] [--changelog] [--tag] [--tag-pattern <tag_pattern>] [-n <namespace>] [-b <branch>] [-r <branch>] [-f <filter>] | hook activate|deactivate [-c <directory> ] [-n <namespace>] [-b <branch>]"
|
39
|
+
opts.banner = "Usage: msync update [-m <commit message>] [-c <directory> ] [--offline] [--noop] [--bump] [--changelog] [--tag] [--tag-pattern <tag_pattern>] [-p <project_root> [-n <namespace>] [-b <branch>] [-r <branch>] [-f <filter>] | hook activate|deactivate [-c <directory> ] [-n <namespace>] [-b <branch>]"
|
39
40
|
opts.on('-m', '--message <msg>',
|
40
41
|
'Commit message to apply to updated modules') do |msg|
|
41
42
|
@options[:message] = msg
|
@@ -52,6 +53,10 @@ module ModuleSync
|
|
52
53
|
'Branch name to make the changes in. Defaults to "master"') do |branch|
|
53
54
|
@options[:branch] = branch
|
54
55
|
end
|
56
|
+
opts.on('-p', '--project-root <path>',
|
57
|
+
'Path used by git to clone modules into. Defaults to "modules"') do |project_root|
|
58
|
+
@options[:project_root] = project_root
|
59
|
+
end
|
55
60
|
opts.on('-r', '--remote-branch <branch>',
|
56
61
|
'Remote branch name to push the changes to. Defaults to the branch name') do |branch|
|
57
62
|
@options[:remote_branch] = branch
|
@@ -72,6 +77,10 @@ module ModuleSync
|
|
72
77
|
'No-op mode') do |msg|
|
73
78
|
@options[:noop] = true
|
74
79
|
end
|
80
|
+
opts.on('--offline',
|
81
|
+
'Do not run git command. Helpful if you have existing repositories locally.') do |msg|
|
82
|
+
@options[:offline] = true
|
83
|
+
end
|
75
84
|
opts.on('--bump',
|
76
85
|
'Bump module version to the next minor') do |msg|
|
77
86
|
@options[:bump] = true
|
@@ -92,8 +101,8 @@ module ModuleSync
|
|
92
101
|
end.parse!
|
93
102
|
|
94
103
|
@options.fetch(:message) do
|
95
|
-
if @options[:command] == 'update' && ! @options[:noop] && ! @options[:amend]
|
96
|
-
fail("A commit message is required unless using noop.")
|
104
|
+
if @options[:command] == 'update' && ! @options[:noop] && ! @options[:amend] && ! @options[:offline]
|
105
|
+
fail("A commit message is required unless using noop or offline.")
|
97
106
|
end
|
98
107
|
end
|
99
108
|
|
data/lib/modulesync/constants.rb
CHANGED
data/lib/modulesync/git.rb
CHANGED
@@ -30,24 +30,24 @@ module ModuleSync
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def self.pull(git_base, name, branch, opts)
|
34
|
-
if ! Dir.exists?(
|
35
|
-
Dir.mkdir(
|
33
|
+
def self.pull(git_base, name, branch, project_root, opts)
|
34
|
+
if ! Dir.exists?(project_root)
|
35
|
+
Dir.mkdir(project_root)
|
36
36
|
end
|
37
37
|
|
38
38
|
# Repo needs to be cloned in the cwd
|
39
|
-
if ! Dir.exists?("#{
|
39
|
+
if ! Dir.exists?("#{opts[:project_root]}/#{name}") || ! Dir.exists?("#{opts[:project_root]}/#{name}/.git")
|
40
40
|
puts "Cloning repository fresh"
|
41
|
-
remote = opts[:remote] || git_base.start_with?('file://') ? "#{git_base}/#{name}" : "#{git_base}/#{name}.git"
|
42
|
-
local = "#{
|
41
|
+
remote = opts[:remote] || (git_base.start_with?('file://') ? "#{git_base}/#{name}" : "#{git_base}/#{name}.git")
|
42
|
+
local = "#{project_root}/#{name}"
|
43
43
|
puts "Cloning from #{remote}"
|
44
44
|
repo = ::Git.clone(remote, local)
|
45
45
|
switch_branch(repo, branch)
|
46
46
|
# Repo already cloned, check out master and override local changes
|
47
47
|
else
|
48
48
|
# Some versions of git can't properly handle managing a repo from outside the repo directory
|
49
|
-
Dir.chdir("#{
|
50
|
-
puts "Overriding any local changes to repositories in #{
|
49
|
+
Dir.chdir("#{project_root}/#{name}") do
|
50
|
+
puts "Overriding any local changes to repositories in #{project_root}"
|
51
51
|
repo = ::Git.open('.')
|
52
52
|
repo.fetch
|
53
53
|
repo.reset_hard
|
@@ -96,7 +96,7 @@ module ModuleSync
|
|
96
96
|
|
97
97
|
# Git add/rm, git commit, git push
|
98
98
|
def self.update(name, files, options)
|
99
|
-
module_root = "#{
|
99
|
+
module_root = "#{options[:project_root]}/#{name}"
|
100
100
|
message = options[:message]
|
101
101
|
if options[:remote_branch]
|
102
102
|
branch = "#{options[:branch]}:#{options[:remote_branch]}"
|
@@ -159,7 +159,7 @@ module ModuleSync
|
|
159
159
|
def self.update_noop(name, options)
|
160
160
|
puts "Using no-op. Files in #{name} may be changed but will not be committed."
|
161
161
|
|
162
|
-
repo = ::Git.open("#{
|
162
|
+
repo = ::Git.open("#{options[:project_root]}/#{name}")
|
163
163
|
repo.branch(options[:branch]).checkout
|
164
164
|
|
165
165
|
puts "Files changed: "
|
data/modulesync.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'modulesync'
|
7
|
-
spec.version = '0.
|
7
|
+
spec.version = '0.6.0'
|
8
8
|
spec.authors = ['Colleen Murphy']
|
9
9
|
spec.email = ['colleen@puppetlabs.com']
|
10
10
|
spec.summary = %q{Puppet Module Synchronizer}
|
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
20
|
spec.add_development_dependency "bundler", "~> 1.6"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "aruba"
|
21
23
|
|
22
24
|
spec.add_runtime_dependency 'git', '~>1.2'
|
23
25
|
spec.add_runtime_dependency 'puppet-blacksmith', '~>3.0'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modulesync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-08-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -27,6 +27,38 @@ dependencies:
|
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '1.6'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: aruba
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
30
62
|
- !ruby/object:Gem::Dependency
|
31
63
|
name: git
|
32
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,12 +100,16 @@ extensions: []
|
|
68
100
|
extra_rdoc_files: []
|
69
101
|
files:
|
70
102
|
- .gitignore
|
103
|
+
- .travis.yml
|
71
104
|
- CHANGELOG.md
|
72
105
|
- Gemfile
|
73
106
|
- LICENSE
|
74
107
|
- README.md
|
108
|
+
- Rakefile
|
75
109
|
- bin/msync
|
76
110
|
- contrib/openstack-commit-msg-hook.sh
|
111
|
+
- features/support/env.rb
|
112
|
+
- features/update.feature
|
77
113
|
- lib/modulesync.rb
|
78
114
|
- lib/modulesync/cli.rb
|
79
115
|
- lib/modulesync/constants.rb
|
@@ -107,4 +143,6 @@ rubygems_version: 1.8.23
|
|
107
143
|
signing_key:
|
108
144
|
specification_version: 3
|
109
145
|
summary: Puppet Module Synchronizer
|
110
|
-
test_files:
|
146
|
+
test_files:
|
147
|
+
- features/support/env.rb
|
148
|
+
- features/update.feature
|