modulesync 0.7.2 → 0.8.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: 1dd5e56a7370a3eb358c9a6d1fdf28aab8078ba9
4
- data.tar.gz: 444ba255257e89d604065e066978f028d798907d
3
+ metadata.gz: 68055a15d6cb04e09aa817ca80d02daaa18d871e
4
+ data.tar.gz: 734cb292972fb267ed1e5139caf970d8a5678d2e
5
5
  SHA512:
6
- metadata.gz: fa110f5ccfaa83e13be484e0d443cbddc50b97706dda6fa9b6080bb9bf509fbff0ecc7953dfd1014b40bae0baf5a5c214d49ec96cb640b5a1b1d13269cf51d8c
7
- data.tar.gz: 8629e474f0b8998f5707954204a37ab94006d056640f2f438bca92fa6c4694238e7a4657281c8c2d0bf35c810da5fb26176da0da5a3e77472fb242743fb3063c
6
+ metadata.gz: 2eed0ed67ad09ac3a2fe29e7d0acb516c7f07cd6626a9d1390258aa8ca18653f1c8744ed84a1107753855eb7557f52e45404fead5012b198119deb2ef3f5eb8e
7
+ data.tar.gz: 6530399b6eebe0c779c41995f39a7e4e3d2fab6a562a525b02b05e76ae75a7df885e8822f9b30bfdc2b9ee2c46b15fa4d0ee069012ef9e6773335521887c11d6
data/.rubocop.yml CHANGED
@@ -1,16 +1,20 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 1.9
4
+ TargetRubyVersion: 2.0
5
5
  Exclude:
6
6
  - 'vendor/**/*'
7
7
  - 'tmp/**/*'
8
8
  - 'pkg/**/*'
9
+ - 'lib/monkey_patches.rb'
9
10
 
10
- # we still support ruby 1.8
11
11
  Style/HashSyntax:
12
12
  Enabled: false
13
13
 
14
14
  # dealbreaker:
15
15
  Style/TrailingCommaInLiteral:
16
16
  Enabled: false
17
+
18
+ # would require external library
19
+ Style/IndentHeredoc:
20
+ Enabled: false
data/.travis.yml CHANGED
@@ -2,17 +2,19 @@
2
2
  sudo: false
3
3
  language: ruby
4
4
  cache: bundler
5
+ dist: trusty
5
6
  before_install:
6
7
  - gem update --system
7
8
  - gem install bundler
8
9
  script: 'bundle exec rake test'
9
10
  rvm:
10
- - 1.9.3
11
11
  - 2.0
12
- - 2.1
13
- - 2.2
12
+ - 2.1.9
13
+ - 2.2.6
14
14
  - 2.3.3
15
15
  - 2.4.0
16
+ notifications:
17
+ email: false
16
18
  deploy:
17
19
  provider: rubygems
18
20
  api_key:
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 2017-05-05 - 0.8.0
4
+
5
+ ### Summary
6
+
7
+ This release now prefers `.erb` suffixes on template files. To convert your moduleroot directory, run this command in your configs repo:
8
+
9
+ find moduleroot/ -type f -exec git mv {} {}.erb \;
10
+
11
+ Note that any `.erb`-suffixed configuration keys in `config_defaults.yml`, and `.sync.yml` need to be removed by hand. (This was unreleased functionality, will not affect most users.)
12
+
13
+ #### Refactoring
14
+
15
+ - Prefer `.erb` suffixes on template files, issue deprecation warning for templates without the extension
16
+ - Require Ruby 2.0 or higher
17
+
18
+ #### Bugfixes
19
+
20
+ - Fix dependency on `git` gem for diff functionality
21
+ - Fix error from `git` gem when diff contained line ending changes
22
+
3
23
  ## 2017-02-13 - 0.7.2
4
24
 
5
25
  Fixes an issue releasing 0.7.1, no functional changes.
data/Gemfile CHANGED
@@ -1,8 +1,3 @@
1
1
  source ENV['GEM_SOURCE'] || 'https://rubygems.org'
2
2
 
3
- if ENV['TRAVIS_RUBY_VERSION'] && ENV['TRAVIS_RUBY_VERSION'] == '1.9.3'
4
- gem 'json_pure', '~> 1.0'
5
- gem 'rubocop', '< 0.42.0'
6
- end
7
-
8
3
  gemspec
data/README.md CHANGED
@@ -27,7 +27,7 @@ Puppet Labs module engineers manage the zoo of Puppet modules on GitHub, and
27
27
  has now been restructured and generalized to be used within other
28
28
  organizations. Puppet modules within an organization tend to have a number of
29
29
  meta-files that are identical or very similar between modules, such as the
30
- Gemfile, .travis.yml, .gitignore, or spec\_helper.rb. If a file needs to
30
+ `Gemfile`, `.travis.yml`, `.gitignore`, or `spec\_helper.rb`. If a file needs to
31
31
  change in one module, it likely needs to change in the same way in every other
32
32
  module that the organization manages.
33
33
 
@@ -60,22 +60,24 @@ of this configuration directory. [The configuration for the Puppet Labs
60
60
  modules](https://github.com/puppetlabs/modulesync\_configs), can be used as an
61
61
  example for your own configuration. The configuration directory contains a
62
62
  directory called moduleroot which mirrors the structure of a module. The files
63
- in the moduleroot could be flat files or ERB templates. The templates are
64
- rendered using values from a file called config\_defaults.yml in the root (not
63
+ in the moduleroot are ERB templates, and MUST be named after the target file,
64
+ with `.erb.` appended. The templates are
65
+ rendered using values from a file called `config\_defaults.yml` in the root (not
65
66
  moduleroot) of the configuration directory. The default values can be
66
- overridden or extended by adding a file called .sync.yml to the module itself.
67
+ overridden or extended by adding a file called `.sync.yml` to the module itself.
67
68
  This allows us to, for example, have a set of "required" gems that are added
68
69
  to all Gemfiles, and a set of "optional" gems that a single module might add.
69
70
 
70
71
  Within the templates, values can be accessed in the `@configs` hash, which is
71
- merged from the values under the keys `:global` and the current file name.
72
+ merged from the values under the keys `:global` and the target file name (no
73
+ `.erb` suffix).
72
74
 
73
- The list of modules to manage is in managed\_modules.yml in the configuration
75
+ The list of modules to manage is in `managed\_modules.yml` in the configuration
74
76
  directory. This lists just the names of the modules to be managed.
75
77
 
76
78
  ModuleSync can be called from the command line with parameters to change the
77
79
  branch you're working on or the remote to clone from and push to. You can also
78
- define these parameters in a file named modulesync.yml in the configuration
80
+ define these parameters in a file named `modulesync.yml` in the configuration
79
81
  directory.
80
82
 
81
83
  Installing
@@ -122,6 +124,7 @@ msync update --noop
122
124
  ```
123
125
 
124
126
  #### Offline support
127
+
125
128
  The --offline flag was added to allow a user to disable git support within
126
129
  msync. One reason for this is because the user wants to control git commands
127
130
  external to msync. Note, when using this command, msync assumes you have
@@ -359,6 +362,5 @@ As commented, files within moduleroot directory can be flat files or ERB templat
359
362
  The Templates
360
363
  -------------
361
364
 
362
- See the [modulesync\_configs](https://github.com/puppetlabs/modulesync_configs)
363
- repository for an explanation of the templates that Puppet Labs uses on its
364
- modules.
365
+ See [Puppet's modulesync\_configs](https://github.com/puppetlabs/modulesync_configs) and [Vox Pupuli's modulesync\_configs](https://github.com/voxpupuli/modulesync_configs)
366
+ repositories for different templates currently in use.
data/Rakefile CHANGED
@@ -18,4 +18,4 @@ Cucumber::Rake::Task.new do |t|
18
18
  t.cucumber_opts << '--format pretty'
19
19
  end
20
20
 
21
- task :test => [:clean, :spec, :cucumber, :rubocop]
21
+ task :test => %i[clean spec cucumber rubocop]
@@ -2,6 +2,39 @@ Feature: update
2
2
  ModuleSync needs to update module boilerplate
3
3
 
4
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.erb" 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:
30
+ """
31
+ Files added:
32
+ test
33
+ """
34
+ Given I run `cat modules/puppet-test/test`
35
+ Then the output should contain "aruba"
36
+
37
+ Scenario: Adding a new file, without the .erb suffix
5
38
  Given a file named "managed_modules.yml" with:
6
39
  """
7
40
  ---
@@ -26,6 +59,115 @@ Feature: update
26
59
  """
27
60
  When I run `msync update --noop`
28
61
  Then the exit status should be 0
62
+ And the output should match:
63
+ """
64
+ Warning: using './moduleroot//test' as template without '.erb' suffix
65
+ """
66
+ And the output should match:
67
+ """
68
+ Files added:
69
+ test
70
+ """
71
+ Given I run `cat modules/puppet-test/test`
72
+ Then the output should contain "aruba"
73
+
74
+ Scenario: Adding a new file using global values
75
+ Given a file named "managed_modules.yml" with:
76
+ """
77
+ ---
78
+ - puppet-test
79
+ """
80
+ And a file named "modulesync.yml" with:
81
+ """
82
+ ---
83
+ namespace: maestrodev
84
+ git_base: https://github.com/
85
+ """
86
+ And a file named "config_defaults.yml" with:
87
+ """
88
+ ---
89
+ :global:
90
+ name: aruba
91
+ """
92
+ And a directory named "moduleroot"
93
+ And a file named "moduleroot/test.erb" with:
94
+ """
95
+ <%= @configs['name'] %>
96
+ """
97
+ When I run `msync update --noop`
98
+ Then the exit status should be 0
99
+ And the output should match:
100
+ """
101
+ Files added:
102
+ test
103
+ """
104
+ Given I run `cat modules/puppet-test/test`
105
+ Then the output should contain "aruba"
106
+
107
+ Scenario: Adding a new file overriding global values
108
+ Given a file named "managed_modules.yml" with:
109
+ """
110
+ ---
111
+ - puppet-test
112
+ """
113
+ And a file named "modulesync.yml" with:
114
+ """
115
+ ---
116
+ namespace: maestrodev
117
+ git_base: https://github.com/
118
+ """
119
+ And a file named "config_defaults.yml" with:
120
+ """
121
+ ---
122
+ :global:
123
+ name: global
124
+
125
+ test:
126
+ name: aruba
127
+ """
128
+ And a directory named "moduleroot"
129
+ And a file named "moduleroot/test.erb" with:
130
+ """
131
+ <%= @configs['name'] %>
132
+ """
133
+ When I run `msync update --noop`
134
+ Then the exit status should be 0
135
+ And the output should match:
136
+ """
137
+ Files added:
138
+ test
139
+ """
140
+ Given I run `cat modules/puppet-test/test`
141
+ Then the output should contain "aruba"
142
+
143
+ Scenario: Adding a new file ignoring global values
144
+ Given a file named "managed_modules.yml" with:
145
+ """
146
+ ---
147
+ - puppet-test
148
+ """
149
+ And a file named "modulesync.yml" with:
150
+ """
151
+ ---
152
+ namespace: maestrodev
153
+ git_base: https://github.com/
154
+ """
155
+ And a file named "config_defaults.yml" with:
156
+ """
157
+ ---
158
+ :global:
159
+ key: global
160
+
161
+ test:
162
+ name: aruba
163
+ """
164
+ And a directory named "moduleroot"
165
+ And a file named "moduleroot/test.erb" with:
166
+ """
167
+ <%= @configs['name'] %>
168
+ """
169
+ When I run `msync update --noop`
170
+ Then the exit status should be 0
29
171
  And the output should match:
30
172
  """
31
173
  Files added:
@@ -53,7 +195,7 @@ Feature: update
53
195
  name: aruba
54
196
  """
55
197
  And a directory named "moduleroot"
56
- And a file named "moduleroot/test" with:
198
+ And a file named "moduleroot/test.erb" with:
57
199
  """
58
200
  <% @configs.each do |c| -%>
59
201
  <%= c['name'] %>
@@ -81,7 +223,7 @@ Feature: update
81
223
  name: aruba
82
224
  """
83
225
  And a directory named "moduleroot"
84
- And a file named "moduleroot/test" with:
226
+ And a file named "moduleroot/test.erb" with:
85
227
  """
86
228
  <% @configs.each do |c| -%>
87
229
  <%= c['name'] %>
@@ -109,7 +251,7 @@ Feature: update
109
251
  gem_source: https://somehost.com
110
252
  """
111
253
  And a directory named "moduleroot"
112
- And a file named "moduleroot/Gemfile" with:
254
+ And a file named "moduleroot/Gemfile.erb" with:
113
255
  """
114
256
  source '<%= @configs['gem_source'] %>'
115
257
  """
@@ -136,7 +278,7 @@ Feature: update
136
278
  gem_source: https://somehost.com
137
279
  """
138
280
  And a directory named "moduleroot"
139
- And a file named "moduleroot/Gemfile" with:
281
+ And a file named "moduleroot/Gemfile.erb" with:
140
282
  """
141
283
  source '<%= @configs['gem_source'] %>'
142
284
  """
@@ -168,7 +310,7 @@ Feature: update
168
310
  unmanaged: true
169
311
  """
170
312
  And a directory named "moduleroot"
171
- And a file named "moduleroot/Gemfile" with:
313
+ And a file named "moduleroot/Gemfile.erb" with:
172
314
  """
173
315
  source '<%= @configs['gem_source'] %>'
174
316
  """
@@ -208,7 +350,7 @@ Feature: update
208
350
  delete: true
209
351
  """
210
352
  And a directory named "moduleroot"
211
- And a file named "moduleroot/Gemfile" with:
353
+ And a file named "moduleroot/Gemfile.erb" with:
212
354
  """
213
355
  source '<%= @configs['gem_source'] %>'
214
356
  """
@@ -262,7 +404,7 @@ Feature: update
262
404
  unmanaged: true
263
405
  """
264
406
  And a directory named "moduleroot/spec"
265
- And a file named "moduleroot/spec/spec_helper.rb" with:
407
+ And a file named "moduleroot/spec/spec_helper.rb.erb" with:
266
408
  """
267
409
  some spec_helper fud
268
410
  """
@@ -303,7 +445,7 @@ Feature: update
303
445
  require:
304
446
  - puppetlabs_spec_helper/module_helper
305
447
  """
306
- And a file named "moduleroot/spec/spec_helper.rb" with:
448
+ And a file named "moduleroot/spec/spec_helper.rb.erb" with:
307
449
  """
308
450
  <% @configs['require'].each do |required| -%>
309
451
  require '<%= required %>'
@@ -341,7 +483,7 @@ Feature: update
341
483
  require:
342
484
  - puppetlabs_spec_helper/module_helper
343
485
  """
344
- And a file named "moduleroot/spec/spec_helper.rb" with:
486
+ And a file named "moduleroot/spec/spec_helper.rb.erb" with:
345
487
  """
346
488
  <% @configs['require'].each do |required| -%>
347
489
  require '<%= required %>'
@@ -369,7 +511,7 @@ Feature: update
369
511
  require:
370
512
  - puppetlabs_spec_helper/module_helper
371
513
  """
372
- And a file named "moduleroot/spec/spec_helper.rb" with:
514
+ And a file named "moduleroot/spec/spec_helper.rb.erb" with:
373
515
  """
374
516
  <% @configs['require'].each do |required| -%>
375
517
  require '<%= required %>'
@@ -434,7 +576,7 @@ Feature: update
434
576
  name: aruba
435
577
  """
436
578
  And a directory named "moduleroot"
437
- And a file named "moduleroot/test" with:
579
+ And a file named "moduleroot/test.erb" with:
438
580
  """
439
581
  <%= @configs['name'] %>
440
582
  """
@@ -469,7 +611,7 @@ Feature: update
469
611
  name: aruba
470
612
  """
471
613
  And a directory named "moduleroot"
472
- And a file named "moduleroot/test" with:
614
+ And a file named "moduleroot/test.erb" with:
473
615
  """
474
616
  <%= @configs['name'] %>
475
617
  """
@@ -505,7 +647,7 @@ Feature: update
505
647
  name: aruba
506
648
  """
507
649
  And a directory named "moduleroot"
508
- And a file named "moduleroot/test" with:
650
+ And a file named "moduleroot/test.erb" with:
509
651
  """
510
652
  <%= @configs['name'] %>
511
653
  """
@@ -538,7 +680,7 @@ Feature: update
538
680
  require:
539
681
  - puppetlabs_spec_helper/module_helper
540
682
  """
541
- And a file named "moduleroot/spec/spec_helper.rb" with:
683
+ And a file named "moduleroot/spec/spec_helper.rb.erb" with:
542
684
  """
543
685
  <% @configs['require'].each do |required| -%>
544
686
  require '<%= required %>'
@@ -591,7 +733,7 @@ Feature: update
591
733
  name: aruba
592
734
  """
593
735
  And a directory named "moduleroot"
594
- And a file named "moduleroot/test" with:
736
+ And a file named "moduleroot/test.erb" with:
595
737
  """
596
738
  <%= @configs['name'] %>
597
739
  """
@@ -607,7 +749,7 @@ Feature: update
607
749
  Given I run `cat modules/puppet-lib-file_concat/.git/config`
608
750
  Then the output should contain "url = https://github.com/electrical/puppet-lib-file_concat.git"
609
751
 
610
- Scenario: Modifying an existing file with values expoxed by the module
752
+ Scenario: Modifying an existing file with values exposed by the module
611
753
  Given a file named "managed_modules.yml" with:
612
754
  """
613
755
  ---
@@ -625,7 +767,7 @@ Feature: update
625
767
  README.md:
626
768
  """
627
769
  And a directory named "moduleroot"
628
- And a file named "moduleroot/README.md" with:
770
+ And a file named "moduleroot/README.md.erb" with:
629
771
  """
630
772
  echo '<%= @configs[:git_base] + @configs[:namespace] %>'
631
773
  """
@@ -652,7 +794,7 @@ Feature: update
652
794
  gem_source: https://somehost.com
653
795
  """
654
796
  And a directory named "moduleroot"
655
- And a file named "moduleroot/Gemfile" with:
797
+ And a file named "moduleroot/Gemfile.erb" with:
656
798
  """
657
799
  source '<%= @configs['gem_source'] %>'
658
800
  """
@@ -147,7 +147,7 @@ module ModuleSync
147
147
  def self.untracked_unignored_files(repo)
148
148
  ignore_path = "#{repo.dir.path}/.gitignore"
149
149
  ignored = File.exist?(ignore_path) ? File.open(ignore_path).read.split : []
150
- repo.status.untracked.keep_if { |f, _| !ignored.any? { |i| File.fnmatch(i, f) } }
150
+ repo.status.untracked.keep_if { |f, _| ignored.none? { |i| File.fnmatch(i, f) } }
151
151
  end
152
152
 
153
153
  def self.update_noop(name, options)
@@ -9,10 +9,16 @@ module ModuleSync
9
9
  end
10
10
  end
11
11
 
12
- def self.build(from_erb_template)
13
- erb_obj = ERB.new(File.read(from_erb_template), nil, '-')
14
- erb_obj.filename = from_erb_template.chomp('.erb')
15
- erb_obj.def_method(ForgeModuleFile, 'render()')
12
+ def self.build(target_name)
13
+ template_file = if !File.exist?("#{target_name}.erb") && File.exist?(target_name)
14
+ STDERR.puts "Warning: using '#{target_name}' as template without '.erb' suffix"
15
+ target_name
16
+ else
17
+ "#{target_name}.erb"
18
+ end
19
+ erb_obj = ERB.new(File.read(template_file), nil, '-')
20
+ erb_obj.filename = template_file
21
+ erb_obj.def_method(ForgeModuleFile, 'render()', template_file)
16
22
  erb_obj
17
23
  end
18
24
 
@@ -24,10 +30,10 @@ module ModuleSync
24
30
  ForgeModuleFile.new(configs).render
25
31
  end
26
32
 
27
- def self.sync(template, to_file)
28
- path = to_file.rpartition('/').first
33
+ def self.sync(template, target_name)
34
+ path = target_name.rpartition('/').first
29
35
  FileUtils.mkdir_p(path) unless path.empty?
30
- File.open(to_file, 'w') do |file|
36
+ File.open(target_name, 'w') do |file|
31
37
  file.write(template)
32
38
  end
33
39
  end
@@ -1,6 +1,7 @@
1
1
 
2
2
  module ModuleSync
3
3
  # Encapsulate a configs for a module, providing easy access to its parts
4
+ # All configs MUST be keyed by the relative target filename
4
5
  class Settings
5
6
  attr_reader :global_defaults, :defaults, :module_defaults, :module_configs, :additional_settings
6
7
 
@@ -12,28 +13,36 @@ module ModuleSync
12
13
  @additional_settings = additional_settings
13
14
  end
14
15
 
15
- def build_file_configs(filename)
16
- global_defaults.merge(defaults[filename] || {}).merge(module_defaults).merge(module_configs[filename] || {}).merge(additional_settings)
16
+ def lookup_config(hash, target_name)
17
+ hash[target_name] || {}
17
18
  end
18
19
 
19
- def managed?(filename)
20
- Pathname.new(filename).ascend do |v|
20
+ def build_file_configs(target_name)
21
+ file_def = lookup_config(defaults, target_name)
22
+ file_md = lookup_config(module_defaults, target_name)
23
+ file_mc = lookup_config(module_configs, target_name)
24
+
25
+ global_defaults.merge(file_def).merge(file_md).merge(file_mc).merge(additional_settings)
26
+ end
27
+
28
+ def managed?(target_name)
29
+ Pathname.new(target_name).ascend do |v|
21
30
  configs = build_file_configs(v.to_s)
22
31
  return false if configs['unmanaged']
23
32
  end
24
33
  true
25
34
  end
26
35
 
27
- # given a list of existing files in the repo, return everything that we might want to act on
28
- def managed_files(file_list)
29
- (file_list | defaults.keys | module_configs.keys).select do |f|
36
+ # given a list of templates in the repo, return everything that we might want to act on
37
+ def managed_files(target_name_list)
38
+ (target_name_list | defaults.keys | module_configs.keys).select do |f|
30
39
  (f != ModuleSync::GLOBAL_DEFAULTS_KEY) && managed?(f)
31
40
  end
32
41
  end
33
42
 
34
- # returns a list of files that should not be touched
35
- def unmanaged_files(file_list)
36
- (file_list | defaults.keys | module_configs.keys).select do |f|
43
+ # returns a list of templates that should not be touched
44
+ def unmanaged_files(target_name_list)
45
+ (target_name_list | defaults.keys | module_configs.keys).select do |f|
37
46
  (f != ModuleSync::GLOBAL_DEFAULTS_KEY) && !managed?(f)
38
47
  end
39
48
  end
data/lib/modulesync.rb CHANGED
@@ -7,6 +7,7 @@ require 'modulesync/hook'
7
7
  require 'modulesync/renderer'
8
8
  require 'modulesync/settings'
9
9
  require 'modulesync/util'
10
+ require 'monkey_patches'
10
11
 
11
12
  module ModuleSync
12
13
  include Constants
@@ -30,7 +31,8 @@ module ModuleSync
30
31
 
31
32
  def self.local_files(path)
32
33
  if File.exist?(path)
33
- local_files = Find.find(path).collect { |file| file unless File.directory?(file) }.compact
34
+ # only select *.erb files, and strip the extension. This way all the code will only have to handle bare paths, except when reading the actual ERB text
35
+ local_files = Find.find(path).find_all { |p| p =~ /.erb$/ && !File.directory?(p) }.collect { |p| p.chomp('.erb') }.to_a
34
36
  else
35
37
  puts "#{path} does not exist. Check that you are working in your module configs directory or that you have passed in the correct directory with -c."
36
38
  exit
@@ -48,7 +50,7 @@ module ModuleSync
48
50
  exit
49
51
  end
50
52
  managed_modules.select! { |m| m =~ Regexp.new(filter) } unless filter.nil?
51
- managed_modules.select! { |m| m !~ Regexp.new(negative_filter) } unless negative_filter.nil?
53
+ managed_modules.reject! { |m| m =~ Regexp.new(negative_filter) } unless negative_filter.nil?
52
54
  managed_modules
53
55
  end
54
56
 
@@ -88,7 +90,7 @@ module ModuleSync
88
90
 
89
91
  def self.manage_module(puppet_module, module_files, module_options, defaults, options)
90
92
  puts "Syncing #{puppet_module}"
91
- namespace, module_name = self.module_name(puppet_module, options[:namespace])
93
+ namespace, module_name = module_name(puppet_module, options[:namespace])
92
94
  unless options[:offline]
93
95
  git_base = options[:git_base]
94
96
  git_uri = "#{git_base}#{namespace}"
@@ -0,0 +1,40 @@
1
+ module Git
2
+ class Diff
3
+ # Monkey patch process_full_diff until https://github.com/schacon/ruby-git/issues/326 is resolved
4
+ def process_full_diff
5
+ defaults = {
6
+ :mode => '',
7
+ :src => '',
8
+ :dst => '',
9
+ :type => 'modified'
10
+ }
11
+ final = {}
12
+ current_file = nil
13
+ full_diff_utf8_encoded = @full_diff.encode("UTF-8", "binary", {
14
+ :invalid => :replace,
15
+ :undef => :replace
16
+ })
17
+ full_diff_utf8_encoded.split("\n").each do |line|
18
+ if m = /^diff --git a\/(.*?) b\/(.*?)/.match(line)
19
+ current_file = m[1]
20
+ final[current_file] = defaults.merge({:patch => line, :path => current_file})
21
+ elsif !current_file.nil?
22
+ if m = /^index (.......)\.\.(.......)( ......)*/.match(line)
23
+ final[current_file][:src] = m[1]
24
+ final[current_file][:dst] = m[2]
25
+ final[current_file][:mode] = m[3].strip if m[3]
26
+ end
27
+ if m = /^([[:alpha:]]*?) file mode (......)/.match(line)
28
+ final[current_file][:type] = m[1]
29
+ final[current_file][:mode] = m[2]
30
+ end
31
+ if m = /^Binary files /.match(line)
32
+ final[current_file][:binary] = true
33
+ end
34
+ final[current_file][:patch] << "\n" + line
35
+ end
36
+ end
37
+ final.map { |e| [e[0], DiffFile.new(@base, e[1])] }
38
+ end
39
+ end
40
+ end
data/modulesync.gemspec CHANGED
@@ -1,16 +1,18 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
 
5
6
  Gem::Specification.new do |spec|
6
- spec.name = 'modulesync'
7
- spec.version = '0.7.2'
8
- spec.authors = ['Vox Pupuli']
9
- spec.email = ['voxpupuli@groups.io']
10
- spec.summary = 'Puppet Module Synchronizer'
11
- spec.description = 'Utility to synchronize common files across puppet modules in Github.'
12
- spec.homepage = 'http://github.com/voxpupuli/modulesync'
13
- spec.license = 'Apache-2.0'
7
+ spec.name = 'modulesync'
8
+ spec.version = '0.8.0'
9
+ spec.authors = ['Vox Pupuli']
10
+ spec.email = ['voxpupuli@groups.io']
11
+ spec.summary = 'Puppet Module Synchronizer'
12
+ spec.description = 'Utility to synchronize common files across puppet modules in Github.'
13
+ spec.homepage = 'http://github.com/voxpupuli/modulesync'
14
+ spec.license = 'Apache-2.0'
15
+ spec.required_ruby_version = '>= 2.0.0'
14
16
 
15
17
  spec.files = `git ls-files -z`.split("\x0")
16
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -18,12 +20,12 @@ Gem::Specification.new do |spec|
18
20
  spec.require_paths = ['lib']
19
21
 
20
22
  spec.add_development_dependency 'aruba'
21
- spec.add_development_dependency 'bundler', '~> 1.6'
23
+ spec.add_development_dependency 'bundler'
22
24
  spec.add_development_dependency 'rake'
23
25
  spec.add_development_dependency 'rspec'
24
26
  spec.add_development_dependency 'rubocop'
25
27
 
26
- spec.add_runtime_dependency 'git', '~>1.2'
28
+ spec.add_runtime_dependency 'git', '~>1.3'
27
29
  spec.add_runtime_dependency 'puppet-blacksmith', '~>3.0'
28
30
  spec.add_runtime_dependency 'thor'
29
31
  end
@@ -19,7 +19,7 @@ describe ModuleSync::Settings do
19
19
  it { expect(subject.managed?('Gemfile')).to eq true }
20
20
  it { expect(subject.managed?('Gemfile/foo')).to eq true }
21
21
  it { expect(subject.managed_files([])).to eq ['Gemfile'] }
22
- it { expect(subject.managed_files(%w(Rakefile Gemfile other_file))).to eq %w(Gemfile other_file) }
22
+ it { expect(subject.managed_files(%w[Rakefile Gemfile other_file])).to eq %w[Gemfile other_file] }
23
23
  it { expect(subject.unmanaged_files([])).to eq ['Rakefile'] }
24
- it { expect(subject.unmanaged_files(%w(Rakefile Gemfile other_file))).to eq ['Rakefile'] }
24
+ it { expect(subject.unmanaged_files(%w[Rakefile Gemfile other_file])).to eq ['Rakefile'] }
25
25
  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.7.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vox Pupuli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-13 00:00:00.000000000 Z
11
+ date: 2017-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aruba
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.6'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.6'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.2'
89
+ version: '1.3'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.2'
96
+ version: '1.3'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: puppet-blacksmith
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -155,6 +155,7 @@ files:
155
155
  - lib/modulesync/renderer.rb
156
156
  - lib/modulesync/settings.rb
157
157
  - lib/modulesync/util.rb
158
+ - lib/monkey_patches.rb
158
159
  - modulesync.gemspec
159
160
  - spec/spec_helper.rb
160
161
  - spec/unit/modulesync/settings_spec.rb
@@ -170,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
171
  requirements:
171
172
  - - ">="
172
173
  - !ruby/object:Gem::Version
173
- version: '0'
174
+ version: 2.0.0
174
175
  required_rubygems_version: !ruby/object:Gem::Requirement
175
176
  requirements:
176
177
  - - ">="
@@ -178,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
179
  version: '0'
179
180
  requirements: []
180
181
  rubyforge_project:
181
- rubygems_version: 2.4.5
182
+ rubygems_version: 2.4.8
182
183
  signing_key:
183
184
  specification_version: 4
184
185
  summary: Puppet Module Synchronizer