puppet-forge-server 1.6.0 → 1.7.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/README.md +1 -2
- data/lib/puppet_forge_server.rb +2 -3
- data/lib/puppet_forge_server/api/v1/modules.rb +22 -35
- data/lib/puppet_forge_server/api/v1/releases.rb +2 -2
- data/lib/puppet_forge_server/api/v3/modules.rb +5 -6
- data/lib/puppet_forge_server/api/v3/releases.rb +1 -1
- data/lib/puppet_forge_server/backends/directory.rb +1 -1
- data/lib/puppet_forge_server/http/http_client.rb +4 -1
- data/lib/puppet_forge_server/patches/gem.rb +21 -0
- data/lib/puppet_forge_server/server.rb +6 -7
- data/lib/puppet_forge_server/utils/archiver.rb +6 -4
- data/lib/puppet_forge_server/utils/option_parser.rb +15 -15
- data/lib/puppet_forge_server/version.rb +1 -1
- data/puppet-forge-server.gemspec +1 -0
- metadata +17 -4
- data/lib/puppet_forge_server/patches.rb +0 -72
- data/lib/puppet_forge_server/utils/url.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f47167acd969b4e7d7725a351d02c9a4d6e5608
|
4
|
+
data.tar.gz: fe6cb62aec95aa35517235e90f965ac267b72790
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb7deb4e4e51e3a1c0942de9e5455740b70587bccee7720d011ad61a75f5d87072357434bcca429a747fbab6f4b243aa9abe74f33b394d3fd38198f3d20ed3e3
|
7
|
+
data.tar.gz: 2ca911fd043d05967a887815d8121b76c0d2960f82d7922ef562fa3b1c476a94d36bdb8a4cfe3c01946e8888dbefe036ceff2bfa49e3359f125c7128dbd00049
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Puppet Forge Server
|
2
2
|
|
3
|
-
Private Puppet Forge Server supporting local files and both v1 and v3 API proxies.
|
3
|
+
Private Puppet Forge Server supporting local files and both v1 and v3 API proxies.
|
4
4
|
|
5
5
|
[](https://travis-ci.org/unibet/puppet-forge-server)
|
6
6
|
[](http://badge.fury.io/rb/puppet-forge-server)
|
@@ -216,5 +216,4 @@ Puppet module *metadata* json representation is used as a main business *model*.
|
|
216
216
|
|
217
217
|
## Reference
|
218
218
|
|
219
|
-
* [Puppet Library](https://github.com/drrb/puppet-library)
|
220
219
|
* [Puppet Anvil](https://github.com/jhaals/puppet-anvil)
|
data/lib/puppet_forge_server.rb
CHANGED
@@ -14,8 +14,8 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
-
require 'puppet_forge_server/patches'
|
18
17
|
require 'puppet_forge_server/version'
|
18
|
+
require 'puppet_forge_server/patches/gem.rb'
|
19
19
|
|
20
20
|
module PuppetForgeServer
|
21
21
|
autoload :Server, 'puppet_forge_server/server'
|
@@ -57,7 +57,6 @@ module PuppetForgeServer
|
|
57
57
|
module Utils
|
58
58
|
autoload :Archiver, 'puppet_forge_server/utils/archiver'
|
59
59
|
autoload :OptionParser, 'puppet_forge_server/utils/option_parser'
|
60
|
-
autoload :Url, 'puppet_forge_server/utils/url'
|
61
60
|
autoload :Buffer, 'puppet_forge_server/utils/buffer'
|
62
61
|
autoload :Http, 'puppet_forge_server/utils/http'
|
63
62
|
end
|
@@ -65,4 +64,4 @@ module PuppetForgeServer
|
|
65
64
|
module Http
|
66
65
|
autoload :HttpClient, 'puppet_forge_server/http/http_client'
|
67
66
|
end
|
68
|
-
end
|
67
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright
|
4
|
-
# Copyright 2014 North Development AB
|
3
|
+
# Copyright 2015 North Development AB
|
5
4
|
#
|
6
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
6
|
# you may not use this file except in compliance with the License.
|
@@ -19,49 +18,37 @@ module PuppetForgeServer::Api::V1
|
|
19
18
|
module Modules
|
20
19
|
|
21
20
|
def get_modules(metadata)
|
22
|
-
modules =
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
modules = {}
|
22
|
+
metadata.each do |element|
|
23
|
+
if modules[element[:metadata].name]
|
24
|
+
if max_version(modules[element[:metadata].name][:version], element[:metadata].version) == element[:metadata].version
|
25
|
+
modules[element[:metadata].name][:desc] = element[:metadata].description
|
26
|
+
modules[element[:metadata].name][:version] = element[:metadata].version
|
27
|
+
modules[element[:metadata].name][:project_url] = element[:metadata].project_page
|
28
|
+
end
|
29
|
+
modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).uniq.sort_by { |r| Gem::Version.new(r[:version]) }.reverse
|
30
|
+
modules[element[:metadata].name][:tag_list] = (modules[element[:metadata].name][:tag_list] + element[:tags]).uniq.compact
|
31
|
+
else
|
32
|
+
name = element[:metadata].name.sub(/^[^-]+-/, '')
|
33
|
+
modules[element[:metadata].name] = {
|
26
34
|
:author => element[:metadata].author,
|
27
|
-
:full_name =>
|
35
|
+
:full_name => element[:metadata].name.sub('-', '/'),
|
28
36
|
:name => name,
|
29
37
|
:desc => element[:metadata].description,
|
30
38
|
:version => element[:metadata].version,
|
31
39
|
:project_url => element[:metadata].project_page,
|
32
|
-
:releases =>
|
33
|
-
:tag_list => [element[:metadata].author, name]
|
34
|
-
|
40
|
+
:releases => releases_version(element[:metadata]),
|
41
|
+
:tag_list => element[:tags] ? element[:tags] : [element[:metadata].author, name],
|
42
|
+
}
|
43
|
+
end
|
35
44
|
end
|
36
45
|
|
37
|
-
|
46
|
+
modules.values
|
38
47
|
end
|
39
48
|
|
40
49
|
private
|
41
|
-
def
|
42
|
-
|
43
|
-
result[:full_name]
|
44
|
-
end
|
45
|
-
|
46
|
-
grouped_modules.values.map do |value|
|
47
|
-
merge_values(value)
|
48
|
-
end.flatten.uniq
|
49
|
-
end
|
50
|
-
|
51
|
-
def merge_values(value)
|
52
|
-
highest_version, tags, releases = value.inject([nil, [], []]) do |(highest_version, tags, releases), result|
|
53
|
-
[
|
54
|
-
max_version(highest_version, result[:version]),
|
55
|
-
tags + (result[:tag_list] || []),
|
56
|
-
releases + (result[:releases] || [])
|
57
|
-
]
|
58
|
-
end
|
59
|
-
|
60
|
-
value.first.tap do |result|
|
61
|
-
result[:version] = highest_version
|
62
|
-
result[:tag_list] = tags.uniq
|
63
|
-
result[:releases] = releases.uniq.version_sort_by { |r| r[:version] }.reverse
|
64
|
-
end
|
50
|
+
def releases_version(metadata)
|
51
|
+
[{:version => metadata.version}]
|
65
52
|
end
|
66
53
|
|
67
54
|
def max_version(left, right)
|
@@ -21,9 +21,9 @@ module PuppetForgeServer::Api::V1
|
|
21
21
|
{
|
22
22
|
:file => "/api/v1/files#{element[:path]}",
|
23
23
|
:version => element[:metadata].version,
|
24
|
-
:dependencies => element[:metadata].dependencies.map {|dep| [dep.name, dep.version_requirement]}
|
24
|
+
:dependencies => element[:metadata].dependencies.map {|dep| [dep.name, dep.version_requirement]}.compact
|
25
25
|
}
|
26
|
-
end.
|
26
|
+
end.uniq{|r| r[:version]}.sort_by {|r| Gem::Version.new(r[:version])}
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -23,22 +23,21 @@ module PuppetForgeServer::Api::V3
|
|
23
23
|
metadata.each do |element|
|
24
24
|
if modules[element[:metadata].name]
|
25
25
|
if max_version(modules[element[:metadata].name][:current_release][:version], element[:metadata].version) == element[:metadata].version
|
26
|
+
# Saving curret release tags for merging with new max version current release
|
26
27
|
tags = modules[element[:metadata].name][:current_release][:tags]
|
27
28
|
modules[element[:metadata].name][:current_release] = get_releases([element]).first
|
28
|
-
modules[element[:metadata].name][:current_release][:tags] = (modules[element[:metadata].name][:current_release][:tags] + tags).uniq
|
29
|
+
modules[element[:metadata].name][:current_release][:tags] = (modules[element[:metadata].name][:current_release][:tags] + tags).uniq.compact
|
29
30
|
end
|
30
|
-
modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).
|
31
|
+
modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).uniq.sort_by { |r| Gem::Version.new(r[:version]) }.reverse
|
31
32
|
else
|
32
|
-
name = element[:metadata].name.sub(/^[^-]+-/, '')
|
33
|
-
author = element[:metadata].name.split('-')[0]
|
34
33
|
modules[element[:metadata].name] = {
|
35
34
|
:uri => "/v3/modules/#{element[:metadata].name}",
|
36
|
-
:name => name,
|
35
|
+
:name => element[:metadata].name.sub(/^[^-]+-/, ''),
|
37
36
|
:homepage_url => element[:metadata].project_page,
|
38
37
|
:issues_url => element[:metadata].issues_url,
|
39
38
|
:releases => releases_version(element[:metadata]),
|
40
39
|
:current_release => get_releases([element]).first,
|
41
|
-
:owner => {:username => author, :uri => "/v3/users/#{author}"}
|
40
|
+
:owner => {:username => element[:metadata].author, :uri => "/v3/users/#{element[:metadata].author}"}
|
42
41
|
}
|
43
42
|
end
|
44
43
|
end
|
@@ -54,7 +54,7 @@ module PuppetForgeServer::Backends
|
|
54
54
|
|
55
55
|
private
|
56
56
|
def read_metadata(archive_path)
|
57
|
-
metadata_file =
|
57
|
+
metadata_file = read_from_archive(archive_path, %r[[^/]+/metadata\.json$])
|
58
58
|
JSON.parse(metadata_file)
|
59
59
|
rescue => error
|
60
60
|
warn "Error reading from module archive #{archive_path}: #{error}"
|
@@ -16,6 +16,7 @@
|
|
16
16
|
|
17
17
|
require 'open-uri'
|
18
18
|
require 'open_uri_redirections'
|
19
|
+
require 'timeout'
|
19
20
|
|
20
21
|
module PuppetForgeServer::Http
|
21
22
|
class HttpClient
|
@@ -29,7 +30,9 @@ module PuppetForgeServer::Http
|
|
29
30
|
|
30
31
|
private
|
31
32
|
def open_uri(url)
|
32
|
-
|
33
|
+
::Timeout.timeout(10) do
|
34
|
+
open(url, 'User-Agent' => "Puppet-Forge-Server/#{PuppetForgeServer::VERSION}", :allow_redirections => :safe)
|
35
|
+
end
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright 2015 North Development AB
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
class Gem::Version
|
18
|
+
def initialize version
|
19
|
+
@version = self.class.correct?(version) ? version.to_s.strip.gsub('-', '.pre.') : '0'
|
20
|
+
end
|
21
|
+
end
|
@@ -92,21 +92,20 @@ module PuppetForgeServer
|
|
92
92
|
|
93
93
|
private
|
94
94
|
def backends(options)
|
95
|
-
|
95
|
+
# Add directory backend for serving cached modules in case proxy flips over
|
96
|
+
backends = options[:backend]['Proxy'] && ! options[:backend]['Proxy'].empty? ? [PuppetForgeServer::Backends.const_get('Directory').new(options[:cache_basedir])] : []
|
97
|
+
backends << options[:backend].map do |type, typed_backends|
|
96
98
|
typed_backends.map do |url|
|
97
99
|
case type
|
98
100
|
when 'Proxy'
|
99
101
|
@log.info "Detecting API version for #{url}..."
|
100
|
-
[
|
101
|
-
PuppetForgeServer::Backends.const_get("#{type}V#{get_api_version(url)}").new(url.chomp('/'), options[:cache_basedir]),
|
102
|
-
# Add directory backend for serving cached modules in case proxy flips over
|
103
|
-
PuppetForgeServer::Backends.const_get('Directory').new(options[:cache_basedir])
|
104
|
-
]
|
102
|
+
PuppetForgeServer::Backends.const_get("#{type}V#{get_api_version(url)}").new(url.chomp('/'), options[:cache_basedir])
|
105
103
|
else
|
106
104
|
PuppetForgeServer::Backends.const_get(type).new(url)
|
107
105
|
end
|
108
106
|
end
|
109
|
-
end
|
107
|
+
end
|
108
|
+
backends.flatten.sort_by { |backend| backend.PRIORITY }
|
110
109
|
end
|
111
110
|
end
|
112
111
|
end
|
@@ -19,11 +19,13 @@ require 'zlib'
|
|
19
19
|
|
20
20
|
module PuppetForgeServer::Utils
|
21
21
|
module Archiver
|
22
|
-
def
|
23
|
-
tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(
|
22
|
+
def read_from_archive(archive, name_regex)
|
23
|
+
tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(archive))
|
24
24
|
tar.rewind
|
25
|
-
|
26
|
-
|
25
|
+
tar.each do |obj|
|
26
|
+
return obj.read if obj.full_name =~ name_regex
|
27
|
+
end
|
28
|
+
raise "Given name #{name_regex} not found in #{archive}"
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright
|
4
|
-
# Copyright 2014 North Development AB
|
3
|
+
# Copyright 2015 North Development AB
|
5
4
|
#
|
6
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
6
|
# you may not use this file except in compliance with the License.
|
@@ -17,10 +16,10 @@
|
|
17
16
|
|
18
17
|
require 'optparse'
|
19
18
|
require 'tmpdir'
|
19
|
+
require 'uri'
|
20
20
|
|
21
21
|
module PuppetForgeServer::Utils
|
22
22
|
module OptionParser
|
23
|
-
include PuppetForgeServer::Utils::Url
|
24
23
|
|
25
24
|
@@DEFAULT_DAEMONIZE = false
|
26
25
|
@@DEFAULT_PORT = 8080
|
@@ -28,42 +27,43 @@ module PuppetForgeServer::Utils
|
|
28
27
|
@@DEFAULT_CACHE_DIR = File.join(Dir.tmpdir.to_s, 'puppet-forge-server', 'cache')
|
29
28
|
@@DEFAULT_LOG_DIR = File.join(Dir.tmpdir.to_s, 'puppet-forge-server', 'log')
|
30
29
|
@@DEFAULT_WEBUI_ROOT = File.expand_path('../app', File.dirname(__FILE__))
|
30
|
+
@@DEFAULT_HOST = '0.0.0.0'
|
31
31
|
|
32
32
|
def parse_options(args)
|
33
|
-
options = {:daemonize => @@DEFAULT_DAEMONIZE, :cache_basedir => @@DEFAULT_CACHE_DIR, :port => @@DEFAULT_PORT, :webui_root => @@DEFAULT_WEBUI_ROOT}
|
33
|
+
options = {:daemonize => @@DEFAULT_DAEMONIZE, :cache_basedir => @@DEFAULT_CACHE_DIR, :port => @@DEFAULT_PORT, :webui_root => @@DEFAULT_WEBUI_ROOT, :host => @@DEFAULT_HOST}
|
34
34
|
option_parser = ::OptionParser.new do |opts|
|
35
35
|
opts.banner = "Usage: #{File.basename $0} [options]"
|
36
36
|
opts.version = PuppetForgeServer::VERSION
|
37
37
|
|
38
|
-
opts.on('-p',
|
38
|
+
opts.on('-p', '--port PORT', "Port number to bind to (default: #{@@DEFAULT_PORT})") do |port|
|
39
39
|
options[:port] = port
|
40
40
|
end
|
41
41
|
|
42
|
-
opts.on('-b', '--bind
|
43
|
-
options[:
|
42
|
+
opts.on('-b', '--bind HOST', "Host name or IP address to bind to (default: #{@@DEFAULT_HOST})") do |host|
|
43
|
+
options[:host] = host
|
44
44
|
end
|
45
45
|
|
46
|
-
opts.on('-D', '--daemonize', "Run
|
46
|
+
opts.on('-D', '--daemonize', "Run server in the background (default: #{@@DEFAULT_DAEMONIZE})") do
|
47
47
|
options[:daemonize] = true
|
48
48
|
end
|
49
49
|
|
50
|
-
opts.on('--pidfile FILE',
|
50
|
+
opts.on('--pidfile FILE', "Pid file location (default: #{@@DEFAULT_PID_FILE})") do |pidfile|
|
51
51
|
options[:pidfile] = pidfile
|
52
52
|
end
|
53
53
|
|
54
54
|
options[:backend] = {'Directory' => [], 'Proxy' => [], 'Source' => []}
|
55
|
-
opts.on('-m', '--module-dir DIR', 'Directory containing packaged modules (
|
55
|
+
opts.on('-m', '--module-dir DIR', 'Directory containing packaged modules (recursively searched)') do |module_dir|
|
56
56
|
options[:backend]['Directory'] << module_dir
|
57
57
|
end
|
58
|
-
opts.on('-x', '--proxy URL', 'Remote forge
|
59
|
-
options[:backend]['Proxy'] <<
|
58
|
+
opts.on('-x', '--proxy URL', 'Remote forge URL') do |url|
|
59
|
+
options[:backend]['Proxy'] << url
|
60
60
|
end
|
61
61
|
|
62
|
-
opts.on('--cache-basedir DIR', "
|
62
|
+
opts.on('--cache-basedir DIR', "Proxy module cache base directory (default: #{@@DEFAULT_CACHE_DIR})") do |cache_basedir|
|
63
63
|
options[:cache_basedir] = cache_basedir
|
64
64
|
end
|
65
65
|
|
66
|
-
opts.on('--log-dir DIR', "
|
66
|
+
opts.on('--log-dir DIR', "Log directory (default: #{@@DEFAULT_LOG_DIR})") do |log_dir|
|
67
67
|
options[:log_dir] = log_dir
|
68
68
|
end
|
69
69
|
|
@@ -96,4 +96,4 @@ module PuppetForgeServer::Utils
|
|
96
96
|
return options
|
97
97
|
end
|
98
98
|
end
|
99
|
-
end
|
99
|
+
end
|
data/puppet-forge-server.gemspec
CHANGED
@@ -42,6 +42,7 @@ Gem::Specification.new do |spec|
|
|
42
42
|
spec.add_dependency 'open4', '~> 1.3'
|
43
43
|
spec.add_dependency 'open_uri_redirections', '~> 0.1'
|
44
44
|
spec.add_dependency 'haml', '~> 4.0'
|
45
|
+
spec.add_dependency 'deep_merge', '~> 1.0'
|
45
46
|
|
46
47
|
spec.add_development_dependency 'rake', '~> 10.3'
|
47
48
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-forge-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilja Bobkevic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '4.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: deep_merge
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: rake
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,13 +218,12 @@ files:
|
|
204
218
|
- lib/puppet_forge_server/models/builder.rb
|
205
219
|
- lib/puppet_forge_server/models/dependency.rb
|
206
220
|
- lib/puppet_forge_server/models/metadata.rb
|
207
|
-
- lib/puppet_forge_server/patches.rb
|
221
|
+
- lib/puppet_forge_server/patches/gem.rb
|
208
222
|
- lib/puppet_forge_server/server.rb
|
209
223
|
- lib/puppet_forge_server/utils/archiver.rb
|
210
224
|
- lib/puppet_forge_server/utils/buffer.rb
|
211
225
|
- lib/puppet_forge_server/utils/http.rb
|
212
226
|
- lib/puppet_forge_server/utils/option_parser.rb
|
213
|
-
- lib/puppet_forge_server/utils/url.rb
|
214
227
|
- lib/puppet_forge_server/version.rb
|
215
228
|
- puppet-forge-server.gemspec
|
216
229
|
- spec/spec_helper.rb
|
@@ -1,72 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
#
|
3
|
-
# Copyright 2014 drrb
|
4
|
-
# Copyright 2014 North Development AB
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require 'rubygems/package'
|
19
|
-
|
20
|
-
module Gem
|
21
|
-
def Version.new(version)
|
22
|
-
super(version.to_s.gsub('-', '.pre.'))
|
23
|
-
rescue ArgumentError
|
24
|
-
if version =~ /^\d+(\.\d+)*/
|
25
|
-
super(version[/^\d+(\.\d+)*/])
|
26
|
-
else
|
27
|
-
super('0')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class Hash
|
33
|
-
def deep_merge(other)
|
34
|
-
merge(other) do |key, old_val, new_val|
|
35
|
-
if old_val.instance_of? Array
|
36
|
-
old_val + new_val
|
37
|
-
else
|
38
|
-
new_val
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def deep_merge!(other)
|
44
|
-
replace(deep_merge(other))
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class Array
|
49
|
-
def deep_merge
|
50
|
-
inject({}) do |merged, map|
|
51
|
-
merged.deep_merge(map)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def version_sort_by
|
56
|
-
sort_by do |element|
|
57
|
-
Gem::Version.new(yield(element))
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# Used by PuppetForgeServer::Utils::Archiver
|
63
|
-
class Gem::Package::TarReader
|
64
|
-
# Old versions of RubyGems don't include Enumerable in here
|
65
|
-
def find
|
66
|
-
each do |entry|
|
67
|
-
if yield(entry)
|
68
|
-
return entry
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
#
|
3
|
-
# Copyright 2014 drrb
|
4
|
-
# Copyright 2014 North Development AB
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require 'uri'
|
19
|
-
|
20
|
-
module PuppetForgeServer::Utils
|
21
|
-
module Url
|
22
|
-
def normalize_url(uri_string)
|
23
|
-
begin
|
24
|
-
url = URI.parse(uri_string)
|
25
|
-
rescue URI::InvalidURIError => e
|
26
|
-
raise PuppetForgeServer::Errors::Expected, "Invalid URL '#{uri_string}': #{e.message}"
|
27
|
-
end
|
28
|
-
if url.scheme
|
29
|
-
raise PuppetForgeServer::Errors::Expected, "Invalid URL '#{uri_string}': unsupported protocol '#{url.scheme}'" unless url.scheme =~ /^https?$/
|
30
|
-
else
|
31
|
-
uri_string = "http://#{uri_string}"
|
32
|
-
end
|
33
|
-
uri_string.sub /\/$/, ''
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|