bosh-workspace 0.9.0.rc2 → 0.9.0.rc3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ccd94bede78be067bb0b528afc2342f80668f00
4
- data.tar.gz: 460d07d013206e4e0bece716e190107118644f89
3
+ metadata.gz: 51bf8a5f27e3c24ee4ef726151e656ddd79a15e6
4
+ data.tar.gz: 1b12be1ab651f544abe8ed1ec01346425ecd8c8d
5
5
  SHA512:
6
- metadata.gz: e2360dacd6ec5f34e5a7d94aa464611acd4cf24eddf684fd6ca86c399f5c4fa0dbcc0e77bfb5ea2c0b6381a3e6bb7c1a31c10b3e6a744d577096772eb097a15b
7
- data.tar.gz: bdbd537d2ec1c8577ea211aeb005fc26d6fc09fc8fbd8181e056b47411450ea75190808eea72a3c8215ce685337685f5ef53dd771a5c4de9ed962a3156912e55
6
+ metadata.gz: f6a551fbb230b60f22a2fe19bbe304faca18751e7934591de500d0f1c092e2d83f05f300c456d3107acff5e2a69096c52cca95d778fc9f0bc2d1393a12b31015
7
+ data.tar.gz: f7a83e2266fcbbac54d2794ad391ddc66fa478a20cba79b0e047086cd52cb8c582896d1e36e2e4fa1789bf9fd6aca1c6f3286ad72317c31d1781f48476ac48cf
@@ -5,13 +5,13 @@ module Bosh::Workspace
5
5
  def initialize(release, releases_dir)
6
6
  @name = release["name"]
7
7
  @ref = release["ref"]
8
- @spec_version = release["version"]
8
+ @spec_version = release["version"].to_s
9
9
  @git_url = release["git"]
10
10
  @repo_dir = File.join(releases_dir, @name)
11
11
  end
12
12
 
13
13
  def update_repo
14
- repo.checkout ref || version_ref, strategy: :force
14
+ repo.checkout ref || release[:commit], strategy: :force
15
15
  end
16
16
 
17
17
  def manifest_file
@@ -19,7 +19,7 @@ module Bosh::Workspace
19
19
  end
20
20
 
21
21
  def manifest
22
- final_releases[version]
22
+ release[:manifest]
23
23
  end
24
24
 
25
25
  def name_version
@@ -27,11 +27,7 @@ module Bosh::Workspace
27
27
  end
28
28
 
29
29
  def version
30
- return final_releases.keys.sort.last if @spec_version == "latest"
31
- unless final_releases[@spec_version.to_i]
32
- err("Could not find version: #{@spec_version} for release: #{@name}")
33
- end
34
- @spec_version.to_i
30
+ release[:version]
35
31
  end
36
32
 
37
33
  def ref
@@ -49,25 +45,43 @@ module Bosh::Workspace
49
45
  File.directory?(dir) && !File.symlink?(dir)
50
46
  end
51
47
 
48
+ def releases_dir
49
+ new_style_repo ? "releases/#{@name}" : "releases"
50
+ end
51
+
52
+ def releases_tree
53
+ repo.lookup(repo.head.target.tree.path(releases_dir)[:oid])
54
+ end
55
+
52
56
  # transforms releases/foo-1.yml, releases/bar-2.yml to:
53
- # { "1" => foo-1.yml, "2" => bar-2.yml }
57
+ # [ { version: "1", commit: ee8d52f5d, manifest: releases/foo-1.yml } ]
54
58
  def final_releases
55
59
  @final_releases ||= begin
56
- releases_dir = new_style_repo ? "releases/#{@name}" : "releases"
60
+ final_releases = {}
61
+ releases_tree.walk_blobs(:preorder) do |_, entry|
62
+ path = File.join(releases_dir, entry[:name])
63
+ blame = Rugged::Blame.new(repo, path)[0]
64
+ time = blame[:final_signature][:time]
65
+ commit_id = blame[:final_commit_id]
66
+ manifest = blame[:orig_path]
67
+ version = entry[:name][/#{@name}-(.+)\.yml/, 1]
68
+ final_releases[time] = {
69
+ version: version, manifest: manifest, commit: commit_id
70
+ }
71
+ end
57
72
 
58
- Hash[Dir[File.join(repo_dir, releases_dir, "*.yml")]
59
- .reject { |f| f[/index.yml/] }
60
- .map { |dir| File.join(releases_dir, File.basename(dir)) }
61
- .map { |version| [version[/(\d+)/].to_i, version] }]
73
+ final_releases.sort_by { |k, _| k }
74
+ .map { |a| a[1] }.reject { |f| f[:manifest][/index.yml/] }
62
75
  end
63
76
  end
64
77
 
65
- def version_ref
66
- # figure out the last commit which changed the release manifest file
67
- # in other words the commit sha of the final release
68
- repo.walk(repo.head.target) do |commit|
69
- return commit.oid if commit.tree.path(manifest)
78
+ def release
79
+ return final_releases.last if @spec_version == "latest"
80
+ release = final_releases.find { |v| v[:version] == @spec_version }
81
+ unless release
82
+ err("Could not find version: #{@spec_version} for release: #{@name}")
70
83
  end
84
+ release
71
85
  end
72
86
  end
73
87
  end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Manifests
3
- VERSION = "0.9.0.rc2"
3
+ VERSION = "0.9.0.rc3"
4
4
  end
5
5
  end
data/spec/release_spec.rb CHANGED
@@ -2,7 +2,7 @@ describe Bosh::Workspace::Release do
2
2
  include Bosh::Workspace::GitCredenialsHelper
3
3
  let(:name) { "foo" }
4
4
  let(:release) { load_release(release_data) }
5
- let(:version) { 3 }
5
+ let(:version) { "3" }
6
6
  let(:release_data) { { "name" => name, "version" => version, "git" => repo } }
7
7
  let(:releases_dir) { File.join(asset_dir("manifests-repo"), ".releases") }
8
8
  let(:templates) { Dir[File.join(releases_dir, name, "templates/*.yml")].to_s }
@@ -18,7 +18,8 @@ describe Bosh::Workspace::Release do
18
18
 
19
19
  describe "#update_repo" do
20
20
  subject do
21
- Dir[File.join(releases_dir, name, "releases/#{name}/foo*.yml")].to_s
21
+ # puts `cd #{File.join(releases_dir, name)} && git checkout origin/HEAD && git log`
22
+ Dir[File.join(releases_dir, name, "releases/**/foo*.yml")].to_s
22
23
  end
23
24
 
24
25
  context "latest version" do
@@ -27,24 +28,33 @@ describe Bosh::Workspace::Release do
27
28
  let(:version) { "latest" }
28
29
 
29
30
  it "checks out repo" do
30
- expect(subject).to match(/foo-11.yml/)
31
+ expect(subject).to match(/releases\/foo\/foo-12.yml/)
31
32
  end
33
+ end
32
34
 
33
- it "does not include templates from master" do
34
- expect(templates).to_not match(/deployment.yml/)
35
+ context "version from before new structure" do
36
+ before { release.update_repo }
37
+
38
+ let(:version) { "11" }
39
+
40
+ it "checks out repo" do
41
+ expect(subject).to match(/releases\/foo-11.yml/)
35
42
  end
36
43
  end
37
44
  end
38
45
 
39
46
  describe "attributes" do
47
+ let(:version) { "12" }
40
48
  subject { release }
41
49
  its(:name) { should eq name }
42
50
  its(:git_url) { should eq repo }
43
51
  its(:repo_dir) { should match(/\/#{name}$/) }
44
- its(:manifest_file) { should match(/\/#{name}-#{version}.yml$/) }
45
52
  its(:manifest) { should match "releases/#{name}/#{name}-#{version}.yml$" }
46
53
  its(:name_version) { should eq "#{name}/#{version}" }
47
54
  its(:version) { should eq version }
55
+ its(:manifest_file) do
56
+ should match(/\/releases\/#{name}\/#{name}-#{version}.yml$/)
57
+ end
48
58
  end
49
59
  end
50
60
 
@@ -102,7 +112,7 @@ describe Bosh::Workspace::Release do
102
112
  end
103
113
  end
104
114
 
105
- context "updated version " do
115
+ context "updated version" do
106
116
  let(:version) { "11" }
107
117
 
108
118
  it "checks out file with multiple commits" do
@@ -135,7 +145,7 @@ describe Bosh::Workspace::Release do
135
145
  let(:version) { "11" }
136
146
 
137
147
  before do
138
- load_release("name" => "bar", "version" => 2, "git" => repo).update_repo
148
+ load_release("name" => "foo", "version" => 2, "git" => repo).update_repo
139
149
  end
140
150
 
141
151
  it "version 11" do
@@ -212,7 +222,7 @@ describe Bosh::Workspace::Release do
212
222
  let(:version) { "11" }
213
223
 
214
224
  before do
215
- load_release("name" => "bar", "version" => 2, "git" => repo).update_repo
225
+ load_release("name" => "foo", "version" => 2, "git" => repo).update_repo
216
226
  end
217
227
 
218
228
  it "version 11" do
@@ -245,7 +255,7 @@ describe Bosh::Workspace::Release do
245
255
  its(:manifest_file) { should match(/\/#{name}-#{version}.yml$/) }
246
256
  its(:manifest) { should match "releases/#{name}-#{version}.yml$" }
247
257
  its(:name_version) { should eq "#{name}/#{version}" }
248
- its(:version) { should eq version }
258
+ its(:version) { should eq version.to_s }
249
259
  end
250
260
  end
251
261
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-workspace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.rc2
4
+ version: 0.9.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruben Koster
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-31 00:00:00.000000000 Z
11
+ date: 2015-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bosh_cli