librarian-puppet 0.9.1 → 0.9.2.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/librarian/puppet.rb +6 -1
- data/lib/librarian/puppet/cli.rb +21 -0
- data/lib/librarian/puppet/environment.rb +1 -0
- data/lib/librarian/puppet/lockfile/parser.rb +53 -0
- data/lib/librarian/puppet/source/forge.rb +0 -8
- data/lib/librarian/puppet/source/git.rb +29 -0
- data/lib/librarian/puppet/source/local.rb +1 -0
- data/lib/librarian/puppet/version.rb +5 -0
- data/vendor/librarian/CHANGELOG.md +17 -0
- data/vendor/librarian/Gemfile +2 -0
- data/vendor/librarian/README.md +99 -14
- data/vendor/librarian/features/chef/cli/init.feature +1 -0
- data/vendor/librarian/features/chef/cli/show.feature +13 -1
- data/vendor/librarian/lib/librarian/action/base.rb +6 -4
- data/vendor/librarian/lib/librarian/chef/cli.rb +21 -0
- data/vendor/librarian/lib/librarian/chef/environment.rb +9 -1
- data/vendor/librarian/lib/librarian/chef/manifest_reader.rb +14 -2
- data/vendor/librarian/lib/librarian/chef/source/git.rb +13 -0
- data/vendor/librarian/lib/librarian/chef/source/local.rb +8 -2
- data/vendor/librarian/lib/librarian/chef/source/site.rb +18 -6
- data/vendor/librarian/lib/librarian/cli.rb +54 -24
- data/vendor/librarian/lib/librarian/config.rb +7 -0
- data/vendor/librarian/lib/librarian/config/database.rb +205 -0
- data/vendor/librarian/lib/librarian/config/file_source.rb +47 -0
- data/vendor/librarian/lib/librarian/config/hash_source.rb +33 -0
- data/vendor/librarian/lib/librarian/config/source.rb +149 -0
- data/vendor/librarian/lib/librarian/dependency.rb +1 -5
- data/vendor/librarian/lib/librarian/dsl.rb +6 -3
- data/vendor/librarian/lib/librarian/dsl/target.rb +0 -4
- data/vendor/librarian/lib/librarian/environment.rb +30 -25
- data/vendor/librarian/lib/librarian/lockfile.rb +0 -4
- data/vendor/librarian/lib/librarian/lockfile/compiler.rb +0 -4
- data/vendor/librarian/lib/librarian/lockfile/parser.rb +4 -8
- data/vendor/librarian/lib/librarian/logger.rb +46 -0
- data/vendor/librarian/lib/librarian/manifest.rb +1 -9
- data/vendor/librarian/lib/librarian/resolver.rb +6 -1
- data/vendor/librarian/lib/librarian/resolver/implementation.rb +1 -5
- data/vendor/librarian/lib/librarian/source/git/repository.rb +10 -6
- data/vendor/librarian/lib/librarian/source/local.rb +12 -2
- data/vendor/librarian/lib/librarian/spec_change_set.rb +6 -3
- data/vendor/librarian/lib/librarian/specfile.rb +0 -4
- data/vendor/librarian/lib/librarian/version.rb +1 -1
- data/vendor/librarian/librarian.gemspec +1 -0
- data/vendor/librarian/spec/functional/source/git/repository_spec.rb +149 -0
- data/vendor/librarian/spec/unit/config/database_spec.rb +319 -0
- data/vendor/librarian/spec/unit/dependency_spec.rb +6 -0
- data/vendor/librarian/spec/unit/manifest_spec.rb +6 -0
- metadata +107 -66
- data/librarian-puppet.gemspec +0 -130
- data/vendor/librarian/.rspec +0 -1
- data/vendor/librarian/.travis.yml +0 -6
- data/vendor/librarian/lib/librarian/helpers/debug.rb +0 -35
@@ -0,0 +1,47 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
require "librarian/config/source"
|
4
|
+
|
5
|
+
module Librarian
|
6
|
+
module Config
|
7
|
+
class FileSource < Source
|
8
|
+
|
9
|
+
attr_accessor :config_path
|
10
|
+
private :config_path=
|
11
|
+
|
12
|
+
def initialize(adapter_name, options = { })
|
13
|
+
super
|
14
|
+
|
15
|
+
self.config_path = options.delete(:config_path) or raise ArgumentError, "must provide config_path"
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
config_path
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def load
|
25
|
+
return { } unless File.file?(config_path)
|
26
|
+
|
27
|
+
raw = YAML.load_file(config_path)
|
28
|
+
return { } unless Hash === raw
|
29
|
+
|
30
|
+
translate_raw_to_config(raw)
|
31
|
+
end
|
32
|
+
|
33
|
+
def save(config)
|
34
|
+
raw = translate_config_to_raw(config)
|
35
|
+
|
36
|
+
if config.empty?
|
37
|
+
File.delete(config_path) if File.file?(config_path)
|
38
|
+
else
|
39
|
+
config_dir = File.dirname(config_path)
|
40
|
+
FileUtils.mkpath(config_dir) unless File.directory?(config_dir)
|
41
|
+
File.open(config_path, "wb"){|f| YAML.dump(raw, f)}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "librarian/source"
|
2
|
+
|
3
|
+
module Librarian
|
4
|
+
module Config
|
5
|
+
class HashSource < Source
|
6
|
+
|
7
|
+
attr_accessor :name, :raw
|
8
|
+
private :name=, :raw=
|
9
|
+
|
10
|
+
def initialize(adapter_name, options = { })
|
11
|
+
super
|
12
|
+
|
13
|
+
self.name = options.delete(:name) or raise ArgumentError, "must provide name"
|
14
|
+
self.raw = options.delete(:raw) or raise ArgumentError, "must provide raw"
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
name
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def load
|
24
|
+
translate_raw_to_config(raw)
|
25
|
+
end
|
26
|
+
|
27
|
+
def save(config)
|
28
|
+
raise Error, "nonsense!"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require "librarian/error"
|
2
|
+
|
3
|
+
module Librarian
|
4
|
+
module Config
|
5
|
+
class Source
|
6
|
+
|
7
|
+
RAW_KEY_SUFFIX_VALIDITY_PATTERN =
|
8
|
+
/\A[A-Z0-9_]+\z/
|
9
|
+
CONFIG_KEY_VALIDITY_PATTERN =
|
10
|
+
/\A[a-z][a-z0-9\-]+(?:\.[a-z0-9\-]+)*\z/
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def raw_key_suffix_validity_pattern
|
14
|
+
RAW_KEY_SUFFIX_VALIDITY_PATTERN
|
15
|
+
end
|
16
|
+
def config_key_validity_pattern
|
17
|
+
CONFIG_KEY_VALIDITY_PATTERN
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_accessor :adapter_name
|
22
|
+
private :adapter_name=
|
23
|
+
|
24
|
+
def initialize(adapter_name, options = { })
|
25
|
+
self.adapter_name = adapter_name
|
26
|
+
|
27
|
+
self.forbidden_keys = options.delete(:forbidden_keys) || []
|
28
|
+
end
|
29
|
+
|
30
|
+
def [](key)
|
31
|
+
load!
|
32
|
+
|
33
|
+
data[key]
|
34
|
+
end
|
35
|
+
|
36
|
+
def []=(key, value)
|
37
|
+
key_permitted?(key) or raise Error, "key not permitted: #{key.inspect}"
|
38
|
+
value_permitted?(key, value) or raise Error, "value for key #{key.inspect} not permitted: #{value.inspect}"
|
39
|
+
|
40
|
+
load!
|
41
|
+
if value.nil?
|
42
|
+
data.delete(key)
|
43
|
+
else
|
44
|
+
data[key] = value
|
45
|
+
end
|
46
|
+
save(data)
|
47
|
+
end
|
48
|
+
|
49
|
+
def keys
|
50
|
+
load!
|
51
|
+
|
52
|
+
data.keys
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
attr_accessor :data, :forbidden_keys
|
58
|
+
|
59
|
+
def load!
|
60
|
+
self.data = load unless data
|
61
|
+
end
|
62
|
+
|
63
|
+
def key_permitted?(key)
|
64
|
+
String === key &&
|
65
|
+
config_key_validity_pattern === key &&
|
66
|
+
!forbidden_keys.any?{|k| k === key}
|
67
|
+
end
|
68
|
+
|
69
|
+
def value_permitted?(key, value)
|
70
|
+
return true if value.nil?
|
71
|
+
|
72
|
+
String === value
|
73
|
+
end
|
74
|
+
|
75
|
+
def raw_key_valid?(key)
|
76
|
+
return false unless key.start_with?(raw_key_prefix)
|
77
|
+
|
78
|
+
suffix = key[raw_key_prefix.size..-1]
|
79
|
+
raw_key_suffix_validity_pattern =~ suffix
|
80
|
+
end
|
81
|
+
|
82
|
+
def raw_key_suffix_validity_pattern
|
83
|
+
self.class.raw_key_suffix_validity_pattern
|
84
|
+
end
|
85
|
+
|
86
|
+
def config_key_valid?(key)
|
87
|
+
config_key_validity_pattern === key
|
88
|
+
end
|
89
|
+
|
90
|
+
def config_key_validity_pattern
|
91
|
+
self.class.config_key_validity_pattern
|
92
|
+
end
|
93
|
+
|
94
|
+
def raw_key_prefix
|
95
|
+
@key_prefix ||= "LIBRARIAN_#{adapter_name.upcase}_"
|
96
|
+
end
|
97
|
+
|
98
|
+
def assert_raw_keys_valid!(raw)
|
99
|
+
bad_keys = raw.keys.reject{|k| raw_key_valid?(k)}
|
100
|
+
unless bad_keys.empty?
|
101
|
+
config_path_s = config_path.to_s.inspect
|
102
|
+
bad_keys_s = bad_keys.map(&:inspect).join(", ")
|
103
|
+
raise Error, "config #{to_s} has bad keys: #{bad_keys_s}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def assert_config_keys_valid!(config)
|
108
|
+
bad_keys = config.keys.reject{|k| config_key_valid?(k)}
|
109
|
+
unless bad_keys.empty?
|
110
|
+
bad_keys_s = bad_keys.map(&:inspect).join(", ")
|
111
|
+
raise Error, "config has bad keys: #{bad_keys_s}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def assert_values_valid!(data)
|
116
|
+
bad_data = data.reject{|k, v| String === v}
|
117
|
+
bad_keys = bad_data.keys
|
118
|
+
|
119
|
+
unless bad_keys.empty?
|
120
|
+
bad_keys_s = bad_keys.map(&:inspect).join(", ")
|
121
|
+
raise Error, "config has bad values for keys: #{bad_keys_s}"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def translate_raw_to_config(raw)
|
126
|
+
assert_raw_keys_valid!(raw)
|
127
|
+
assert_values_valid!(raw)
|
128
|
+
|
129
|
+
Hash[raw.map do |key, value|
|
130
|
+
key = key[raw_key_prefix.size .. -1]
|
131
|
+
key = key.downcase.gsub(/__/, ".").gsub(/_/, "-")
|
132
|
+
[key, value]
|
133
|
+
end]
|
134
|
+
end
|
135
|
+
|
136
|
+
def translate_config_to_raw(config)
|
137
|
+
assert_config_keys_valid!(config)
|
138
|
+
assert_values_valid!(config)
|
139
|
+
|
140
|
+
Hash[config.map do |key, value|
|
141
|
+
key = key.gsub(/\./, "__").gsub(/\-/, "_").upcase
|
142
|
+
key = "#{raw_key_prefix}#{key}"
|
143
|
+
[key, value]
|
144
|
+
end]
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
-
require 'librarian/helpers/debug'
|
4
|
-
|
5
3
|
module Librarian
|
6
4
|
class Dependency
|
7
5
|
|
@@ -42,8 +40,6 @@ module Librarian
|
|
42
40
|
end
|
43
41
|
end
|
44
42
|
|
45
|
-
include Helpers::Debug
|
46
|
-
|
47
43
|
attr_accessor :name, :requirement, :source
|
48
44
|
private :name=, :requirement=, :source=
|
49
45
|
|
@@ -88,7 +84,7 @@ module Librarian
|
|
88
84
|
end
|
89
85
|
|
90
86
|
def assert_name_valid!(name)
|
91
|
-
raise ArgumentError, "name (#{name.inspect}) must be sensible" unless name =~
|
87
|
+
raise ArgumentError, "name (#{name.inspect}) must be sensible" unless name =~ /\A\S(?:.*\S)?\z/
|
92
88
|
end
|
93
89
|
|
94
90
|
end
|
@@ -1,13 +1,10 @@
|
|
1
1
|
require 'librarian/dependency'
|
2
2
|
require 'librarian/dsl/receiver'
|
3
3
|
require 'librarian/dsl/target'
|
4
|
-
require 'librarian/helpers/debug'
|
5
4
|
|
6
5
|
module Librarian
|
7
6
|
class Dsl
|
8
7
|
|
9
|
-
include Helpers::Debug
|
10
|
-
|
11
8
|
class Error < Exception
|
12
9
|
end
|
13
10
|
|
@@ -101,5 +98,11 @@ module Librarian
|
|
101
98
|
end
|
102
99
|
end
|
103
100
|
|
101
|
+
private
|
102
|
+
|
103
|
+
def debug(*args, &block)
|
104
|
+
environment.logger.debug(*args, &block)
|
105
|
+
end
|
106
|
+
|
104
107
|
end
|
105
108
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require "pathname"
|
2
2
|
|
3
|
-
require "librarian/helpers/debug"
|
4
3
|
require "librarian/support/abstract_method"
|
5
4
|
|
6
5
|
require "librarian/error"
|
6
|
+
require "librarian/config"
|
7
7
|
require "librarian/lockfile"
|
8
|
+
require "librarian/logger"
|
8
9
|
require "librarian/specfile"
|
9
10
|
require "librarian/resolver"
|
10
11
|
require "librarian/dsl"
|
@@ -14,30 +15,33 @@ module Librarian
|
|
14
15
|
class Environment
|
15
16
|
|
16
17
|
include Support::AbstractMethod
|
17
|
-
include Helpers::Debug
|
18
18
|
|
19
19
|
attr_accessor :ui
|
20
20
|
|
21
21
|
abstract_method :specfile_name, :dsl_class, :install_path
|
22
22
|
|
23
23
|
def initialize(options = { })
|
24
|
+
@pwd = options.fetch(:pwd) { Dir.pwd }
|
25
|
+
@env = options.fetch(:env) { ENV.to_hash }
|
26
|
+
@home = options.fetch(:home) { File.expand_path("~") }
|
24
27
|
@project_path = options[:project_path]
|
25
28
|
@specfile_name = options[:specfile_name]
|
26
29
|
end
|
27
30
|
|
28
|
-
def
|
29
|
-
@
|
30
|
-
root = Pathname.new(Dir.pwd)
|
31
|
-
root = root.dirname until project_path?(root)
|
32
|
-
path = root.join(specfile_name)
|
33
|
-
path.file? ? root : nil
|
34
|
-
end
|
31
|
+
def logger
|
32
|
+
@logger ||= Logger.new(self)
|
35
33
|
end
|
36
34
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
def config_db
|
36
|
+
@config_db ||= begin
|
37
|
+
Config::Database.new(adapter_name,
|
38
|
+
:pwd => @pwd,
|
39
|
+
:env => @env,
|
40
|
+
:home => @home,
|
41
|
+
:project_path => @project_path,
|
42
|
+
:specfile_name => default_specfile_name
|
43
|
+
)
|
44
|
+
end
|
41
45
|
end
|
42
46
|
|
43
47
|
def default_specfile_name
|
@@ -47,12 +51,16 @@ module Librarian
|
|
47
51
|
end
|
48
52
|
end
|
49
53
|
|
54
|
+
def project_path
|
55
|
+
config_db.project_path
|
56
|
+
end
|
57
|
+
|
50
58
|
def specfile_name
|
51
|
-
|
59
|
+
config_db.specfile_name
|
52
60
|
end
|
53
61
|
|
54
62
|
def specfile_path
|
55
|
-
|
63
|
+
config_db.specfile_path
|
56
64
|
end
|
57
65
|
|
58
66
|
def specfile
|
@@ -63,20 +71,12 @@ module Librarian
|
|
63
71
|
nil
|
64
72
|
end
|
65
73
|
|
66
|
-
def config_name
|
67
|
-
File.join(*[config_prefix, adapter_name].compact)
|
68
|
-
end
|
69
|
-
|
70
|
-
def config_prefix
|
71
|
-
".librarian"
|
72
|
-
end
|
73
|
-
|
74
74
|
def lockfile_name
|
75
|
-
|
75
|
+
config_db.lockfile_name
|
76
76
|
end
|
77
77
|
|
78
78
|
def lockfile_path
|
79
|
-
|
79
|
+
config_db.lockfile_path
|
80
80
|
end
|
81
81
|
|
82
82
|
def lockfile
|
@@ -119,6 +119,11 @@ module Librarian
|
|
119
119
|
self.class.name.split("::")[0 ... -1].inject(Object, &:const_get)::Dsl
|
120
120
|
end
|
121
121
|
|
122
|
+
def config_keys
|
123
|
+
%[
|
124
|
+
]
|
125
|
+
end
|
126
|
+
|
122
127
|
private
|
123
128
|
|
124
129
|
def environment
|
@@ -1,13 +1,9 @@
|
|
1
|
-
require 'librarian/helpers/debug'
|
2
|
-
|
3
1
|
require 'librarian/lockfile/compiler'
|
4
2
|
require 'librarian/lockfile/parser'
|
5
3
|
|
6
4
|
module Librarian
|
7
5
|
class Lockfile
|
8
6
|
|
9
|
-
include Helpers::Debug
|
10
|
-
|
11
7
|
attr_accessor :environment
|
12
8
|
private :environment=
|
13
9
|
attr_reader :path
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'librarian/helpers/debug'
|
2
|
-
|
3
1
|
require 'librarian/manifest'
|
4
2
|
require 'librarian/dependency'
|
5
3
|
require 'librarian/manifest_set'
|
@@ -15,8 +13,6 @@ module Librarian
|
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
18
|
-
include Helpers::Debug
|
19
|
-
|
20
16
|
attr_accessor :environment
|
21
17
|
private :environment=
|
22
18
|
|
@@ -35,18 +31,18 @@ module Librarian
|
|
35
31
|
source_type_name = lines.shift
|
36
32
|
source[:type] = source_type_names_map[source_type_name]
|
37
33
|
options = {}
|
38
|
-
while lines.first =~ /^ {2}([\w
|
34
|
+
while lines.first =~ /^ {2}([\w-]+):\s+(.+)$/
|
39
35
|
lines.shift
|
40
36
|
options[$1.to_sym] = $2
|
41
37
|
end
|
42
38
|
source[:options] = options
|
43
39
|
lines.shift # specs
|
44
40
|
manifests = {}
|
45
|
-
while lines.first =~ /^ {4}([\w
|
41
|
+
while lines.first =~ /^ {4}([\w-]+) \((.*)\)$/
|
46
42
|
lines.shift
|
47
43
|
name = $1
|
48
44
|
manifests[name] = {:version => $2, :dependencies => {}}
|
49
|
-
while lines.first =~ /^ {6}([\w
|
45
|
+
while lines.first =~ /^ {6}([\w-]+) \((.*)\)$/
|
50
46
|
lines.shift
|
51
47
|
manifests[name][:dependencies][$1] = $2.split(/,\s*/)
|
52
48
|
end
|
@@ -58,7 +54,7 @@ module Librarian
|
|
58
54
|
manifests_index = Hash[manifests.map{|m| [m.name, m]}]
|
59
55
|
raise StandardError, "Expected DEPENDENCIES topic!" unless lines.shift == "DEPENDENCIES"
|
60
56
|
dependencies = []
|
61
|
-
while lines.first =~ /^ {2}([\w
|
57
|
+
while lines.first =~ /^ {2}([\w-]+)(?: \((.*)\))?$/
|
62
58
|
lines.shift
|
63
59
|
name, requirement = $1, $2.split(/,\s*/)
|
64
60
|
dependencies << Dependency.new(name, requirement, manifests_index[name].source)
|