modulesync 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6c1dc855f2c78b421ce564326e848cb4622b887c
4
- data.tar.gz: 6b9ea713d13af6cb4c079069a7e0883c7531ad52
3
+ metadata.gz: bcd0fbe76e6f665fb7122e17a5d6945f7be84bbe
4
+ data.tar.gz: 5f4e45bc2b44d51fb2b215d022e2269712f47a24
5
5
  SHA512:
6
- metadata.gz: 6835740e963f045ec525312d2fa208eac048d9277af16699b7a5cf605eef4bf8c99b8f5eb522492b17d489905b49a7fa7a249f58f68b2e4a9e264d0da6936687
7
- data.tar.gz: 93e83428fbc900e1e72889b6a1af73c20d41a35dfdd441575e17d5576a997a244cf7747e94e6d95756c292cf7511d063c63206daad4b75773a76699ec7f14fd7
6
+ metadata.gz: 150e69be961f2c98a69dd1e7f0469a67337991d01ca66279c61ecdfb63f41fd049682b1f4bafe16dbe5d808a4a3786cb7626ede3b82528c2276d686c9bf5f362
7
+ data.tar.gz: 326c5d4551c5398f22e635149b9cec5bf09f61047e198cb761910a13ba947cc4dffdd997ca12b14a0b53bd8704f25a4634f07fe6d18d8f33dcd0bcd9b30be5a3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,37 @@
1
+ ##2015-03-12 - 0.3.0
2
+
3
+ ### Summary
4
+
5
+ This release contains a breaking change to some parameters exposed in
6
+ modulesync.yml. In particular, it abandons the user of git_user and
7
+ git_provider in favor of the parameter git_base to specify the base part of a
8
+ git URL to pull from. It also adds support for gerrit by adding a remote_branch
9
+ parameter for modulesync.yml that can differ from the local branch, plus a
10
+ number of new flags for updating modules.
11
+
12
+ #### Backwards-incompatible changes
13
+
14
+ - Remove git_user and git_provider_address as parameters in favor of using
15
+ git_base as a whole
16
+
17
+ #### Features
18
+
19
+ - Expose the puppet module name in the ERB templates
20
+ - Add support for gerrit by:
21
+ - Adding a --amend flag
22
+ - Adding a remote_branch parameter for modulesync.yml config file that can
23
+ differ from the local branch
24
+ - Adding a script to handle the pre-commit hook for adding a commit id
25
+ - Using git_base to specify an arbitrary git URL instead of an SCP-style one
26
+ - Add a --force flag (usually needed with the --amend flag if not using gerrit)
27
+ - Add --bump, --tag, --tag-pattern, and --changelog flags
28
+
29
+ #### Bugfixes
30
+
31
+ - Stop requiring .gitignore to exist
32
+ - Fix non-master branch functionality
33
+ - Add workarounds for older git versions
34
+
1
35
  ##2014-11-16 - 0.2.0
2
36
 
3
37
  ### Summary
data/README.md CHANGED
@@ -68,7 +68,7 @@ This allows us to, for example, have a set of "required" gems that are added
68
68
  to all Gemfiles, and a set of "optional" gems that a single module might add.
69
69
 
70
70
  The list of modules to manage is in managed\_modules.yml in the configuration
71
- directory. This lists just the GitHub names of the modules to be managed.
71
+ directory. This lists just the names of the modules to be managed.
72
72
 
73
73
  ModuleSync can be called from the command line with parameters to change the
74
74
  branch you're working on or the remote to clone from and push to. You can also
@@ -101,20 +101,18 @@ github organization and pushes to the master branch.
101
101
 
102
102
  Make changes to a file in the moduleroot. For sanity's sake you should commit
103
103
  and push these changes, but in this mode the update will be rendered from the
104
- state of the files locally. Run `msync update` from the root of the
105
- configuration directory (not moduleroot), or use -c <relative path> to point
106
- it to the location of the configuration directory.
104
+ state of the files locally.
107
105
 
108
106
  #### Dry-run
109
107
 
110
108
  Do a dry-run to see what files will be changed, added and removed. This clones
111
- the modules to `modules/<namespace>-<modulename>` in the current working, or if
112
- the modules are already cloned, does an effective `git fetch origin; git
113
- checkout master; git reset --hard origin/master` on the modules. Don't run
114
- modulesync if the current working directory contains a modules/ directory with
115
- changes you want to keep. The dry-run makes local changes there, but does not
116
- commit or push changes. It is still destructive in that it overwrites local
117
- changes.
109
+ the modules to `modules/<namespace>-<modulename>` in the current working
110
+ directory, or if the modules are already cloned, does an effective `git fetch
111
+ origin; git checkout master; git reset --hard origin/master` on the modules.
112
+ Don't run modulesync if the current working directory contains a modules/
113
+ directory with changes you want to keep. The dry-run makes local changes there,
114
+ but does not commit or push changes. It is still destructive in that it
115
+ overwrites local changes.
118
116
 
119
117
  ```
120
118
  msync update --noop
@@ -130,6 +128,19 @@ found.
130
128
  msync update -m "Commit message"
131
129
  ```
132
130
 
131
+ Amend the commit if changes are needed.
132
+
133
+ ```
134
+ msync update --amend
135
+ ```
136
+
137
+ For most workflows you will need to force-push an amended commit. Not required
138
+ for gerrit.
139
+
140
+ ```
141
+ msync update --amend --force
142
+ ```
143
+
133
144
  #### Automating Updates
134
145
 
135
146
  You can install a pre-push git hook to automatically clone, update, and push
@@ -155,18 +166,17 @@ you can use this on your own organization's modules. This functionality also
155
166
  applies if you want to work on a fork of the puppetlabs modules or work on a
156
167
  non-master branch of any organization's modules. ModuleSync does not support
157
168
  cloning from one remote and pushing to another, you are expected to fork
158
- manually. It does not yet support automating pull requests (coming soon).
169
+ manually. It does not support automating pull requests.
159
170
 
160
171
  #### Dry-run
161
172
 
162
173
  If you dry-run before doing the live update, you need to specify what namespace
163
174
  to clone from because the live update will not re-clone if the modules are
164
- already cloned. The namespace should be your fork, not the upstream module. The
165
- format should be the SSH or HTTP prefix of the full URL minus the module name
166
- itself.
175
+ already cloned. The namespace should be your fork, not the upstream module (if
176
+ working on a fork).
167
177
 
168
178
  ```
169
- msync update -n git@github.com:puppetlabs --noop
179
+ msync update -n puppetlabs --noop
170
180
  ```
171
181
 
172
182
  #### Damage mode
@@ -177,7 +187,7 @@ namespace if the modules are not pre-cloned. You need to specify a branch to
177
187
  push to if you are not pushing to master.
178
188
 
179
189
  ```
180
- msync update -n git@github.com:puppetlabs -b sync_branch -m "Commit message"
190
+ msync update -n puppetlabs -b sync_branch -m "Commit message"
181
191
  ```
182
192
 
183
193
  #### Configuring ModuleSync defaults
@@ -201,6 +211,43 @@ msync update --noop
201
211
  msync update -m "Commit message"
202
212
  ```
203
213
 
214
+ Available parameters for modulesync.yml
215
+
216
+ * git_base : The default URL to git clone from (Default: 'git@github.com:')
217
+ * namespace : Namespace of the projects to manage (Default: 'puppetlabs')
218
+ * branch : Branch to push to (Default: 'master')
219
+ * remote_branch : Remote branch to push to (Default: Same value as branch)
220
+ * pre_commit_script : A script to be run before commiting (ie. contrib/myfooscript.sh)
221
+
222
+ ##### Example
223
+
224
+ ###### Github
225
+
226
+ ```
227
+ ---
228
+ namespace: MySuperOrganization
229
+ branch: modulesyncbranch
230
+ ```
231
+
232
+ ###### Gitlab
233
+
234
+ ```
235
+ ---
236
+ git_base: 'user@gitlab.example.com:'
237
+ namespace: MySuperOrganization
238
+ branch: modulesyncbranch
239
+
240
+ ###### Gerrit
241
+
242
+ ```
243
+ ---
244
+ namespace: stackforge
245
+ git_base: ssh://jdoe@review.openstack.org:29418/
246
+ branch: msync_foo
247
+ remote_branch: refs/publish/master/msync_foo
248
+ pre_commit_script: openstack-commit-msg-hook.sh
249
+ ```
250
+
204
251
  #### Filtering Repositories
205
252
 
206
253
  If you only want to sync some of the repositories in your managed_modules.yml, use the -f flag to filter by a regex:
@@ -217,9 +264,55 @@ different remote. The hook will also look in modulesync.yml for default
217
264
  arguments.
218
265
 
219
266
  ```
220
- msync hook activate -n git@github.com:puppetlabs -b sync_branch
267
+ msync hook activate -n puppetlabs -b sync_branch
268
+ ```
269
+
270
+ #### Updating metadata.json
271
+
272
+ Modulesync can optionally bump the minor version in `metadata.json` for each
273
+ modified modules if you add the `--bump` flag to the command line:
274
+
275
+ ```
276
+ msync update -m "Commit message" --bump
277
+ ```
278
+
279
+ #### Tagging repositories
280
+
281
+ If you wish to tag the modified repositories with the newly bumped version,
282
+ you can do so by using the `--tag` flag:
283
+
284
+ ```
285
+ msync update -m "Commit message" --bump --tag
286
+ ```
287
+
288
+ #### Setting the tag pattern
289
+
290
+ You can also set the format of the tag to be used (`printf`-formatted)
291
+ by setting the `tag_pattern` option:
292
+
293
+ ```
294
+ msync update -m "Commit message" --bump --tag --tag_pattern 'v%s'
221
295
  ```
222
296
 
297
+ The default for the tag pattern is `%s`.
298
+
299
+ #### Updating the CHANGELOG
300
+
301
+ When bumping the version in `metadata.json`, modulesync can let you
302
+ updating `CHANGELOG.md` in each modified repository.
303
+
304
+ This is one by using the `--changelog` flag:
305
+
306
+ ```
307
+ msync update -m "Commit message" --bump --changelog
308
+ ```
309
+
310
+ This flag will cause the `CHANGELOG.md` file to be updated with the
311
+ current date, bumped (minor) version, and commit message.
312
+
313
+ If `CHANGELOG.md` is absent in the repository, nothing will happen.
314
+
315
+
223
316
  The Templates
224
317
  -------------
225
318
 
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+
3
+ commit_msg_path=$1/.git/hooks/commit-msg
4
+
5
+ if [ ! -f $commit_msg_path ]; then
6
+ curl -s -Lo $commit_msg_path http://review.openstack.org/tools/hooks/commit-msg
7
+ chmod 775 $commit_msg_path
8
+ fi
@@ -10,10 +10,10 @@ module ModuleSync
10
10
  {
11
11
  :namespace => 'puppetlabs',
12
12
  :branch => 'master',
13
- :git_user => 'git',
14
- :git_provider_address => 'github.com',
13
+ :git_base => 'git@github.com:',
15
14
  :managed_modules_conf => 'managed_modules.yml',
16
15
  :configs => '.',
16
+ :tag_pattern => '%s',
17
17
  }
18
18
  end
19
19
 
@@ -35,7 +35,7 @@ module ModuleSync
35
35
  @options.merge!(Hash.transform_keys_to_symbols(Util.parse_config(MODULESYNC_CONF_FILE)))
36
36
  @options[:command] = args[0] if commands_available.include?(args[0])
37
37
  opt_parser = OptionParser.new do |opts|
38
- opts.banner = "Usage: msync update [-m <commit message>] [-c <directory> ] [--noop] [-n <namespace>] [-b <branch>] [-f <filter>] | hook activate|deactivate [-c <directory> ] [-n <namespace>] [-b <branch>]"
38
+ opts.banner = "Usage: msync update [-m <commit message>] [-c <directory> ] [--noop] [--bump] [--changelog] [--tag] [--tag-pattern <tag_pattern>] [-n <namespace>] [-b <branch>] [-f <filter>] | hook activate|deactivate [-c <directory> ] [-n <namespace>] [-b <branch>]"
39
39
  opts.on('-m', '--message <msg>',
40
40
  'Commit message to apply to updated modules') do |msg|
41
41
  @options[:message] = msg
@@ -56,15 +56,39 @@ module ModuleSync
56
56
  'A regular expression to filter repositories to update.') do |filter|
57
57
  @options[:filter] = filter
58
58
  end
59
+ opts.on('--amend',
60
+ 'Amend previous commit') do |msg|
61
+ @options[:amend] = true
62
+ end
63
+ opts.on('--force',
64
+ 'Force push amended commit') do |msg|
65
+ @options[:force] = true
66
+ end
59
67
  opts.on('--noop',
60
68
  'No-op mode') do |msg|
61
69
  @options[:noop] = true
62
70
  end
71
+ opts.on('--bump',
72
+ 'Bump module version to the next minor') do |msg|
73
+ @options[:bump] = true
74
+ end
75
+ opts.on('--changelog',
76
+ 'Update CHANGELOG.md if version was bumped') do |msg|
77
+ @options[:changelog] = true
78
+ end
79
+ opts.on('--tag',
80
+ 'Git tag with the current module version') do |msg|
81
+ @options[:tag] = true
82
+ end
83
+ opts.on('--tag-pattern',
84
+ 'The pattern to use when tagging releases.') do |pattern|
85
+ @options[:tag_pattern] = pattern
86
+ end
63
87
  @options[:help] = opts.help
64
88
  end.parse!
65
89
 
66
90
  @options.fetch(:message) do
67
- if @options[:command] == 'update' && ! @options[:noop]
91
+ if @options[:command] == 'update' && ! @options[:noop] && ! @options[:amend]
68
92
  fail("A commit message is required unless using noop.")
69
93
  end
70
94
  end
@@ -1,10 +1,36 @@
1
1
  require 'git'
2
+ require 'puppet_blacksmith'
2
3
 
3
4
  module ModuleSync
4
5
  module Git
5
6
  include Constants
6
7
 
7
- def self.pull(git_user, git_provider_address, org, name)
8
+ def self.remote_branch_exists?(repo, branch)
9
+ repo.branches.remote.collect { |b| b.name }.include?(branch)
10
+ end
11
+
12
+ def self.local_branch_exists?(repo, branch)
13
+ repo.branches.local.collect { |b| b.name }.include?(branch)
14
+ end
15
+
16
+ def self.switch_branch(repo, branch)
17
+ unless repo.branch.name == branch
18
+ if local_branch_exists?(repo, branch)
19
+ puts "Switching to branch #{branch}"
20
+ repo.checkout(branch)
21
+ elsif remote_branch_exists?(repo, branch)
22
+ puts "Creating local branch #{branch} from origin/#{branch}"
23
+ repo.checkout("origin/#{branch}")
24
+ repo.branch(branch).checkout
25
+ else
26
+ repo.checkout('origin/master')
27
+ puts "Creating new branch #{branch}"
28
+ repo.branch(branch).checkout
29
+ end
30
+ end
31
+ end
32
+
33
+ def self.pull(git_base, name, branch, opts)
8
34
  if ! Dir.exists?(PROJ_ROOT)
9
35
  Dir.mkdir(PROJ_ROOT)
10
36
  end
@@ -12,25 +38,73 @@ module ModuleSync
12
38
  # Repo needs to be cloned in the cwd
13
39
  if ! Dir.exists?("#{PROJ_ROOT}/#{name}") || ! Dir.exists?("#{PROJ_ROOT}/#{name}/.git")
14
40
  puts "Cloning repository fresh"
15
- remote = "#{git_user}@#{git_provider_address}:#{org}/#{name}.git"
41
+ remote = opts[:remote] || "#{git_base}/#{name}.git"
16
42
  local = "#{PROJ_ROOT}/#{name}"
17
43
  puts "Cloning from #{remote}"
18
44
  repo = ::Git.clone(remote, local)
19
-
45
+ switch_branch(repo, branch)
20
46
  # Repo already cloned, check out master and override local changes
21
47
  else
22
- puts "Overriding any local changes to repositories in #{PROJ_ROOT}"
23
- repo = ::Git.open("#{PROJ_ROOT}/#{name}")
24
- repo.branch('master').checkout
25
- repo.reset_hard
26
- repo.pull
48
+ # Some versions of git can't properly handle managing a repo from outside the repo directory
49
+ Dir.chdir("#{PROJ_ROOT}/#{name}") do
50
+ puts "Overriding any local changes to repositories in #{PROJ_ROOT}"
51
+ repo = ::Git.open('.')
52
+ repo.fetch
53
+ repo.reset_hard
54
+ switch_branch(repo, branch)
55
+ if remote_branch_exists?(repo, branch)
56
+ repo.pull('origin', branch)
57
+ end
58
+ end
27
59
  end
28
60
  end
29
61
 
62
+ def self.update_changelog(repo, version, message, module_root)
63
+ changelog = "#{module_root}/CHANGELOG.md"
64
+ if File.exists?(changelog)
65
+ puts "Updating #{changelog} for version #{version}"
66
+ changes = File.readlines(changelog)
67
+ File.open(changelog, 'w') do |f|
68
+ date = Time.now.strftime("%Y-%m-%d")
69
+ f.puts "## #{date} - Release #{version}\n\n"
70
+ f.puts "#{message}\n\n"
71
+ # Add old lines again
72
+ f.puts changes
73
+ end
74
+ repo.add('CHANGELOG.md')
75
+ else
76
+ puts "No CHANGELOG.md file found, not updating."
77
+ end
78
+ end
79
+
80
+ def self.bump(repo, m, message, module_root, changelog=false)
81
+ new = m.bump!
82
+ puts "Bumped to version #{new}"
83
+ repo.add('metadata.json')
84
+ self.update_changelog(repo, new, message, module_root) if changelog
85
+ repo.commit("Release version #{new}")
86
+ repo.push
87
+ new
88
+ end
89
+
90
+ def self.tag(repo, version, tag_pattern)
91
+ tag = tag_pattern % version
92
+ puts "Tagging with #{tag}"
93
+ repo.add_tag(tag)
94
+ repo.push('origin', tag)
95
+ end
96
+
30
97
  # Git add/rm, git commit, git push
31
- def self.update(name, files, message, branch)
32
- repo = ::Git.open("#{PROJ_ROOT}/#{name}")
33
- repo.branch(branch).checkout
98
+ def self.update(name, files, options)
99
+ module_root = "#{PROJ_ROOT}/#{name}"
100
+ message = options[:message]
101
+ if options[:remote_branch]
102
+ branch = "#{options[:branch]}:#{options[:remote_branch]}"
103
+ else
104
+ branch = options[:branch]
105
+ end
106
+ repo = ::Git.open(module_root)
107
+ repo.branch(options[:branch]).checkout
34
108
  files.each do |file|
35
109
  if repo.status.deleted.include?(file)
36
110
  repo.remove(file)
@@ -39,8 +113,26 @@ module ModuleSync
39
113
  end
40
114
  end
41
115
  begin
42
- repo.commit(message)
43
- repo.push
116
+ opts_commit = {}
117
+ opts_push = {}
118
+ if options[:amend]
119
+ opts_commit = {:amend => true}
120
+ end
121
+ if options[:force]
122
+ opts_push = {:force => true}
123
+ end
124
+ if options[:pre_commit_script]
125
+ script = "#{File.dirname(File.dirname(__FILE__))}/../contrib/#{options[:pre_commit_script]}"
126
+ %x[#{script} #{module_root}]
127
+ end
128
+ repo.commit(message, opts_commit)
129
+ repo.push('origin', branch, opts_push)
130
+ # Only bump/tag if pushing didn't fail (i.e. there were changes)
131
+ m = Blacksmith::Modulefile.new("#{module_root}/metadata.json")
132
+ if options[:bump]
133
+ new = self.bump(repo, m, message, module_root, options[:changelog])
134
+ self.tag(repo, new, options[:tag_pattern]) if options[:tag]
135
+ end
44
136
  rescue ::Git::GitExecuteError => git_error
45
137
  if git_error.message.include? "nothing to commit, working directory clean"
46
138
  puts "There were no files to update in #{name}. Not committing."
@@ -55,15 +147,20 @@ module ModuleSync
55
147
  # untracked under some circumstances
56
148
  # https://github.com/schacon/ruby-git/issues/130
57
149
  def self.untracked_unignored_files(repo)
58
- ignored = File.open("#{repo.dir.path}/.gitignore").read.split
150
+ ignore_path = "#{repo.dir.path}/.gitignore"
151
+ if File.exists?(ignore_path)
152
+ ignored = File.open(ignore_path).read.split
153
+ else
154
+ ignored = []
155
+ end
59
156
  repo.status.untracked.keep_if{|f,_| !ignored.any?{|i| File.fnmatch(i, f)}}
60
157
  end
61
158
 
62
- def self.update_noop(name, branch)
159
+ def self.update_noop(name, options)
63
160
  puts "Using no-op. Files in #{name} may be changed but will not be committed."
64
161
 
65
162
  repo = ::Git.open("#{PROJ_ROOT}/#{name}")
66
- repo.branch(branch).checkout
163
+ repo.branch(options[:branch]).checkout
67
164
 
68
165
  puts "Files changed: "
69
166
  repo.diff('HEAD', '--').each do |diff|
data/lib/modulesync.rb CHANGED
@@ -53,14 +53,17 @@ module ModuleSync
53
53
 
54
54
  managed_modules = self.managed_modules("#{options[:configs]}/managed_modules.yml", options[:filter])
55
55
 
56
- managed_modules.each do |puppet_module|
56
+ # managed_modules is either an array or a hash
57
+ managed_modules.each do |puppet_module, opts|
57
58
  puts "Syncing #{puppet_module}"
58
- Git.pull(options[:git_user], options[:git_provider_address], options[:namespace], puppet_module)
59
+ git_base = "#{options[:git_base]}#{options[:namespace]}"
60
+ Git.pull(git_base, puppet_module, options[:branch], opts || {})
59
61
  module_configs = Util.parse_config("#{PROJ_ROOT}/#{puppet_module}/#{MODULE_CONF_FILE}")
60
62
  files_to_manage = module_files | defaults.keys | module_configs.keys
61
63
  files_to_delete = []
62
64
  files_to_manage.each do |file|
63
65
  file_configs = (defaults[file] || {}).merge(module_configs[file] || {})
66
+ file_configs[:puppet_module] = puppet_module
64
67
  if file_configs['unmanaged']
65
68
  puts "Not managing #{file} in #{puppet_module}"
66
69
  files_to_delete << file
@@ -74,9 +77,9 @@ module ModuleSync
74
77
  end
75
78
  files_to_manage -= files_to_delete
76
79
  if options[:noop]
77
- Git.update_noop(puppet_module, options[:branch])
80
+ Git.update_noop(puppet_module, options)
78
81
  else
79
- Git.update(puppet_module, files_to_manage, options[:message], options[:branch])
82
+ Git.update(puppet_module, files_to_manage, options)
80
83
  end
81
84
  end
82
85
  elsif options[:command] == 'hook'
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.2.0'
7
+ spec.version = '0.3.0'
8
8
  spec.authors = ['Colleen Murphy']
9
9
  spec.email = ['colleen@puppetlabs.com']
10
10
  spec.summary = %q{Puppet Module Synchronizer}
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler", "~> 1.6"
21
21
 
22
22
  spec.add_runtime_dependency 'git', '~>1.2'
23
+ spec.add_runtime_dependency 'puppet-blacksmith', '~>3.0'
23
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modulesync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colleen Murphy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-17 00:00:00.000000000 Z
11
+ date: 2015-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: puppet-blacksmith
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
41
55
  description: Utility to synchronize common files across puppet modules in Github.
42
56
  email:
43
57
  - colleen@puppetlabs.com
@@ -52,6 +66,7 @@ files:
52
66
  - LICENSE
53
67
  - README.md
54
68
  - bin/msync
69
+ - contrib/openstack-commit-msg-hook.sh
55
70
  - lib/modulesync.rb
56
71
  - lib/modulesync/cli.rb
57
72
  - lib/modulesync/constants.rb
@@ -80,9 +95,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
95
  version: '0'
81
96
  requirements: []
82
97
  rubyforge_project:
83
- rubygems_version: 2.2.2
98
+ rubygems_version: 2.0.14
84
99
  signing_key:
85
100
  specification_version: 4
86
101
  summary: Puppet Module Synchronizer
87
102
  test_files: []
88
- has_rdoc: