bosh_cli 1.3146.3.0 → 1.3146.4.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 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