modulesync 0.8.2 → 0.9.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.
- checksums.yaml +4 -4
 - data/.travis.yml +0 -3
 - data/CHANGELOG.md +16 -0
 - data/Gemfile +2 -0
 - data/features/step_definitions/git_steps.rb +23 -0
 - data/features/update.feature +73 -1
 - data/lib/modulesync.rb +7 -4
 - data/lib/modulesync/cli.rb +7 -2
 - data/lib/modulesync/git.rb +24 -7
 - data/lib/monkey_patches.rb +15 -0
 - data/modulesync.gemspec +1 -1
 - data/spec/unit/modulesync_spec.rb +14 -0
 - metadata +5 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: aba3647204bfcc8853cafeddbf1e4f1083ceaade7fb1806bd06b36e37d6d593e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ce4305980ed768ffd80580c4618c7d921e0c7c6e17b57edc3dae0c10eacbeef6
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 0cfda65f2a020913fa4cd928e22daac9e5c141f7881afaed928b28af846fe86466fff64314e89b04b9d3cb32bf8e4387ec0410e7142215ac5e0412b15c845d62
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 083fdbb949ce978be0958f3ac2baa8390d38d7221c846b934b5b2e3e49cc60992d662b0afd8322d4efeb3bbec9643faf73b7cba95ba3f91d388953365837494a
         
     | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,21 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Changelog
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## 2018-02-15
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## Summary
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            This is an awesome release - Now honors the repo default branch[#142](https://github.com/voxpupuli/modulesync/pull/142)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ### Bugfixes
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              * Monkey patch ls_files until ruby-git/ruby-git#320 is resolved
         
     | 
| 
      
 12 
     | 
    
         
            +
              * Reraise exception rather than exit so we can rescue a derived StandardError when using skip_broken option
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            ### Enhancements
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              * Add new option to produce a failure exit code on warnings
         
     | 
| 
      
 17 
     | 
    
         
            +
              * Remove hard coding of managed_modules.yml which means that options passed to ModuleSync.update can override the filename
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       3 
19 
     | 
    
         
             
            ## 2017-11-03 - 0.8.2
         
     | 
| 
       4 
20 
     | 
    
         | 
| 
       5 
21 
     | 
    
         
             
            ### Summary
         
     | 
    
        data/Gemfile
    CHANGED
    
    
| 
         @@ -22,3 +22,26 @@ Given 'a remote module repository' do 
     | 
|
| 
       22 
22 
     | 
    
         
             
              git_base: file://#{expand_path('.')}/
         
     | 
| 
       23 
23 
     | 
    
         
             
              CONFIG
         
     | 
| 
       24 
24 
     | 
    
         
             
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            Given /a remote module repository with "(.+?)" as the default branch/ do |branch| # rubocop:disable Lint/AmbiguousRegexpLiteral
         
     | 
| 
      
 27 
     | 
    
         
            +
              steps %(
         
     | 
| 
      
 28 
     | 
    
         
            +
                Given a directory named "sources"
         
     | 
| 
      
 29 
     | 
    
         
            +
                And I run `git clone --mirror https://github.com/maestrodev/puppet-test sources/puppet-test`
         
     | 
| 
      
 30 
     | 
    
         
            +
                And a file named "managed_modules.yml" with:
         
     | 
| 
      
 31 
     | 
    
         
            +
                  """
         
     | 
| 
      
 32 
     | 
    
         
            +
                  ---
         
     | 
| 
      
 33 
     | 
    
         
            +
                    - puppet-test
         
     | 
| 
      
 34 
     | 
    
         
            +
                  """
         
     | 
| 
      
 35 
     | 
    
         
            +
              )
         
     | 
| 
      
 36 
     | 
    
         
            +
              write_file('modulesync.yml', <<-CONFIG)
         
     | 
| 
      
 37 
     | 
    
         
            +
            ---
         
     | 
| 
      
 38 
     | 
    
         
            +
              namespace: sources
         
     | 
| 
      
 39 
     | 
    
         
            +
              git_base: file://#{expand_path('.')}/
         
     | 
| 
      
 40 
     | 
    
         
            +
              CONFIG
         
     | 
| 
      
 41 
     | 
    
         
            +
              cd('sources/puppet-test') do
         
     | 
| 
      
 42 
     | 
    
         
            +
                steps %(
         
     | 
| 
      
 43 
     | 
    
         
            +
                  And I run `git branch -M master #{branch}`
         
     | 
| 
      
 44 
     | 
    
         
            +
                  And I run `git symbolic-ref HEAD refs/heads/#{branch}`
         
     | 
| 
      
 45 
     | 
    
         
            +
                )
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
    
        data/features/update.feature
    CHANGED
    
    | 
         @@ -34,6 +34,32 @@ Feature: update 
     | 
|
| 
       34 
34 
     | 
    
         
             
                Given I run `cat modules/puppet-test/test`
         
     | 
| 
       35 
35 
     | 
    
         
             
                Then the output should contain "aruba"
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
      
 37 
     | 
    
         
            +
              Scenario: Using skip_broken option and adding a new file to repo without write access
         
     | 
| 
      
 38 
     | 
    
         
            +
                Given a file named "managed_modules.yml" with:
         
     | 
| 
      
 39 
     | 
    
         
            +
                  """
         
     | 
| 
      
 40 
     | 
    
         
            +
                  ---
         
     | 
| 
      
 41 
     | 
    
         
            +
                    - puppet-test
         
     | 
| 
      
 42 
     | 
    
         
            +
                  """
         
     | 
| 
      
 43 
     | 
    
         
            +
                And a file named "modulesync.yml" with:
         
     | 
| 
      
 44 
     | 
    
         
            +
                  """
         
     | 
| 
      
 45 
     | 
    
         
            +
                  ---
         
     | 
| 
      
 46 
     | 
    
         
            +
                    namespace: maestrodev
         
     | 
| 
      
 47 
     | 
    
         
            +
                    git_base: 'git@github.com:'
         
     | 
| 
      
 48 
     | 
    
         
            +
                  """
         
     | 
| 
      
 49 
     | 
    
         
            +
                And a file named "config_defaults.yml" with:
         
     | 
| 
      
 50 
     | 
    
         
            +
                  """
         
     | 
| 
      
 51 
     | 
    
         
            +
                  ---
         
     | 
| 
      
 52 
     | 
    
         
            +
                  test:
         
     | 
| 
      
 53 
     | 
    
         
            +
                    name: aruba
         
     | 
| 
      
 54 
     | 
    
         
            +
                  """
         
     | 
| 
      
 55 
     | 
    
         
            +
                And a directory named "moduleroot"
         
     | 
| 
      
 56 
     | 
    
         
            +
                And a file named "moduleroot/test.erb" with:
         
     | 
| 
      
 57 
     | 
    
         
            +
                  """
         
     | 
| 
      
 58 
     | 
    
         
            +
                  <%= @configs['name'] %>
         
     | 
| 
      
 59 
     | 
    
         
            +
                  """
         
     | 
| 
      
 60 
     | 
    
         
            +
                When I run `msync update -s -m "Add test"`
         
     | 
| 
      
 61 
     | 
    
         
            +
                Then the exit status should be 0
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       37 
63 
     | 
    
         
             
              Scenario: Adding a new file to repo without write access
         
     | 
| 
       38 
64 
     | 
    
         
             
                Given a file named "managed_modules.yml" with:
         
     | 
| 
       39 
65 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -44,7 +70,7 @@ Feature: update 
     | 
|
| 
       44 
70 
     | 
    
         
             
                  """
         
     | 
| 
       45 
71 
     | 
    
         
             
                  ---
         
     | 
| 
       46 
72 
     | 
    
         
             
                    namespace: maestrodev
         
     | 
| 
       47 
     | 
    
         
            -
                    git_base: git@github.com:
         
     | 
| 
      
 73 
     | 
    
         
            +
                    git_base: 'git@github.com:'
         
     | 
| 
       48 
74 
     | 
    
         
             
                  """
         
     | 
| 
       49 
75 
     | 
    
         
             
                And a file named "config_defaults.yml" with:
         
     | 
| 
       50 
76 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -258,6 +284,34 @@ Feature: update 
     | 
|
| 
       258 
284 
     | 
    
         
             
                When I run `msync update --noop -s`
         
     | 
| 
       259 
285 
     | 
    
         
             
                Then the exit status should be 0
         
     | 
| 
       260 
286 
     | 
    
         | 
| 
      
 287 
     | 
    
         
            +
              Scenario: Using skip_broken and fail_on_warnings options with invalid files
         
     | 
| 
      
 288 
     | 
    
         
            +
                Given a file named "managed_modules.yml" with:
         
     | 
| 
      
 289 
     | 
    
         
            +
                  """
         
     | 
| 
      
 290 
     | 
    
         
            +
                  ---
         
     | 
| 
      
 291 
     | 
    
         
            +
                    - puppet-test
         
     | 
| 
      
 292 
     | 
    
         
            +
                  """
         
     | 
| 
      
 293 
     | 
    
         
            +
                And a file named "modulesync.yml" with:
         
     | 
| 
      
 294 
     | 
    
         
            +
                  """
         
     | 
| 
      
 295 
     | 
    
         
            +
                  ---
         
     | 
| 
      
 296 
     | 
    
         
            +
                    namespace: maestrodev
         
     | 
| 
      
 297 
     | 
    
         
            +
                    git_base: https://github.com/
         
     | 
| 
      
 298 
     | 
    
         
            +
                  """
         
     | 
| 
      
 299 
     | 
    
         
            +
                And a file named "config_defaults.yml" with:
         
     | 
| 
      
 300 
     | 
    
         
            +
                  """
         
     | 
| 
      
 301 
     | 
    
         
            +
                  ---
         
     | 
| 
      
 302 
     | 
    
         
            +
                  test:
         
     | 
| 
      
 303 
     | 
    
         
            +
                    name: aruba
         
     | 
| 
      
 304 
     | 
    
         
            +
                  """
         
     | 
| 
      
 305 
     | 
    
         
            +
                And a directory named "moduleroot"
         
     | 
| 
      
 306 
     | 
    
         
            +
                And a file named "moduleroot/test.erb" with:
         
     | 
| 
      
 307 
     | 
    
         
            +
                  """
         
     | 
| 
      
 308 
     | 
    
         
            +
                  <% @configs.each do |c| -%>
         
     | 
| 
      
 309 
     | 
    
         
            +
                    <%= c['name'] %>
         
     | 
| 
      
 310 
     | 
    
         
            +
                  <% end %>
         
     | 
| 
      
 311 
     | 
    
         
            +
                  """
         
     | 
| 
      
 312 
     | 
    
         
            +
                When I run `msync update --noop --skip_broken --fail_on_warnings`
         
     | 
| 
      
 313 
     | 
    
         
            +
                Then the exit status should be 1
         
     | 
| 
      
 314 
     | 
    
         
            +
             
     | 
| 
       261 
315 
     | 
    
         
             
              Scenario: Modifying an existing file
         
     | 
| 
       262 
316 
     | 
    
         
             
                Given a file named "managed_modules.yml" with:
         
     | 
| 
       263 
317 
     | 
    
         
             
                  """
         
     | 
| 
         @@ -831,3 +885,21 @@ Feature: update 
     | 
|
| 
       831 
885 
     | 
    
         
             
                Then the exit status should be 0
         
     | 
| 
       832 
886 
     | 
    
         
             
                Then the output should not contain "error"
         
     | 
| 
       833 
887 
     | 
    
         
             
                Then the output should not contain "rejected"
         
     | 
| 
      
 888 
     | 
    
         
            +
             
     | 
| 
      
 889 
     | 
    
         
            +
              Scenario: Repository with a default branch other than master
         
     | 
| 
      
 890 
     | 
    
         
            +
                Given a mocked git configuration
         
     | 
| 
      
 891 
     | 
    
         
            +
                And a remote module repository with "develop" as the default branch
         
     | 
| 
      
 892 
     | 
    
         
            +
                And a file named "config_defaults.yml" with:
         
     | 
| 
      
 893 
     | 
    
         
            +
                  """
         
     | 
| 
      
 894 
     | 
    
         
            +
                  ---
         
     | 
| 
      
 895 
     | 
    
         
            +
                  Gemfile:
         
     | 
| 
      
 896 
     | 
    
         
            +
                    gem_source: https://somehost.com
         
     | 
| 
      
 897 
     | 
    
         
            +
                  """
         
     | 
| 
      
 898 
     | 
    
         
            +
                And a directory named "moduleroot"
         
     | 
| 
      
 899 
     | 
    
         
            +
                And a file named "moduleroot/Gemfile.erb" with:
         
     | 
| 
      
 900 
     | 
    
         
            +
                  """
         
     | 
| 
      
 901 
     | 
    
         
            +
                  source '<%= @configs['gem_source'] %>'
         
     | 
| 
      
 902 
     | 
    
         
            +
                  """
         
     | 
| 
      
 903 
     | 
    
         
            +
                When I run `msync update -m "Update Gemfile"`
         
     | 
| 
      
 904 
     | 
    
         
            +
                Then the exit status should be 0
         
     | 
| 
      
 905 
     | 
    
         
            +
                Then the output should contain "Using repository's default branch: develop"
         
     | 
    
        data/lib/modulesync.rb
    CHANGED
    
    | 
         @@ -43,10 +43,10 @@ module ModuleSync 
     | 
|
| 
       43 
43 
     | 
    
         
             
                local_files.map { |file| file.sub(/#{path}/, '') }
         
     | 
| 
       44 
44 
     | 
    
         
             
              end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
              def self.managed_modules( 
     | 
| 
       47 
     | 
    
         
            -
                managed_modules = Util.parse_config( 
     | 
| 
      
 46 
     | 
    
         
            +
              def self.managed_modules(config_file, filter, negative_filter)
         
     | 
| 
      
 47 
     | 
    
         
            +
                managed_modules = Util.parse_config(config_file)
         
     | 
| 
       48 
48 
     | 
    
         
             
                if managed_modules.empty?
         
     | 
| 
       49 
     | 
    
         
            -
                  puts "No modules found  
     | 
| 
      
 49 
     | 
    
         
            +
                  puts "No modules found in #{config_file}. Check that you specified the right :configs directory and :managed_modules_conf file."
         
     | 
| 
       50 
50 
     | 
    
         
             
                  exit
         
     | 
| 
       51 
51 
     | 
    
         
             
                end
         
     | 
| 
       52 
52 
     | 
    
         
             
                managed_modules.select! { |m| m =~ Regexp.new(filter) } unless filter.nil?
         
     | 
| 
         @@ -126,8 +126,9 @@ module ModuleSync 
     | 
|
| 
       126 
126 
     | 
    
         
             
                local_files = self.local_files(path)
         
     | 
| 
       127 
127 
     | 
    
         
             
                module_files = self.module_files(local_files, path)
         
     | 
| 
       128 
128 
     | 
    
         | 
| 
       129 
     | 
    
         
            -
                managed_modules = self.managed_modules("#{options[:configs]} 
     | 
| 
      
 129 
     | 
    
         
            +
                managed_modules = self.managed_modules("#{options[:configs]}/#{options[:managed_modules_conf]}", options[:filter], options[:negative_filter])
         
     | 
| 
       130 
130 
     | 
    
         | 
| 
      
 131 
     | 
    
         
            +
                errors = false
         
     | 
| 
       131 
132 
     | 
    
         
             
                # managed_modules is either an array or a hash
         
     | 
| 
       132 
133 
     | 
    
         
             
                managed_modules.each do |puppet_module, module_options|
         
     | 
| 
       133 
134 
     | 
    
         
             
                  begin
         
     | 
| 
         @@ -135,8 +136,10 @@ module ModuleSync 
     | 
|
| 
       135 
136 
     | 
    
         
             
                  rescue # rubocop:disable Lint/RescueWithoutErrorClass
         
     | 
| 
       136 
137 
     | 
    
         
             
                    STDERR.puts "Error while updating #{puppet_module}"
         
     | 
| 
       137 
138 
     | 
    
         
             
                    raise unless options[:skip_broken]
         
     | 
| 
      
 139 
     | 
    
         
            +
                    errors = true
         
     | 
| 
       138 
140 
     | 
    
         
             
                    puts "Skipping #{puppet_module} as update process failed"
         
     | 
| 
       139 
141 
     | 
    
         
             
                  end
         
     | 
| 
       140 
142 
     | 
    
         
             
                end
         
     | 
| 
      
 143 
     | 
    
         
            +
                exit 1 if errors && options[:fail_on_warnings]
         
     | 
| 
       141 
144 
     | 
    
         
             
              end
         
     | 
| 
       142 
145 
     | 
    
         
             
            end
         
     | 
    
        data/lib/modulesync/cli.rb
    CHANGED
    
    | 
         @@ -53,8 +53,8 @@ module ModuleSync 
     | 
|
| 
       53 
53 
     | 
    
         
             
                               :desc => 'A regular expression to skip repositories.'
         
     | 
| 
       54 
54 
     | 
    
         
             
                  class_option :branch,
         
     | 
| 
       55 
55 
     | 
    
         
             
                               :aliases => '-b',
         
     | 
| 
       56 
     | 
    
         
            -
                               :desc => 'Branch name to make the changes in. Defaults to master.',
         
     | 
| 
       57 
     | 
    
         
            -
                               :default => CLI.defaults[:branch] 
     | 
| 
      
 56 
     | 
    
         
            +
                               :desc => 'Branch name to make the changes in. Defaults to the default branch of the upstream repository, but falls back to "master".',
         
     | 
| 
      
 57 
     | 
    
         
            +
                               :default => CLI.defaults[:branch]
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
59 
     | 
    
         
             
                  desc 'update', 'Update the modules in managed_modules.yml'
         
     | 
| 
       60 
60 
     | 
    
         
             
                  option :message,
         
     | 
| 
         @@ -106,6 +106,11 @@ module ModuleSync 
     | 
|
| 
       106 
106 
     | 
    
         
             
                  option :pre_commit_script,
         
     | 
| 
       107 
107 
     | 
    
         
             
                         :desc => 'A script to be run before commiting',
         
     | 
| 
       108 
108 
     | 
    
         
             
                         :default => CLI.defaults[:pre_commit_script]
         
     | 
| 
      
 109 
     | 
    
         
            +
                  option :fail_on_warnings,
         
     | 
| 
      
 110 
     | 
    
         
            +
                         :type => :boolean,
         
     | 
| 
      
 111 
     | 
    
         
            +
                         :aliases => '-F',
         
     | 
| 
      
 112 
     | 
    
         
            +
                         :desc => 'Produce a failure exit code when there are warnings (only has effect when --skip_broken is enabled)',
         
     | 
| 
      
 113 
     | 
    
         
            +
                         :default => false
         
     | 
| 
       109 
114 
     | 
    
         | 
| 
       110 
115 
     | 
    
         
             
                  def update
         
     | 
| 
       111 
116 
     | 
    
         
             
                    config = { :command => 'update' }.merge(options)
         
     | 
    
        data/lib/modulesync/git.rb
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ require 'git' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'puppet_blacksmith'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            module ModuleSync
         
     | 
| 
       5 
     | 
    
         
            -
              module Git
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Git # rubocop:disable Metrics/ModuleLength
         
     | 
| 
       6 
6 
     | 
    
         
             
                include Constants
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                def self.remote_branch_exists?(repo, branch)
         
     | 
| 
         @@ -18,7 +18,17 @@ module ModuleSync 
     | 
|
| 
       18 
18 
     | 
    
         
             
                    repo.diff("#{local_branch}..origin/#{remote_branch}").any?
         
     | 
| 
       19 
19 
     | 
    
         
             
                end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
                def self.default_branch(repo)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  symbolic_ref = repo.branches.find { |b| b.full =~ %r{remotes/origin/HEAD} }
         
     | 
| 
      
 23 
     | 
    
         
            +
                  return unless symbolic_ref
         
     | 
| 
      
 24 
     | 
    
         
            +
                  %r{remotes/origin/HEAD\s+->\s+origin/(?<branch>.+?)$}.match(symbolic_ref.full)[:branch]
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
       21 
27 
     | 
    
         
             
                def self.switch_branch(repo, branch)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  unless branch
         
     | 
| 
      
 29 
     | 
    
         
            +
                    branch = default_branch(repo)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    puts "Using repository's default branch: #{branch}"
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
       22 
32 
     | 
    
         
             
                  return if repo.current_branch == branch
         
     | 
| 
       23 
33 
     | 
    
         | 
| 
       24 
34 
     | 
    
         
             
                  if local_branch_exists?(repo, branch)
         
     | 
| 
         @@ -95,12 +105,19 @@ module ModuleSync 
     | 
|
| 
       95 
105 
     | 
    
         
             
                  repo.push('origin', tag)
         
     | 
| 
       96 
106 
     | 
    
         
             
                end
         
     | 
| 
       97 
107 
     | 
    
         | 
| 
      
 108 
     | 
    
         
            +
                def self.checkout_branch(repo, branch)
         
     | 
| 
      
 109 
     | 
    
         
            +
                  selected_branch = branch || repo.current_branch || 'master'
         
     | 
| 
      
 110 
     | 
    
         
            +
                  repo.branch(selected_branch).checkout
         
     | 
| 
      
 111 
     | 
    
         
            +
                  selected_branch
         
     | 
| 
      
 112 
     | 
    
         
            +
                end
         
     | 
| 
      
 113 
     | 
    
         
            +
                private_class_method :checkout_branch
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
       98 
115 
     | 
    
         
             
                # Git add/rm, git commit, git push
         
     | 
| 
       99 
116 
     | 
    
         
             
                def self.update(name, files, options)
         
     | 
| 
       100 
117 
     | 
    
         
             
                  module_root = "#{options[:project_root]}/#{name}"
         
     | 
| 
       101 
118 
     | 
    
         
             
                  message = options[:message]
         
     | 
| 
       102 
119 
     | 
    
         
             
                  repo = ::Git.open(module_root)
         
     | 
| 
       103 
     | 
    
         
            -
                   
     | 
| 
      
 120 
     | 
    
         
            +
                  branch = checkout_branch(repo, options[:branch])
         
     | 
| 
       104 
121 
     | 
    
         
             
                  files.each do |file|
         
     | 
| 
       105 
122 
     | 
    
         
             
                    if repo.status.deleted.include?(file)
         
     | 
| 
       106 
123 
     | 
    
         
             
                      repo.remove(file)
         
     | 
| 
         @@ -119,11 +136,11 @@ module ModuleSync 
     | 
|
| 
       119 
136 
     | 
    
         
             
                    end
         
     | 
| 
       120 
137 
     | 
    
         
             
                    repo.commit(message, opts_commit)
         
     | 
| 
       121 
138 
     | 
    
         
             
                    if options[:remote_branch]
         
     | 
| 
       122 
     | 
    
         
            -
                      if remote_branch_differ?(repo,  
     | 
| 
       123 
     | 
    
         
            -
                        repo.push('origin', "#{ 
     | 
| 
      
 139 
     | 
    
         
            +
                      if remote_branch_differ?(repo, branch, options[:remote_branch])
         
     | 
| 
      
 140 
     | 
    
         
            +
                        repo.push('origin', "#{branch}:#{options[:remote_branch]}", opts_push)
         
     | 
| 
       124 
141 
     | 
    
         
             
                      end
         
     | 
| 
       125 
142 
     | 
    
         
             
                    else
         
     | 
| 
       126 
     | 
    
         
            -
                      repo.push('origin',  
     | 
| 
      
 143 
     | 
    
         
            +
                      repo.push('origin', branch, opts_push)
         
     | 
| 
       127 
144 
     | 
    
         
             
                    end
         
     | 
| 
       128 
145 
     | 
    
         
             
                    # Only bump/tag if pushing didn't fail (i.e. there were changes)
         
     | 
| 
       129 
146 
     | 
    
         
             
                    m = Blacksmith::Modulefile.new("#{module_root}/metadata.json")
         
     | 
| 
         @@ -136,7 +153,7 @@ module ModuleSync 
     | 
|
| 
       136 
153 
     | 
    
         
             
                      puts "There were no files to update in #{name}. Not committing."
         
     | 
| 
       137 
154 
     | 
    
         
             
                    else
         
     | 
| 
       138 
155 
     | 
    
         
             
                      puts git_error
         
     | 
| 
       139 
     | 
    
         
            -
                       
     | 
| 
      
 156 
     | 
    
         
            +
                      raise
         
     | 
| 
       140 
157 
     | 
    
         
             
                    end
         
     | 
| 
       141 
158 
     | 
    
         
             
                  end
         
     | 
| 
       142 
159 
     | 
    
         
             
                end
         
     | 
| 
         @@ -154,7 +171,7 @@ module ModuleSync 
     | 
|
| 
       154 
171 
     | 
    
         
             
                  puts "Using no-op. Files in #{name} may be changed but will not be committed."
         
     | 
| 
       155 
172 
     | 
    
         | 
| 
       156 
173 
     | 
    
         
             
                  repo = ::Git.open("#{options[:project_root]}/#{name}")
         
     | 
| 
       157 
     | 
    
         
            -
                  repo 
     | 
| 
      
 174 
     | 
    
         
            +
                  checkout_branch(repo, options[:branch])
         
     | 
| 
       158 
175 
     | 
    
         | 
| 
       159 
176 
     | 
    
         
             
                  puts 'Files changed:'
         
     | 
| 
       160 
177 
     | 
    
         
             
                  repo.diff('HEAD', '--').each do |diff|
         
     | 
    
        data/lib/monkey_patches.rb
    CHANGED
    
    | 
         @@ -37,4 +37,19 @@ module Git 
     | 
|
| 
       37 
37 
     | 
    
         
             
                  final.map { |e| [e[0], DiffFile.new(@base, e[1])] }
         
     | 
| 
       38 
38 
     | 
    
         
             
                end
         
     | 
| 
       39 
39 
     | 
    
         
             
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              class Lib
         
     | 
| 
      
 42 
     | 
    
         
            +
                # Monkey patch ls_files until https://github.com/ruby-git/ruby-git/pull/320 is resolved
         
     | 
| 
      
 43 
     | 
    
         
            +
                def ls_files(location=nil)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  location ||= '.'
         
     | 
| 
      
 45 
     | 
    
         
            +
                  hsh = {}
         
     | 
| 
      
 46 
     | 
    
         
            +
                  command_lines('ls-files', ['--stage', location]).each do |line|
         
     | 
| 
      
 47 
     | 
    
         
            +
                    (info, file) = line.split("\t")
         
     | 
| 
      
 48 
     | 
    
         
            +
                    (mode, sha, stage) = info.split
         
     | 
| 
      
 49 
     | 
    
         
            +
                    file = eval(file) if file =~ /^\".*\"$/ # This takes care of quoted strings returned from git
         
     | 
| 
      
 50 
     | 
    
         
            +
                    hsh[file] = {:path => file, :mode_index => mode, :sha_index => sha, :stage => stage}
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                  hsh
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
       40 
55 
     | 
    
         
             
            end
         
     | 
    
        data/modulesync.gemspec
    CHANGED
    
    | 
         @@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            Gem::Specification.new do |spec|
         
     | 
| 
       5 
5 
     | 
    
         
             
              spec.name                  = 'modulesync'
         
     | 
| 
       6 
     | 
    
         
            -
              spec.version               = '0. 
     | 
| 
      
 6 
     | 
    
         
            +
              spec.version               = '0.9.0'
         
     | 
| 
       7 
7 
     | 
    
         
             
              spec.authors               = ['Vox Pupuli']
         
     | 
| 
       8 
8 
     | 
    
         
             
              spec.email                 = ['voxpupuli@groups.io']
         
     | 
| 
       9 
9 
     | 
    
         
             
              spec.summary               = 'Puppet Module Synchronizer'
         
     | 
| 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe ModuleSync do
         
     | 
| 
      
 4 
     | 
    
         
            +
              context '::update' do
         
     | 
| 
      
 5 
     | 
    
         
            +
                it 'loads the managed modules from the specified :managed_modules_conf' do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  allow(ModuleSync).to receive(:local_files).and_return([])
         
     | 
| 
      
 7 
     | 
    
         
            +
                  allow(ModuleSync::Util).to receive(:parse_config).with('./config_defaults.yml').and_return({})
         
     | 
| 
      
 8 
     | 
    
         
            +
                  expect(ModuleSync).to receive(:managed_modules).with('./test_file.yml', nil, nil).and_return([])
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  options = { managed_modules_conf: 'test_file.yml' }
         
     | 
| 
      
 11 
     | 
    
         
            +
                  ModuleSync.update(options)
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
            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. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.9.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:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-02-26 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: aruba
         
     | 
| 
         @@ -159,6 +159,7 @@ files: 
     | 
|
| 
       159 
159 
     | 
    
         
             
            - modulesync.gemspec
         
     | 
| 
       160 
160 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       161 
161 
     | 
    
         
             
            - spec/unit/modulesync/settings_spec.rb
         
     | 
| 
      
 162 
     | 
    
         
            +
            - spec/unit/modulesync_spec.rb
         
     | 
| 
       162 
163 
     | 
    
         
             
            homepage: http://github.com/voxpupuli/modulesync
         
     | 
| 
       163 
164 
     | 
    
         
             
            licenses:
         
     | 
| 
       164 
165 
     | 
    
         
             
            - Apache-2.0
         
     | 
| 
         @@ -179,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       179 
180 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       180 
181 
     | 
    
         
             
            requirements: []
         
     | 
| 
       181 
182 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       182 
     | 
    
         
            -
            rubygems_version: 2.7. 
     | 
| 
      
 183 
     | 
    
         
            +
            rubygems_version: 2.7.6
         
     | 
| 
       183 
184 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       184 
185 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       185 
186 
     | 
    
         
             
            summary: Puppet Module Synchronizer
         
     | 
| 
         @@ -191,3 +192,4 @@ test_files: 
     | 
|
| 
       191 
192 
     | 
    
         
             
            - features/update.feature
         
     | 
| 
       192 
193 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       193 
194 
     | 
    
         
             
            - spec/unit/modulesync/settings_spec.rb
         
     | 
| 
      
 195 
     | 
    
         
            +
            - spec/unit/modulesync_spec.rb
         
     |