modulesync 0.6.1 → 0.7.2
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 +7 -0
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/.rubocop.yml +16 -0
- data/.rubocop_todo.yml +75 -0
- data/.travis.yml +16 -0
- data/CHANGELOG.md +44 -6
- data/Gemfile +5 -0
- data/README.md +21 -2
- data/Rakefile +14 -4
- data/bin/msync +3 -3
- data/features/cli.feature +18 -0
- data/features/hook.feature +28 -0
- data/features/step_definitions/git_steps.rb +24 -0
- data/features/update.feature +501 -37
- data/lib/modulesync.rb +96 -50
- data/lib/modulesync/cli.rb +47 -107
- data/lib/modulesync/constants.rb +5 -5
- data/lib/modulesync/git.rb +48 -54
- data/lib/modulesync/hook.rb +25 -21
- data/lib/modulesync/renderer.rb +5 -11
- data/lib/modulesync/settings.rb +41 -0
- data/lib/modulesync/util.rb +3 -9
- data/modulesync.gemspec +14 -11
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/modulesync/settings_spec.rb +25 -0
- metadata +80 -36
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1dd5e56a7370a3eb358c9a6d1fdf28aab8078ba9
|
4
|
+
data.tar.gz: 444ba255257e89d604065e066978f028d798907d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fa110f5ccfaa83e13be484e0d443cbddc50b97706dda6fa9b6080bb9bf509fbff0ecc7953dfd1014b40bae0baf5a5c214d49ec96cb640b5a1b1d13269cf51d8c
|
7
|
+
data.tar.gz: 8629e474f0b8998f5707954204a37ab94006d056640f2f438bca92fa6c4694238e7a4657281c8c2d0bf35c810da5fb26176da0da5a3e77472fb242743fb3063c
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
2
|
+
|
3
|
+
AllCops:
|
4
|
+
TargetRubyVersion: 1.9
|
5
|
+
Exclude:
|
6
|
+
- 'vendor/**/*'
|
7
|
+
- 'tmp/**/*'
|
8
|
+
- 'pkg/**/*'
|
9
|
+
|
10
|
+
# we still support ruby 1.8
|
11
|
+
Style/HashSyntax:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
# dealbreaker:
|
15
|
+
Style/TrailingCommaInLiteral:
|
16
|
+
Enabled: false
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2015-10-07 12:25:07 -0700 using RuboCop version 0.34.2.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 2
|
10
|
+
Lint/UselessAssignment:
|
11
|
+
Exclude:
|
12
|
+
- 'lib/modulesync.rb'
|
13
|
+
- 'lib/modulesync/cli.rb'
|
14
|
+
|
15
|
+
# Offense count: 6
|
16
|
+
Metrics/AbcSize:
|
17
|
+
Max: 64
|
18
|
+
|
19
|
+
# Offense count: 1
|
20
|
+
# Configuration parameters: CountComments.
|
21
|
+
Metrics/ClassLength:
|
22
|
+
Max: 105
|
23
|
+
|
24
|
+
# Offense count: 4
|
25
|
+
Metrics/CyclomaticComplexity:
|
26
|
+
Max: 13
|
27
|
+
|
28
|
+
# Offense count: 29
|
29
|
+
# Configuration parameters: AllowURI, URISchemes.
|
30
|
+
Metrics/LineLength:
|
31
|
+
Max: 319
|
32
|
+
|
33
|
+
# Offense count: 8
|
34
|
+
# Configuration parameters: CountComments.
|
35
|
+
Metrics/MethodLength:
|
36
|
+
Max: 79
|
37
|
+
|
38
|
+
# Offense count: 1
|
39
|
+
# Configuration parameters: CountComments.
|
40
|
+
Metrics/ModuleLength:
|
41
|
+
Max: 140
|
42
|
+
|
43
|
+
# Offense count: 4
|
44
|
+
Metrics/PerceivedComplexity:
|
45
|
+
Max: 16
|
46
|
+
|
47
|
+
# Offense count: 9
|
48
|
+
# Configuration parameters: Exclude.
|
49
|
+
Style/Documentation:
|
50
|
+
Exclude:
|
51
|
+
- 'lib/modulesync.rb'
|
52
|
+
- 'lib/modulesync/cli.rb'
|
53
|
+
- 'lib/modulesync/constants.rb'
|
54
|
+
- 'lib/modulesync/git.rb'
|
55
|
+
- 'lib/modulesync/hook.rb'
|
56
|
+
- 'lib/modulesync/renderer.rb'
|
57
|
+
- 'lib/modulesync/util.rb'
|
58
|
+
|
59
|
+
# Offense count: 1
|
60
|
+
Style/EachWithObject:
|
61
|
+
Exclude:
|
62
|
+
- 'lib/modulesync/util.rb'
|
63
|
+
|
64
|
+
# Offense count: 1
|
65
|
+
# Configuration parameters: MinBodyLength.
|
66
|
+
Style/GuardClause:
|
67
|
+
Exclude:
|
68
|
+
- 'lib/modulesync/cli.rb'
|
69
|
+
|
70
|
+
# Offense count: 1
|
71
|
+
# Cop supports --auto-correct.
|
72
|
+
# Configuration parameters: AllowAsExpressionSeparator.
|
73
|
+
Style/Semicolon:
|
74
|
+
Exclude:
|
75
|
+
- 'lib/modulesync/util.rb'
|
data/.travis.yml
CHANGED
@@ -2,8 +2,24 @@
|
|
2
2
|
sudo: false
|
3
3
|
language: ruby
|
4
4
|
cache: bundler
|
5
|
+
before_install:
|
6
|
+
- gem update --system
|
7
|
+
- gem install bundler
|
5
8
|
script: 'bundle exec rake test'
|
6
9
|
rvm:
|
7
10
|
- 1.9.3
|
8
11
|
- 2.0
|
9
12
|
- 2.1
|
13
|
+
- 2.2
|
14
|
+
- 2.3.3
|
15
|
+
- 2.4.0
|
16
|
+
deploy:
|
17
|
+
provider: rubygems
|
18
|
+
api_key:
|
19
|
+
secure: "Tbf1EbLEobIIox+fftJZADZsfQQ6kl0urcMNetK7NJzFo/negD/WyJIUj3kro/B7buyYADEjTui/JR4o8EPbugfM3ie5vYOd5k3AesSzbdr4BSwGe/cGbGOB7/PZuGfFLkb94/FiCU2mIwibkbh1rHWGlBoPj7ntL0+5ZtdvsM4="
|
20
|
+
gem: modulesync
|
21
|
+
on:
|
22
|
+
rvm: 2.4.0
|
23
|
+
tags: true
|
24
|
+
all_branches: true
|
25
|
+
repo: voxpupuli/modulesync
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,42 @@
|
|
1
|
-
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 2017-02-13 - 0.7.2
|
4
|
+
|
5
|
+
Fixes an issue releasing 0.7.1, no functional changes.
|
6
|
+
|
7
|
+
## 2017-02-13 - 0.7.1
|
8
|
+
|
9
|
+
Fixes an issue releasing 0.7.0, no functional changes.
|
10
|
+
|
11
|
+
## 2017-02-13 - 0.7.0
|
12
|
+
|
13
|
+
### Summary
|
14
|
+
|
15
|
+
This is the first release from Vox Pupuli, which has taken over maintenance of
|
16
|
+
modulesync.
|
17
|
+
|
18
|
+
#### Features
|
19
|
+
- New `msync update` arguments:
|
20
|
+
- `--git-base` to override `git_base`, e.g. for read-only git clones
|
21
|
+
- `-s` to skip the current module and continue on error
|
22
|
+
- `-x` for a negative filter (blacklist) of modules not to update
|
23
|
+
- Add `-a` argument to `msync hook` to pass additional arguments
|
24
|
+
- Add `:git_base` and `:namespace` data to `@configs` hash
|
25
|
+
- Allow `managed_modules.yml` to list modules with a different namespace
|
26
|
+
- Entire directories can be listed with `unmanaged: true`
|
27
|
+
|
28
|
+
#### Refactoring
|
29
|
+
- Replace CLI optionparser with thor
|
30
|
+
|
31
|
+
#### Bugfixes
|
32
|
+
- Fix git 1.8.0 compatibility, detecting when no files are changed
|
33
|
+
- Fix `delete: true` feature, now deletes files correctly
|
34
|
+
- Fix handling of `:global` config entries, not interpreted as a path
|
35
|
+
- Fix push without force to remote branch when no files have changed (#102)
|
36
|
+
- Output template name when ERB rendering fails
|
37
|
+
- Remove extraneous whitespace in `--noop` output
|
38
|
+
|
39
|
+
## 2015-08-13 - 0.6.1
|
2
40
|
|
3
41
|
### Summary
|
4
42
|
|
@@ -27,7 +65,7 @@ This release adds two new flags to help modulesync better integrate with CI tool
|
|
27
65
|
|
28
66
|
- Added tests
|
29
67
|
|
30
|
-
##2015-06-30 - 0.5.0
|
68
|
+
## 2015-06-30 - 0.5.0
|
31
69
|
|
32
70
|
### Summary
|
33
71
|
|
@@ -37,7 +75,7 @@ This release adds the ability to sync a non-bare local git repo.
|
|
37
75
|
|
38
76
|
- Allow one to sync non-bare local git repository
|
39
77
|
|
40
|
-
##2015-06-24 - 0.4.0
|
78
|
+
## 2015-06-24 - 0.4.0
|
41
79
|
|
42
80
|
### Summary
|
43
81
|
|
@@ -53,7 +91,7 @@ config.
|
|
53
91
|
|
54
92
|
- Fix markdown syntax in README
|
55
93
|
|
56
|
-
##2015-03-12 - 0.3.0
|
94
|
+
## 2015-03-12 - 0.3.0
|
57
95
|
|
58
96
|
### Summary
|
59
97
|
|
@@ -87,14 +125,14 @@ number of new flags for updating modules.
|
|
87
125
|
- Fix non-master branch functionality
|
88
126
|
- Add workarounds for older git versions
|
89
127
|
|
90
|
-
##2014-11-16 - 0.2.0
|
128
|
+
## 2014-11-16 - 0.2.0
|
91
129
|
|
92
130
|
### Summary
|
93
131
|
|
94
132
|
This release adds the --filter flag to filter what modules to sync.
|
95
133
|
Also fixes the README to document the very important -m flag.
|
96
134
|
|
97
|
-
##2014-9-29 - 0.1.0
|
135
|
+
## 2014-9-29 - 0.1.0
|
98
136
|
|
99
137
|
### Summary
|
100
138
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -265,13 +265,22 @@ pre_commit_script: openstack-commit-msg-hook.sh
|
|
265
265
|
|
266
266
|
#### Filtering Repositories
|
267
267
|
|
268
|
-
If you only want to sync some of the repositories in your managed_modules.yml, use the
|
268
|
+
If you only want to sync some of the repositories in your managed_modules.yml, use the `-f` flag to filter by a regex:
|
269
269
|
|
270
270
|
```
|
271
|
-
msync update -f augeas -m "Commit message"
|
271
|
+
msync update -f augeas -m "Commit message" # acts only on the augeas module
|
272
272
|
msync update -f puppet-a..o "Commit message"
|
273
273
|
```
|
274
274
|
|
275
|
+
If you want to skip syncing some of the repositories in your managed_modules.yml, use the `-x` flag to filter by a regex:
|
276
|
+
|
277
|
+
```
|
278
|
+
msync update -x augeas -m "Commit message" # acts on all modules except the augeas module
|
279
|
+
msync update -x puppet-a..o "Commit message"
|
280
|
+
```
|
281
|
+
|
282
|
+
If no `-f` is specified, all repository are processed, if no `-x` is specified no repository is skipped. If a repository matches both `-f` and `-x` it is skipped.
|
283
|
+
|
275
284
|
#### Pushing to a different remote branch
|
276
285
|
|
277
286
|
If you want to push the modified branch to a different remote branch, you can use the -r flag:
|
@@ -337,6 +346,16 @@ current date, bumped (minor) version, and commit message.
|
|
337
346
|
If `CHANGELOG.md` is absent in the repository, nothing will happen.
|
338
347
|
|
339
348
|
|
349
|
+
#### Defining templates
|
350
|
+
|
351
|
+
As commented, files within moduleroot directory can be flat files or ERB templates. These files have direct access to @configs hash, which gets values from config_defaults.yml file and from the module being processed:
|
352
|
+
|
353
|
+
```
|
354
|
+
<%= @configs[:git_base] %>
|
355
|
+
<%= @configs[:namespace] %>
|
356
|
+
<%= @configs[:puppet_module] %>
|
357
|
+
```
|
358
|
+
|
340
359
|
The Templates
|
341
360
|
-------------
|
342
361
|
|
data/Rakefile
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
require 'rake/clean'
|
2
2
|
require 'cucumber/rake/task'
|
3
|
+
require 'rubocop/rake_task'
|
3
4
|
|
4
|
-
|
5
|
+
begin
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
8
|
+
rescue LoadError
|
9
|
+
puts 'rspec not installed - skipping unit test task setup'
|
10
|
+
end
|
11
|
+
|
12
|
+
RuboCop::RakeTask.new
|
13
|
+
|
14
|
+
CLEAN.include('pkg/', 'tmp/')
|
5
15
|
|
6
16
|
Cucumber::Rake::Task.new do |t|
|
7
|
-
t.cucumber_opts =
|
8
|
-
t.cucumber_opts <<
|
17
|
+
t.cucumber_opts = ''
|
18
|
+
t.cucumber_opts << '--format pretty'
|
9
19
|
end
|
10
20
|
|
11
|
-
task :test => [:clean, :cucumber]
|
21
|
+
task :test => [:clean, :spec, :cucumber, :rubocop]
|
data/bin/msync
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
lib = File.expand_path('../../lib', __FILE__)
|
4
|
-
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
|
6
|
-
require 'modulesync'
|
6
|
+
require 'modulesync/cli'
|
7
7
|
|
8
|
-
ModuleSync.
|
8
|
+
ModuleSync::CLI::Base.start(ARGV)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Feature: CLI
|
2
|
+
ModuleSync needs to have a robust command line interface
|
3
|
+
|
4
|
+
Scenario: When passing no arguments to the msync command
|
5
|
+
When I run `msync`
|
6
|
+
And the output should match /Commands:/
|
7
|
+
|
8
|
+
Scenario: When passing invalid arguments to the msync update command
|
9
|
+
When I run `msync update`
|
10
|
+
And the output should match /No value provided for required option/
|
11
|
+
|
12
|
+
Scenario: When passing invalid arguments to the msync hook command
|
13
|
+
When I run `msync hook`
|
14
|
+
And the output should match /Commands:/
|
15
|
+
|
16
|
+
Scenario: When running the help subcommand
|
17
|
+
When I run `msync help`
|
18
|
+
And the output should match /Commands:/
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Feature: hook
|
2
|
+
ModuleSync needs to update git pre-push hooks
|
3
|
+
|
4
|
+
Scenario: Activating a hook
|
5
|
+
Given a directory named ".git/hooks"
|
6
|
+
When I run `msync hook activate`
|
7
|
+
Then the exit status should be 0
|
8
|
+
Given I run `cat .git/hooks/pre-push`
|
9
|
+
Then the output should contain "bash"
|
10
|
+
|
11
|
+
Scenario: Deactivating a hook
|
12
|
+
Given a file named ".git/hooks/pre-push" with:
|
13
|
+
"""
|
14
|
+
git hook
|
15
|
+
"""
|
16
|
+
When I run `msync hook deactivate`
|
17
|
+
Then the exit status should be 0
|
18
|
+
Then the file ".git/hooks/pre-push" should not exist
|
19
|
+
|
20
|
+
Scenario: Activating a hook with arguments
|
21
|
+
Given a directory named ".git/hooks"
|
22
|
+
When I run `msync hook activate -a '--foo bar --baz quux' -b master`
|
23
|
+
Then the exit status should be 0
|
24
|
+
Given I run `cat .git/hooks/pre-push`
|
25
|
+
Then the output should match:
|
26
|
+
"""
|
27
|
+
"\$message" -n puppetlabs -b master --foo bar --baz quux
|
28
|
+
"""
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Given 'a mocked git configuration' do
|
2
|
+
steps %(
|
3
|
+
Given a mocked home directory
|
4
|
+
And I run `git config --global user.name Test`
|
5
|
+
And I run `git config --global user.email test@example.com`
|
6
|
+
)
|
7
|
+
end
|
8
|
+
|
9
|
+
Given 'a remote module repository' do
|
10
|
+
steps %(
|
11
|
+
Given a directory named "sources"
|
12
|
+
And I run `git clone https://github.com/maestrodev/puppet-test sources/puppet-test`
|
13
|
+
And a file named "managed_modules.yml" with:
|
14
|
+
"""
|
15
|
+
---
|
16
|
+
- puppet-test
|
17
|
+
"""
|
18
|
+
)
|
19
|
+
write_file('modulesync.yml', <<-EOS)
|
20
|
+
---
|
21
|
+
namespace: sources
|
22
|
+
git_base: file://#{expand_path('.')}/
|
23
|
+
EOS
|
24
|
+
end
|
data/features/update.feature
CHANGED
@@ -26,11 +26,15 @@ Feature: update
|
|
26
26
|
"""
|
27
27
|
When I run `msync update --noop`
|
28
28
|
Then the exit status should be 0
|
29
|
-
And the output should match
|
29
|
+
And the output should match:
|
30
|
+
"""
|
31
|
+
Files added:
|
32
|
+
test
|
33
|
+
"""
|
30
34
|
Given I run `cat modules/puppet-test/test`
|
31
35
|
Then the output should contain "aruba"
|
32
36
|
|
33
|
-
Scenario: Adding a
|
37
|
+
Scenario: Adding a file that ERB can't parse
|
34
38
|
Given a file named "managed_modules.yml" with:
|
35
39
|
"""
|
36
40
|
---
|
@@ -51,13 +55,40 @@ Feature: update
|
|
51
55
|
And a directory named "moduleroot"
|
52
56
|
And a file named "moduleroot/test" with:
|
53
57
|
"""
|
54
|
-
|
58
|
+
<% @configs.each do |c| -%>
|
59
|
+
<%= c['name'] %>
|
60
|
+
<% end %>
|
61
|
+
"""
|
62
|
+
When I run `msync update --noop`
|
63
|
+
Then the exit status should be 1
|
64
|
+
|
65
|
+
Scenario: Using skip_broken option with invalid files
|
66
|
+
Given a file named "managed_modules.yml" with:
|
67
|
+
"""
|
68
|
+
---
|
69
|
+
- puppet-test
|
70
|
+
"""
|
71
|
+
And a file named "modulesync.yml" with:
|
72
|
+
"""
|
73
|
+
---
|
74
|
+
namespace: maestrodev
|
75
|
+
git_base: https://github.com/
|
76
|
+
"""
|
77
|
+
And a file named "config_defaults.yml" with:
|
78
|
+
"""
|
79
|
+
---
|
80
|
+
test:
|
81
|
+
name: aruba
|
55
82
|
"""
|
56
|
-
|
83
|
+
And a directory named "moduleroot"
|
84
|
+
And a file named "moduleroot/test" with:
|
85
|
+
"""
|
86
|
+
<% @configs.each do |c| -%>
|
87
|
+
<%= c['name'] %>
|
88
|
+
<% end %>
|
89
|
+
"""
|
90
|
+
When I run `msync update --noop -s`
|
57
91
|
Then the exit status should be 0
|
58
|
-
And the output should match /Files added:\s+test/
|
59
|
-
Given I run `cat foobar/puppet-test/test`
|
60
|
-
Then the output should contain "aruba"
|
61
92
|
|
62
93
|
Scenario: Modifying an existing file
|
63
94
|
Given a file named "managed_modules.yml" with:
|
@@ -86,7 +117,7 @@ Feature: update
|
|
86
117
|
Then the exit status should be 0
|
87
118
|
And the output should match:
|
88
119
|
"""
|
89
|
-
Files changed
|
120
|
+
Files changed:
|
90
121
|
+diff --git a/Gemfile b/Gemfile
|
91
122
|
"""
|
92
123
|
Given I run `cat modules/puppet-test/Gemfile`
|
@@ -95,6 +126,164 @@ Feature: update
|
|
95
126
|
source 'https://somehost.com'
|
96
127
|
"""
|
97
128
|
|
129
|
+
Scenario: Modifying an existing file and committing the change
|
130
|
+
Given a mocked git configuration
|
131
|
+
And a remote module repository
|
132
|
+
And a file named "config_defaults.yml" with:
|
133
|
+
"""
|
134
|
+
---
|
135
|
+
Gemfile:
|
136
|
+
gem_source: https://somehost.com
|
137
|
+
"""
|
138
|
+
And a directory named "moduleroot"
|
139
|
+
And a file named "moduleroot/Gemfile" with:
|
140
|
+
"""
|
141
|
+
source '<%= @configs['gem_source'] %>'
|
142
|
+
"""
|
143
|
+
When I run `msync update -m "Update Gemfile" -r test`
|
144
|
+
Then the exit status should be 0
|
145
|
+
Given I cd to "sources/puppet-test"
|
146
|
+
And I run `git checkout test`
|
147
|
+
Then the file "Gemfile" should contain:
|
148
|
+
"""
|
149
|
+
source 'https://somehost.com'
|
150
|
+
"""
|
151
|
+
|
152
|
+
Scenario: Setting an existing file to unmanaged
|
153
|
+
Given a file named "managed_modules.yml" with:
|
154
|
+
"""
|
155
|
+
---
|
156
|
+
- puppet-test
|
157
|
+
"""
|
158
|
+
And a file named "modulesync.yml" with:
|
159
|
+
"""
|
160
|
+
---
|
161
|
+
namespace: maestrodev
|
162
|
+
git_base: https://github.com/
|
163
|
+
"""
|
164
|
+
And a file named "config_defaults.yml" with:
|
165
|
+
"""
|
166
|
+
---
|
167
|
+
Gemfile:
|
168
|
+
unmanaged: true
|
169
|
+
"""
|
170
|
+
And a directory named "moduleroot"
|
171
|
+
And a file named "moduleroot/Gemfile" with:
|
172
|
+
"""
|
173
|
+
source '<%= @configs['gem_source'] %>'
|
174
|
+
"""
|
175
|
+
When I run `msync update --noop`
|
176
|
+
Then the output should not match:
|
177
|
+
"""
|
178
|
+
Files changed:
|
179
|
+
+diff --git a/Gemfile b/Gemfile
|
180
|
+
"""
|
181
|
+
And the output should match:
|
182
|
+
"""
|
183
|
+
Not managing Gemfile in puppet-test
|
184
|
+
"""
|
185
|
+
And the exit status should be 0
|
186
|
+
Given I run `cat modules/puppet-test/Gemfile`
|
187
|
+
Then the output should contain:
|
188
|
+
"""
|
189
|
+
source 'https://rubygems.org'
|
190
|
+
"""
|
191
|
+
|
192
|
+
Scenario: Setting an existing file to deleted
|
193
|
+
Given a file named "managed_modules.yml" with:
|
194
|
+
"""
|
195
|
+
---
|
196
|
+
- puppet-test
|
197
|
+
"""
|
198
|
+
And a file named "modulesync.yml" with:
|
199
|
+
"""
|
200
|
+
---
|
201
|
+
namespace: maestrodev
|
202
|
+
git_base: https://github.com/
|
203
|
+
"""
|
204
|
+
And a file named "config_defaults.yml" with:
|
205
|
+
"""
|
206
|
+
---
|
207
|
+
Gemfile:
|
208
|
+
delete: true
|
209
|
+
"""
|
210
|
+
And a directory named "moduleroot"
|
211
|
+
And a file named "moduleroot/Gemfile" with:
|
212
|
+
"""
|
213
|
+
source '<%= @configs['gem_source'] %>'
|
214
|
+
"""
|
215
|
+
When I run `msync update --noop`
|
216
|
+
Then the output should match:
|
217
|
+
"""
|
218
|
+
Files changed:
|
219
|
+
diff --git a/Gemfile b/Gemfile
|
220
|
+
deleted file mode 100644
|
221
|
+
"""
|
222
|
+
And the exit status should be 0
|
223
|
+
|
224
|
+
Scenario: Setting a non-existent file to deleted
|
225
|
+
Given a file named "managed_modules.yml" with:
|
226
|
+
"""
|
227
|
+
---
|
228
|
+
- puppet-test
|
229
|
+
"""
|
230
|
+
And a file named "modulesync.yml" with:
|
231
|
+
"""
|
232
|
+
---
|
233
|
+
namespace: maestrodev
|
234
|
+
git_base: https://github.com/
|
235
|
+
"""
|
236
|
+
And a file named "config_defaults.yml" with:
|
237
|
+
"""
|
238
|
+
---
|
239
|
+
doesntexist_file:
|
240
|
+
delete: true
|
241
|
+
"""
|
242
|
+
And a directory named "moduleroot"
|
243
|
+
When I run `msync update -m 'deletes a file that doesnt exist!' -f puppet-test`
|
244
|
+
And the exit status should be 0
|
245
|
+
|
246
|
+
Scenario: Setting a directory to unmanaged
|
247
|
+
Given a file named "managed_modules.yml" with:
|
248
|
+
"""
|
249
|
+
---
|
250
|
+
- puppetlabs-apache
|
251
|
+
"""
|
252
|
+
And a file named "modulesync.yml" with:
|
253
|
+
"""
|
254
|
+
---
|
255
|
+
namespace: puppetlabs
|
256
|
+
git_base: https://github.com/
|
257
|
+
"""
|
258
|
+
And a file named "config_defaults.yml" with:
|
259
|
+
"""
|
260
|
+
---
|
261
|
+
spec:
|
262
|
+
unmanaged: true
|
263
|
+
"""
|
264
|
+
And a directory named "moduleroot/spec"
|
265
|
+
And a file named "moduleroot/spec/spec_helper.rb" with:
|
266
|
+
"""
|
267
|
+
some spec_helper fud
|
268
|
+
"""
|
269
|
+
And a directory named "modules/puppetlabs-apache/spec"
|
270
|
+
And a file named "modules/puppetlabs-apache/spec/spec_helper.rb" with:
|
271
|
+
"""
|
272
|
+
This is a fake spec_helper!
|
273
|
+
"""
|
274
|
+
When I run `msync update --offline`
|
275
|
+
Then the output should contain:
|
276
|
+
"""
|
277
|
+
Not managing spec/spec_helper.rb in puppetlabs-apache
|
278
|
+
"""
|
279
|
+
And the exit status should be 0
|
280
|
+
Given I run `cat modules/puppetlabs-apache/spec/spec_helper.rb`
|
281
|
+
Then the output should contain:
|
282
|
+
"""
|
283
|
+
This is a fake spec_helper!
|
284
|
+
"""
|
285
|
+
And the exit status should be 0
|
286
|
+
|
98
287
|
Scenario: Adding a new file in a new subdirectory
|
99
288
|
Given a file named "managed_modules.yml" with:
|
100
289
|
"""
|
@@ -124,7 +313,7 @@ Feature: update
|
|
124
313
|
Then the exit status should be 0
|
125
314
|
And the output should match:
|
126
315
|
"""
|
127
|
-
Files added
|
316
|
+
Files added:
|
128
317
|
spec/spec_helper.rb
|
129
318
|
"""
|
130
319
|
Given I run `cat modules/puppet-test/spec/spec_helper.rb`
|
@@ -132,24 +321,210 @@ Feature: update
|
|
132
321
|
"""
|
133
322
|
require 'puppetlabs_spec_helper/module_helper'
|
134
323
|
"""
|
135
|
-
|
324
|
+
|
325
|
+
Scenario: Updating offline
|
326
|
+
Given a file named "managed_modules.yml" with:
|
327
|
+
"""
|
328
|
+
---
|
329
|
+
- puppet-test
|
330
|
+
"""
|
331
|
+
And a file named "modulesync.yml" with:
|
332
|
+
"""
|
333
|
+
---
|
334
|
+
namespace: maestrodev
|
335
|
+
git_base: https://github.com/
|
336
|
+
"""
|
337
|
+
And a file named "config_defaults.yml" with:
|
338
|
+
"""
|
339
|
+
---
|
340
|
+
spec/spec_helper.rb:
|
341
|
+
require:
|
342
|
+
- puppetlabs_spec_helper/module_helper
|
343
|
+
"""
|
344
|
+
And a file named "moduleroot/spec/spec_helper.rb" with:
|
345
|
+
"""
|
346
|
+
<% @configs['require'].each do |required| -%>
|
347
|
+
require '<%= required %>'
|
348
|
+
<% end %>
|
349
|
+
"""
|
350
|
+
When I run `msync update --offline`
|
351
|
+
Then the exit status should be 0
|
352
|
+
And the output should not match /Files (changed|added|deleted):/
|
353
|
+
|
354
|
+
Scenario: Pulling a module that already exists in the modules directory
|
355
|
+
Given a file named "managed_modules.yml" with:
|
356
|
+
"""
|
357
|
+
---
|
358
|
+
- puppet-test
|
359
|
+
"""
|
360
|
+
And a file named "modulesync.yml" with:
|
361
|
+
"""
|
362
|
+
---
|
363
|
+
git_base: https://github.com/
|
364
|
+
"""
|
365
|
+
And a file named "config_defaults.yml" with:
|
366
|
+
"""
|
367
|
+
---
|
368
|
+
spec/spec_helper.rb:
|
369
|
+
require:
|
370
|
+
- puppetlabs_spec_helper/module_helper
|
371
|
+
"""
|
372
|
+
And a file named "moduleroot/spec/spec_helper.rb" with:
|
373
|
+
"""
|
374
|
+
<% @configs['require'].each do |required| -%>
|
375
|
+
require '<%= required %>'
|
376
|
+
<% end %>
|
377
|
+
"""
|
378
|
+
Given I run `git init modules/puppet-test`
|
379
|
+
Given a file named "modules/puppet-test/.git/config" with:
|
380
|
+
"""
|
381
|
+
[core]
|
382
|
+
repositoryformatversion = 0
|
383
|
+
filemode = true
|
384
|
+
bare = false
|
385
|
+
logallrefupdates = true
|
386
|
+
ignorecase = true
|
387
|
+
precomposeunicode = true
|
388
|
+
[remote "origin"]
|
389
|
+
url = https://github.com/maestrodev/puppet-test.git
|
390
|
+
fetch = +refs/heads/*:refs/remotes/origin/*
|
391
|
+
"""
|
392
|
+
When I run `msync update --noop`
|
136
393
|
Then the exit status should be 0
|
137
394
|
And the output should match:
|
138
395
|
"""
|
139
|
-
Files added
|
396
|
+
Files added:
|
140
397
|
spec/spec_helper.rb
|
141
398
|
"""
|
142
|
-
|
399
|
+
|
400
|
+
Scenario: When running update with no changes
|
401
|
+
Given a file named "managed_modules.yml" with:
|
402
|
+
"""
|
403
|
+
---
|
404
|
+
- puppet-test
|
405
|
+
"""
|
406
|
+
And a file named "modulesync.yml" with:
|
407
|
+
"""
|
408
|
+
---
|
409
|
+
namespace: maestrodev
|
410
|
+
git_base: https://github.com/
|
411
|
+
"""
|
412
|
+
And a directory named "moduleroot"
|
413
|
+
When I run `msync update --noop`
|
414
|
+
Then the exit status should be 0
|
415
|
+
And the output should not match /diff/
|
416
|
+
|
417
|
+
Scenario: When specifying configurations in managed_modules.yml
|
418
|
+
Given a file named "managed_modules.yml" with:
|
419
|
+
"""
|
420
|
+
---
|
421
|
+
puppet-test:
|
422
|
+
module_name: test
|
423
|
+
"""
|
424
|
+
And a file named "modulesync.yml" with:
|
425
|
+
"""
|
426
|
+
---
|
427
|
+
namespace: maestrodev
|
428
|
+
git_base: https://github.com/
|
429
|
+
"""
|
430
|
+
And a file named "config_defaults.yml" with:
|
431
|
+
"""
|
432
|
+
---
|
433
|
+
test:
|
434
|
+
name: aruba
|
435
|
+
"""
|
436
|
+
And a directory named "moduleroot"
|
437
|
+
And a file named "moduleroot/test" with:
|
438
|
+
"""
|
439
|
+
<%= @configs['name'] %>
|
440
|
+
"""
|
441
|
+
When I run `msync update --noop`
|
442
|
+
Then the exit status should be 0
|
443
|
+
And the output should match:
|
444
|
+
"""
|
445
|
+
Files added:
|
446
|
+
test
|
447
|
+
"""
|
448
|
+
Given I run `cat modules/puppet-test/test`
|
449
|
+
Then the output should contain "aruba"
|
450
|
+
|
451
|
+
Scenario: When specifying configurations in managed_modules.yml and using a filter
|
452
|
+
Given a file named "managed_modules.yml" with:
|
453
|
+
"""
|
454
|
+
---
|
455
|
+
puppet-blacksmith:
|
456
|
+
puppet-test:
|
457
|
+
module_name: test
|
458
|
+
"""
|
459
|
+
And a file named "modulesync.yml" with:
|
460
|
+
"""
|
461
|
+
---
|
462
|
+
namespace: maestrodev
|
463
|
+
git_base: https://github.com/
|
464
|
+
"""
|
465
|
+
And a file named "config_defaults.yml" with:
|
466
|
+
"""
|
467
|
+
---
|
468
|
+
test:
|
469
|
+
name: aruba
|
470
|
+
"""
|
471
|
+
And a directory named "moduleroot"
|
472
|
+
And a file named "moduleroot/test" with:
|
473
|
+
"""
|
474
|
+
<%= @configs['name'] %>
|
475
|
+
"""
|
476
|
+
When I run `msync update --noop -f puppet-test`
|
477
|
+
Then the exit status should be 0
|
478
|
+
And the output should match:
|
479
|
+
"""
|
480
|
+
Files added:
|
481
|
+
test
|
482
|
+
"""
|
483
|
+
Given I run `cat modules/puppet-test/test`
|
484
|
+
Then the output should contain "aruba"
|
485
|
+
And a directory named "modules/puppet-blacksmith" should not exist
|
486
|
+
|
487
|
+
Scenario: When specifying configurations in managed_modules.yml and using a negative filter
|
488
|
+
Given a file named "managed_modules.yml" with:
|
489
|
+
"""
|
490
|
+
---
|
491
|
+
puppet-blacksmith:
|
492
|
+
puppet-test:
|
493
|
+
module_name: test
|
494
|
+
"""
|
495
|
+
And a file named "modulesync.yml" with:
|
496
|
+
"""
|
497
|
+
---
|
498
|
+
namespace: maestrodev
|
499
|
+
git_base: https://github.com/
|
500
|
+
"""
|
501
|
+
And a file named "config_defaults.yml" with:
|
502
|
+
"""
|
503
|
+
---
|
504
|
+
test:
|
505
|
+
name: aruba
|
506
|
+
"""
|
507
|
+
And a directory named "moduleroot"
|
508
|
+
And a file named "moduleroot/test" with:
|
509
|
+
"""
|
510
|
+
<%= @configs['name'] %>
|
511
|
+
"""
|
512
|
+
When I run `msync update --noop -x puppet-blacksmith`
|
143
513
|
Then the exit status should be 0
|
144
514
|
And the output should match:
|
145
515
|
"""
|
516
|
+
Files added:
|
517
|
+
test
|
146
518
|
"""
|
519
|
+
Given I run `cat modules/puppet-test/test`
|
520
|
+
Then the output should contain "aruba"
|
521
|
+
And a directory named "modules/puppet-blacksmith" should not exist
|
147
522
|
|
148
523
|
Scenario: Updating a module with a .sync.yml file
|
149
524
|
Given a file named "managed_modules.yml" with:
|
150
525
|
"""
|
151
526
|
---
|
152
|
-
-
|
527
|
+
- puppet-test
|
153
528
|
"""
|
154
529
|
And a file named "modulesync.yml" with:
|
155
530
|
"""
|
@@ -169,33 +544,122 @@ Feature: update
|
|
169
544
|
require '<%= required %>'
|
170
545
|
<% end %>
|
171
546
|
"""
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
- rvm: 2.1.6
|
192
|
-
env: PUPPET_GEM_VERSION="~> 4.0" STRICT_VARIABLES="yes"
|
193
|
-
notifications:
|
194
|
-
email: false
|
547
|
+
Given I run `git init modules/puppet-test`
|
548
|
+
Given a file named "modules/puppet-test/.git/config" with:
|
549
|
+
"""
|
550
|
+
[core]
|
551
|
+
repositoryformatversion = 0
|
552
|
+
filemode = true
|
553
|
+
bare = false
|
554
|
+
logallrefupdates = true
|
555
|
+
ignorecase = true
|
556
|
+
precomposeunicode = true
|
557
|
+
[remote "origin"]
|
558
|
+
url = https://github.com/maestrodev/puppet-test.git
|
559
|
+
fetch = +refs/heads/*:refs/remotes/origin/*
|
560
|
+
"""
|
561
|
+
Given a file named "modules/puppet-test/.sync.yml" with:
|
562
|
+
"""
|
563
|
+
---
|
564
|
+
spec/spec_helper.rb:
|
565
|
+
unmanaged: true
|
195
566
|
"""
|
196
567
|
When I run `msync update --noop`
|
197
568
|
Then the exit status should be 0
|
198
569
|
And the output should match:
|
199
570
|
"""
|
200
|
-
Not managing spec/spec_helper.rb in
|
571
|
+
Not managing spec/spec_helper.rb in puppet-test
|
572
|
+
"""
|
573
|
+
|
574
|
+
Scenario: Module with custom namespace
|
575
|
+
Given a file named "managed_modules.yml" with:
|
576
|
+
"""
|
577
|
+
---
|
578
|
+
- puppet-test
|
579
|
+
- electrical/puppet-lib-file_concat
|
580
|
+
"""
|
581
|
+
And a file named "modulesync.yml" with:
|
582
|
+
"""
|
583
|
+
---
|
584
|
+
namespace: maestrodev
|
585
|
+
git_base: https://github.com/
|
586
|
+
"""
|
587
|
+
And a file named "config_defaults.yml" with:
|
588
|
+
"""
|
589
|
+
---
|
590
|
+
test:
|
591
|
+
name: aruba
|
592
|
+
"""
|
593
|
+
And a directory named "moduleroot"
|
594
|
+
And a file named "moduleroot/test" with:
|
595
|
+
"""
|
596
|
+
<%= @configs['name'] %>
|
201
597
|
"""
|
598
|
+
When I run `msync update --noop`
|
599
|
+
Then the exit status should be 0
|
600
|
+
And the output should match:
|
601
|
+
"""
|
602
|
+
Files added:
|
603
|
+
test
|
604
|
+
"""
|
605
|
+
Given I run `cat modules/puppet-test/.git/config`
|
606
|
+
Then the output should contain "url = https://github.com/maestrodev/puppet-test.git"
|
607
|
+
Given I run `cat modules/puppet-lib-file_concat/.git/config`
|
608
|
+
Then the output should contain "url = https://github.com/electrical/puppet-lib-file_concat.git"
|
609
|
+
|
610
|
+
Scenario: Modifying an existing file with values expoxed by the module
|
611
|
+
Given a file named "managed_modules.yml" with:
|
612
|
+
"""
|
613
|
+
---
|
614
|
+
- puppet-test
|
615
|
+
"""
|
616
|
+
And a file named "modulesync.yml" with:
|
617
|
+
"""
|
618
|
+
---
|
619
|
+
namespace: maestrodev
|
620
|
+
git_base: https://github.com/
|
621
|
+
"""
|
622
|
+
And a file named "config_defaults.yml" with:
|
623
|
+
"""
|
624
|
+
---
|
625
|
+
README.md:
|
626
|
+
"""
|
627
|
+
And a directory named "moduleroot"
|
628
|
+
And a file named "moduleroot/README.md" with:
|
629
|
+
"""
|
630
|
+
echo '<%= @configs[:git_base] + @configs[:namespace] %>'
|
631
|
+
"""
|
632
|
+
When I run `msync update --noop`
|
633
|
+
Then the exit status should be 0
|
634
|
+
And the output should match:
|
635
|
+
"""
|
636
|
+
Files changed:
|
637
|
+
+diff --git a/README.md b/README.md
|
638
|
+
"""
|
639
|
+
Given I run `cat modules/puppet-test/README.md`
|
640
|
+
Then the output should contain:
|
641
|
+
"""
|
642
|
+
echo 'https://github.com/maestrodev'
|
643
|
+
"""
|
644
|
+
|
645
|
+
Scenario: Running the same update twice and pushing to a remote branch
|
646
|
+
Given a mocked git configuration
|
647
|
+
And a remote module repository
|
648
|
+
And a file named "config_defaults.yml" with:
|
649
|
+
"""
|
650
|
+
---
|
651
|
+
Gemfile:
|
652
|
+
gem_source: https://somehost.com
|
653
|
+
"""
|
654
|
+
And a directory named "moduleroot"
|
655
|
+
And a file named "moduleroot/Gemfile" with:
|
656
|
+
"""
|
657
|
+
source '<%= @configs['gem_source'] %>'
|
658
|
+
"""
|
659
|
+
When I run `msync update -m "Update Gemfile" -r test`
|
660
|
+
Then the exit status should be 0
|
661
|
+
Given I remove the directory "modules"
|
662
|
+
When I run `msync update -m "Update Gemfile" -r test`
|
663
|
+
Then the exit status should be 0
|
664
|
+
Then the output should not contain "error"
|
665
|
+
Then the output should not contain "rejected"
|