bosh_cli 1.3146.3.0 → 1.3146.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 694f47e66555bd3b4e497a98ccfe817504395d0f
4
- data.tar.gz: 89b19c212b3023e19ac315beb78984d33bf3b398
3
+ metadata.gz: 31e78bc31516fc30cd9104b338278871faedb16e
4
+ data.tar.gz: 6db3dfc60e2d60b6fe7168b858572f58b22a3659
5
5
  SHA512:
6
- metadata.gz: cda11af64444d89339711b10935f24f11f4f8600f85965a304e08fc8136a2bfec230a08ad7c43d6ed1a0b4082a5cfda0ca77a0a26d7abe242ce911cf76590dd0
7
- data.tar.gz: a43a019d09ff6e65356a2582f9d099872c9894498de40b55e7308f38daf391642f87c8651e7611bbac79bb15b68abca2662ce6221ec55a3cd7b5c1406e675fec
6
+ metadata.gz: e7c6bebf45c400d25e65c509f45da0235914faf807965ae3456ac229cfc72d851dc8c31ec9630ae3da8f4b608ef0b24a59505e4b37b97062cec368680d0e5b00
7
+ data.tar.gz: dd1ec5728638e4d32a0d91b096d605495720b08f27e11c6f8febdd2c48a0e02d6cf8d8c909d9952785647d4cb7aec09daaae712fbfc98038d65e9f661a3ff671
@@ -1,3 +1,5 @@
1
+ require 'open3'
2
+
1
3
  module Bosh::Cli
2
4
  class ReleaseTarball
3
5
  include Validation
@@ -21,36 +23,84 @@ module Bosh::Cli
21
23
 
22
24
  def unpack_manifest
23
25
  return @unpacked_manifest unless @unpacked_manifest.nil?
24
- exit_success = fast_unpack('./release.MF')
26
+ exit_success = safe_fast_unpack('./release.MF')
25
27
  @unpacked_manifest = !!exit_success
26
28
  end
27
29
 
28
30
  def unpack_jobs
29
31
  return @unpacked_jobs unless @unpacked_jobs.nil?
30
- exit_success = fast_unpack('./jobs/')
32
+ exit_success = safe_fast_unpack('./jobs/')
33
+ unless all_release_jobs_unpacked?
34
+ exit_success = safe_unpack('./jobs/')
35
+ end
31
36
  @unpacked_jobs = !!exit_success
32
37
  end
33
38
 
34
39
  def unpack_license
35
40
  return @unpacked_license unless @unpacked_license.nil?
36
- exit_success = fast_unpack('./license.tgz')
41
+ exit_success = safe_fast_unpack('./license.tgz')
37
42
  @unpacked_license = !!exit_success
38
43
  end
39
44
 
40
- def fast_unpack(target)
41
- if RUBY_PLATFORM =~ /linux/
42
- system("tar", "-C", @unpack_dir, "-xzf", @tarball_path, "--occurrence", "#{target}", out: "/dev/null", err: "/dev/null")
43
- elsif RUBY_PLATFORM =~ /darwin/
44
- if target[-1, 1] == "/"
45
- system("tar", "-C", @unpack_dir, "-xzf", @tarball_path, "#{target}", out: "/dev/null", err: "/dev/null")
46
- else
47
- system("tar", "-C", @unpack_dir, "--fast-read", "-xzf", @tarball_path, "#{target}", out: "/dev/null", err: "/dev/null")
48
- end
45
+ # On machines using GNU based tar command, it should be able to unpack files irrespective of
46
+ # the ./ prefix in the file name
47
+ def safe_fast_unpack(target)
48
+ exit_status = raw_fast_unpack(target)
49
+ if !exit_status
50
+ processed_target = handle_dot_slash_prefix(target)
51
+ exit_status = raw_fast_unpack(processed_target)
52
+ end
53
+ exit_status
54
+ end
55
+
56
+ def safe_unpack(target)
57
+ exit_status = raw_unpack(target)
58
+ if !exit_status
59
+ processed_target = handle_dot_slash_prefix(target)
60
+ exit_status = raw_unpack(processed_target)
61
+ end
62
+ exit_status
63
+ end
64
+
65
+ # This will [add or remove] the './' when trying to extract a specific file from archive
66
+ def handle_dot_slash_prefix(target)
67
+ if target =~ /^\.\/.*/
68
+ target.sub!(/^\.\//, '')
49
69
  else
50
- system("tar", "-C", @unpack_dir, "-xzf", @tarball_path, "#{target}", out: "/dev/null", err: "/dev/null")
70
+ target.prepend("./")
71
+ end
72
+ end
73
+
74
+ def raw_fast_unpack(target)
75
+ tar_version, _, _ = Open3.capture3('tar', '--version')
76
+
77
+ case tar_version
78
+ when /.*gnu.*/i
79
+ Kernel.system("tar", "-C", @unpack_dir, "-xzf", @tarball_path, "--occurrence", "#{target}", out: "/dev/null", err: "/dev/null")
80
+ when /.*bsd.*/i
81
+ if target[-1, 1] == "/"
82
+ raw_unpack(target)
83
+ else
84
+ Kernel.system("tar", "-C", @unpack_dir, "--fast-read", "-xzf", @tarball_path, "#{target}", out: "/dev/null", err: "/dev/null")
85
+ end
86
+ else
87
+ raw_unpack(target)
51
88
  end
52
89
  end
53
90
 
91
+ def raw_unpack(target)
92
+ Kernel.system("tar", "-C", @unpack_dir, "-xzf", @tarball_path, "#{target}", out: "/dev/null", err: "/dev/null")
93
+ end
94
+
95
+ # verifies that all jobs in release manifest were unpacked
96
+ def all_release_jobs_unpacked?
97
+ return false if manifest_yaml['jobs'].nil?
98
+
99
+ manifest_job_names = manifest_yaml['jobs'].map { |j| j['name'] }.sort
100
+ unpacked_job_file_names = Dir.glob(File.join(@unpack_dir, 'jobs', '*')).map { |f| File.basename(f, '.*') }.sort
101
+ unpacked_job_file_names == manifest_job_names
102
+ end
103
+
54
104
  # Unpacks tarball to @unpack_dir, returns true if succeeded, false if failed
55
105
  def unpack
56
106
  return @unpacked unless @unpacked.nil?
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Cli
3
- VERSION = '1.3146.3.0'
3
+ VERSION = '1.3146.4.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3146.3.0
4
+ version: 1.3146.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - VMware
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.3146.3.0
19
+ version: 1.3146.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.3146.3.0
26
+ version: 1.3146.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bosh-template
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3146.3.0
33
+ version: 1.3146.4.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.3146.3.0
40
+ version: 1.3146.4.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: cf-uaa-lib
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.3146.3.0
131
+ version: 1.3146.4.0
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 1.3146.3.0
138
+ version: 1.3146.4.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: net-ssh
141
141
  requirement: !ruby/object:Gem::Requirement