r10k 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.mkd +25 -0
- data/lib/r10k/forge/module_release.rb +4 -25
- data/lib/r10k/git/rugged/thin_repository.rb +3 -5
- data/lib/r10k/git/rugged/working_repository.rb +8 -4
- data/lib/r10k/git/shellgit/thin_repository.rb +17 -6
- data/lib/r10k/git/stateful_repository.rb +2 -0
- data/lib/r10k/initializers.rb +2 -2
- data/lib/r10k/module/forge.rb +1 -1
- data/lib/r10k/settings.rb +8 -0
- data/lib/r10k/version.rb +1 -1
- data/spec/integration/git/stateful_repository_spec.rb +8 -0
- data/spec/unit/forge/module_release_spec.rb +0 -32
- data/spec/unit/initializers_spec.rb +6 -6
- data/spec/unit/settings_spec.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTVkMmIxYThmNTlhNWYzZDA2OGM2ZTk4NWY1NGUwODcxNzViNDU2MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MjIwNDQ0NjhkNTgyNWUxMDgzN2U0OWQ4MDYzYjMxZTk4Y2ZmMmM1ZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTQ5YjcxZWI0OWI4MGRiMWUyNjkxODgyYTNhMmM1YjFhNTdkYjFhOTg2MTU5
|
10
|
+
OTM0ZWJmNDBkYzA1NjhlMzVmODdjYWYxODAwY2UxYTA0YzIyYjQ1N2ZjNmY4
|
11
|
+
N2JlMWViZGM0ZTRhOTU4M2IxMTUzZDQ4NzEzY2NmODE0MmQzY2U=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGFiMTA0NTE1NTBkODA2ZGVjOTcwZWMwMTlkMmI1NTdkMDRmY2FkMjYyMWRm
|
14
|
+
YWQ3NDViNjU3Y2UyOTkzM2RkOGM3M2YxNjRjY2FjODU1ZmFjMmQ1YTNjNGNm
|
15
|
+
MTYxZmVmMGFmMzMyYTI3OTg2ZTJjMzQ4Nzk3OWE0OTU3ODg1OGI=
|
data/CHANGELOG.mkd
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
=========
|
3
3
|
|
4
|
+
2.1.1
|
5
|
+
-----
|
6
|
+
|
7
|
+
2015/11/12
|
8
|
+
|
9
|
+
### Notes
|
10
|
+
|
11
|
+
(CODEMGMT-440) Defer git alternates setup
|
12
|
+
|
13
|
+
The fix for RK-175 that updated the Git alternates file for repositories was happening too early, and
|
14
|
+
could cause issues when multiple r10k processes were running concurrently. This has been fixed so that
|
15
|
+
the alternates file update is deferred till the first time the git repository is actually accessed.
|
16
|
+
|
17
|
+
(RK-187) Consider thin repos with a .git file (not directory) to be mismatched
|
18
|
+
|
19
|
+
If a given Git thin repository had a .git file where r10k expected there to be a directory it would
|
20
|
+
behave badly; this has been fixed so that if r10k encounters this case it treats the repository as
|
21
|
+
mismatched.
|
22
|
+
|
23
|
+
(RK-181) Correctly set baseurl/proxy with shared PuppetForge URL
|
24
|
+
|
25
|
+
A combination of some odd connection handling behavior in the puppet_forge gem combined with some
|
26
|
+
bad assumptions in r10k prevented users from being able to actually set a custom forge baseurl;
|
27
|
+
this has been fixed.
|
28
|
+
|
4
29
|
2.1.0
|
5
30
|
-----
|
6
31
|
|
@@ -37,7 +37,10 @@ module R10K
|
|
37
37
|
@full_name = PuppetForge::V3.normalize_name(full_name)
|
38
38
|
@version = version
|
39
39
|
|
40
|
-
PuppetForge
|
40
|
+
# Copy the PuppetForge base connection to the release class; the connection
|
41
|
+
# objects are created in the class instances and thus are not shared with
|
42
|
+
# subclasses.
|
43
|
+
PuppetForge::V3::Release.conn = PuppetForge::V3::Base.conn
|
41
44
|
@forge_release = PuppetForge::V3::Release.new({ :name => @full_name, :version => @version, :slug => "#{@full_name}-#{@version}" })
|
42
45
|
|
43
46
|
@download_path = Pathname.new(Dir.mktmpdir) + (@forge_release.slug + '.tar.gz')
|
@@ -120,30 +123,6 @@ module R10K
|
|
120
123
|
download_path.delete
|
121
124
|
end
|
122
125
|
end
|
123
|
-
|
124
|
-
private
|
125
|
-
|
126
|
-
def conn
|
127
|
-
if settings[:baseurl]
|
128
|
-
PuppetForge.host = settings[:baseurl]
|
129
|
-
conn = PuppetForge::Connection.make_connection(settings[:baseurl])
|
130
|
-
else
|
131
|
-
PuppetForge.host = "https://forgeapi.puppetlabs.com"
|
132
|
-
conn = PuppetForge::Connection.default_connection
|
133
|
-
end
|
134
|
-
conn.proxy(proxy)
|
135
|
-
conn
|
136
|
-
end
|
137
|
-
|
138
|
-
def proxy
|
139
|
-
[
|
140
|
-
settings[:proxy],
|
141
|
-
ENV['HTTPS_PROXY'],
|
142
|
-
ENV['https_proxy'],
|
143
|
-
ENV['HTTP_PROXY'],
|
144
|
-
ENV['http_proxy']
|
145
|
-
].find { |value| value }
|
146
|
-
end
|
147
126
|
end
|
148
127
|
end
|
149
128
|
end
|
@@ -66,11 +66,9 @@ class R10K::Git::Rugged::ThinRepository < R10K::Git::Rugged::WorkingRepository
|
|
66
66
|
# Override the parent class repo setup so that we can make sure the alternates file is up to date
|
67
67
|
# before we create the Rugged::Repository object, which reads from the alternates file.
|
68
68
|
def setup_rugged_repo
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
logger.debug2 { "Updated repo #{@path} to include alternate object db path #{@cache_repo.objects_dir}" }
|
73
|
-
end
|
69
|
+
entry_added = alternates.add?(@cache_repo.objects_dir.to_s)
|
70
|
+
if entry_added
|
71
|
+
logger.debug2 { "Updated repo #{@path} to include alternate object db path #{@cache_repo.objects_dir}" }
|
74
72
|
end
|
75
73
|
super
|
76
74
|
end
|
@@ -13,7 +13,6 @@ class R10K::Git::Rugged::WorkingRepository < R10K::Git::Rugged::BaseRepository
|
|
13
13
|
# @param dirname [String] The directory name of the Git repository
|
14
14
|
def initialize(basedir, dirname)
|
15
15
|
@path = Pathname.new(File.join(basedir, dirname))
|
16
|
-
setup_rugged_repo
|
17
16
|
end
|
18
17
|
|
19
18
|
# Clone this git repository
|
@@ -99,9 +98,14 @@ class R10K::Git::Rugged::WorkingRepository < R10K::Git::Rugged::BaseRepository
|
|
99
98
|
|
100
99
|
private
|
101
100
|
|
102
|
-
def
|
103
|
-
if
|
104
|
-
|
101
|
+
def with_repo
|
102
|
+
if @_rugged_repo.nil? && git_dir.exist?
|
103
|
+
setup_rugged_repo
|
105
104
|
end
|
105
|
+
super
|
106
|
+
end
|
107
|
+
|
108
|
+
def setup_rugged_repo
|
109
|
+
@_rugged_repo = ::Rugged::Repository.new(@path.to_s, :alternates => alternates.to_a)
|
106
110
|
end
|
107
111
|
end
|
@@ -11,12 +11,6 @@ class R10K::Git::ShellGit::ThinRepository < R10K::Git::ShellGit::WorkingReposito
|
|
11
11
|
def initialize(basedir, dirname, cache_repo)
|
12
12
|
@cache_repo = cache_repo
|
13
13
|
super(basedir, dirname)
|
14
|
-
if git_dir.exist?
|
15
|
-
entry_added = alternates.add?(@cache_repo.objects_dir.to_s)
|
16
|
-
if entry_added
|
17
|
-
logger.debug2 { "Updated repo #{@path} to include alternate object db path #{@cache_repo.objects_dir}" }
|
18
|
-
end
|
19
|
-
end
|
20
14
|
end
|
21
15
|
|
22
16
|
# Clone this git repository
|
@@ -51,4 +45,21 @@ class R10K::Git::ShellGit::ThinRepository < R10K::Git::ShellGit::WorkingReposito
|
|
51
45
|
git ["remote", "add", "cache", @cache_repo.git_dir.to_s], :path => @path.to_s
|
52
46
|
fetch
|
53
47
|
end
|
48
|
+
|
49
|
+
def git(cmd, opts = {})
|
50
|
+
if !@_synced_alternates
|
51
|
+
sync_alternates
|
52
|
+
@_synced_alternates = true
|
53
|
+
end
|
54
|
+
super
|
55
|
+
end
|
56
|
+
|
57
|
+
def sync_alternates
|
58
|
+
if git_dir.exist?
|
59
|
+
entry_added = alternates.add?(@cache_repo.objects_dir.to_s)
|
60
|
+
if entry_added
|
61
|
+
logger.debug2 { "Updated repo #{@path} to include alternate object db path #{@cache_repo.objects_dir}" }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
54
65
|
end
|
data/lib/r10k/initializers.rb
CHANGED
@@ -47,8 +47,8 @@ module R10K
|
|
47
47
|
|
48
48
|
class ForgeInitializer < BaseInitializer
|
49
49
|
def call
|
50
|
-
with_setting(:
|
51
|
-
with_setting(:
|
50
|
+
with_setting(:baseurl) { |value| PuppetForge.host = value }
|
51
|
+
with_setting(:proxy) { |value| PuppetForge::V3::Base.conn.proxy(value) }
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
data/lib/r10k/module/forge.rb
CHANGED
@@ -60,7 +60,7 @@ class R10K::Module::Forge < R10K::Module::Base
|
|
60
60
|
def expected_version
|
61
61
|
if @expected_version == :latest
|
62
62
|
begin
|
63
|
-
|
63
|
+
@expected_version = @v3_module.current_release.version
|
64
64
|
rescue Faraday::ResourceNotFound => e
|
65
65
|
raise PuppetForge::ReleaseNotFound, "The module #{@title} does not exist on #{PuppetForge::V3::Release.conn.url_prefix}.", e.backtrace
|
66
66
|
end
|
data/lib/r10k/settings.rb
CHANGED
@@ -35,6 +35,14 @@ module R10K
|
|
35
35
|
R10K::Settings::Collection.new(:forge, [
|
36
36
|
URIDefinition.new(:proxy, {
|
37
37
|
:desc => "An optional proxy server to use when downloading modules from the forge.",
|
38
|
+
:default => lambda do
|
39
|
+
[
|
40
|
+
ENV['HTTPS_PROXY'],
|
41
|
+
ENV['https_proxy'],
|
42
|
+
ENV['HTTP_PROXY'],
|
43
|
+
ENV['http_proxy']
|
44
|
+
].find { |value| value }
|
45
|
+
end
|
38
46
|
}),
|
39
47
|
|
40
48
|
URIDefinition.new(:baseurl, {
|
data/lib/r10k/version.rb
CHANGED
@@ -26,6 +26,14 @@ describe R10K::Git::StatefulRepository do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
describe "when the directory has a .git file" do
|
30
|
+
it "is mismatched" do
|
31
|
+
thinrepo.path.mkdir
|
32
|
+
File.open("#{thinrepo.path}/.git", "w") {}
|
33
|
+
expect(subject.status).to eq :mismatched
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
29
37
|
describe "when the repository doesn't match the desired remote" do
|
30
38
|
it "is mismatched" do
|
31
39
|
thinrepo.clone(remote, {:ref => '1.0.0'})
|
@@ -18,38 +18,6 @@ describe R10K::Forge::ModuleRelease do
|
|
18
18
|
subject.unpack_path = unpack_path
|
19
19
|
end
|
20
20
|
|
21
|
-
describe 'setting the proxy' do
|
22
|
-
%w[HTTPS_PROXY https_proxy HTTP_PROXY http_proxy].each do |env_var|
|
23
|
-
it "respects the #{env_var} environment variable" do
|
24
|
-
R10K::Util::ExecEnv.withenv(env_var => "http://proxy.value") do
|
25
|
-
subject = described_class.new('branan-eight_hundred', '8.0.0')
|
26
|
-
proxy_uri = forge_release_class.conn.proxy.uri
|
27
|
-
expect(proxy_uri.to_s).to eq "http://proxy.value"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe 'using application settings' do
|
33
|
-
before { described_class.settings[:proxy] = 'http://proxy.setting' }
|
34
|
-
after { described_class.settings.reset! }
|
35
|
-
|
36
|
-
it 'has a setting for the forge proxy' do
|
37
|
-
subject = described_class.new('branan-eight_hundred', '8.0.0')
|
38
|
-
proxy_uri = forge_release_class.conn.proxy.uri
|
39
|
-
expect(proxy_uri.to_s).to eq "http://proxy.setting"
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'prefers the proxy setting over an environment variable' do
|
43
|
-
R10K::Util::ExecEnv.withenv('HTTPS_PROXY' => "http://proxy.from.env") do
|
44
|
-
subject = described_class.new('branan-eight_hundred', '8.0.0')
|
45
|
-
proxy_uri = forge_release_class.conn.proxy.uri
|
46
|
-
expect(proxy_uri.to_s).to eq "http://proxy.setting"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
21
|
describe '#download' do
|
54
22
|
it "downloads the module from the forge into `download_path`" do
|
55
23
|
expect(subject.forge_release).to receive(:download).with(download_path)
|
@@ -22,15 +22,15 @@ describe R10K::Initializers::GitInitializer do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe R10K::Initializers::ForgeInitializer do
|
25
|
-
it "
|
26
|
-
subject = described_class.new({:
|
27
|
-
expect(
|
25
|
+
it "sets the PuppetForge host" do
|
26
|
+
subject = described_class.new({:baseurl => 'https://my.site.forge'})
|
27
|
+
expect(PuppetForge).to receive(:host=).with('https://my.site.forge')
|
28
28
|
subject.call
|
29
29
|
end
|
30
30
|
|
31
|
-
it "configures
|
32
|
-
subject = described_class.new({:
|
33
|
-
expect(
|
31
|
+
it "configures PuppetForge connection proxy" do
|
32
|
+
subject = described_class.new({:proxy => 'http://my.site.proxy:3128'})
|
33
|
+
expect(PuppetForge::V3::Base.conn).to receive(:proxy).with('http://my.site.proxy:3128')
|
34
34
|
subject.call
|
35
35
|
end
|
36
36
|
end
|
data/spec/unit/settings_spec.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'r10k/settings'
|
3
|
+
require 'r10k/util/exec_env'
|
3
4
|
|
4
5
|
describe R10K::Settings do
|
5
6
|
describe "git settings" do
|
@@ -52,6 +53,17 @@ describe R10K::Settings do
|
|
52
53
|
expect(err.errors[:proxy].message).to match(/could not be parsed as a URL/)
|
53
54
|
end
|
54
55
|
end
|
56
|
+
|
57
|
+
describe "setting a default value" do
|
58
|
+
%w[HTTPS_PROXY https_proxy HTTP_PROXY http_proxy].each do |env_var|
|
59
|
+
it "respects the #{env_var} environment variable" do
|
60
|
+
R10K::Util::ExecEnv.withenv(env_var => "http://proxy.value/#{env_var}") do
|
61
|
+
output = subject.evaluate({})
|
62
|
+
expect(output[:proxy]).to eq("http://proxy.value/#{env_var}")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
55
67
|
end
|
56
68
|
|
57
69
|
describe "baseurl" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r10k
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrien Thebo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colored
|