xcode-install 2.6.6 → 2.6.7
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/lib/xcode/install.rb +36 -11
- data/lib/xcode/install/install.rb +5 -2
- data/lib/xcode/install/version.rb +1 -1
- data/spec/install_spec.rb +5 -5
- data/spec/json_spec.rb +6 -6
- data/spec/list_spec.rb +20 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0fea81231fe9d81aed11e53e9340d8749cb90b12b61cf455ef216c4659beaf85
|
4
|
+
data.tar.gz: d385404265a3453ff25f3f6c2c532235ca7ed9769e0c1b808c64749f930f6eca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4147ef290648e0f0ac2122be32a2cc0d4fd26d3c9509767661107527fe20e58534bab89c505d992a876202a40effa7913b3901e24f504952839e5f416d011503
|
7
|
+
data.tar.gz: fa470926afe6472b552bd7be37619542024913101997df6e00a47064714199594c6c0dafbf1a41c07aa79ea1cb22e35f3cca75a1bbce8bb068b9453ec7bc6a6d
|
data/lib/xcode/install.rb
CHANGED
@@ -25,13 +25,15 @@ module XcodeInstall
|
|
25
25
|
# @param progress: parse and show the progress?
|
26
26
|
# @param progress_block: A block that's called whenever we have an updated progress %
|
27
27
|
# the parameter is a single number that's literally percent (e.g. 1, 50, 80 or 100)
|
28
|
+
# @param retry_download_count: A count to retry the downloading Xcode dmg/xip
|
28
29
|
# rubocop:disable Metrics/AbcSize
|
29
30
|
def fetch(url: nil,
|
30
31
|
directory: nil,
|
31
32
|
cookies: nil,
|
32
33
|
output: nil,
|
33
34
|
progress: nil,
|
34
|
-
progress_block: nil
|
35
|
+
progress_block: nil,
|
36
|
+
retry_download_count: 3)
|
35
37
|
options = cookies.nil? ? [] : ['--cookie', cookies, '--cookie-jar', COOKIES_PATH]
|
36
38
|
|
37
39
|
uri = URI.parse(url)
|
@@ -78,7 +80,7 @@ module XcodeInstall
|
|
78
80
|
# "Partial file. Only a part of the file was transferred."
|
79
81
|
# https://curl.haxx.se/mail/archive-2008-07/0098.html
|
80
82
|
# https://github.com/KrauseFx/xcode-install/issues/210
|
81
|
-
|
83
|
+
retry_download_count.times do
|
82
84
|
# Non-blocking call of Open3
|
83
85
|
# We're not using the block based syntax, as the bacon testing
|
84
86
|
# library doesn't seem to support writing tests for it
|
@@ -135,7 +137,7 @@ module XcodeInstall
|
|
135
137
|
File.symlink?(SYMLINK_PATH) ? SYMLINK_PATH : nil
|
136
138
|
end
|
137
139
|
|
138
|
-
def download(version, progress, url = nil, progress_block = nil)
|
140
|
+
def download(version, progress, url = nil, progress_block = nil, retry_download_count = 3)
|
139
141
|
xcode = find_xcode_version(version) if url.nil?
|
140
142
|
return if url.nil? && xcode.nil?
|
141
143
|
|
@@ -147,7 +149,8 @@ module XcodeInstall
|
|
147
149
|
cookies: url ? nil : spaceship.cookie,
|
148
150
|
output: dmg_file,
|
149
151
|
progress: progress,
|
150
|
-
progress_block: progress_block
|
152
|
+
progress_block: progress_block,
|
153
|
+
retry_download_count: retry_download_count
|
151
154
|
)
|
152
155
|
result ? CACHE_DIR + dmg_file : nil
|
153
156
|
end
|
@@ -280,8 +283,8 @@ HELP
|
|
280
283
|
end
|
281
284
|
|
282
285
|
# rubocop:disable Metrics/ParameterLists
|
283
|
-
def install_version(version, switch = true, clean = true, install = true, progress = true, url = nil, show_release_notes = true, progress_block = nil)
|
284
|
-
dmg_path = get_dmg(version, progress, url, progress_block)
|
286
|
+
def install_version(version, switch = true, clean = true, install = true, progress = true, url = nil, show_release_notes = true, progress_block = nil, retry_download_count = 3)
|
287
|
+
dmg_path = get_dmg(version, progress, url, progress_block, retry_download_count)
|
285
288
|
fail Informative, "Failed to download Xcode #{version}." if dmg_path.nil?
|
286
289
|
|
287
290
|
if install
|
@@ -314,7 +317,7 @@ HELP
|
|
314
317
|
end
|
315
318
|
|
316
319
|
def list
|
317
|
-
list_annotated(list_versions.
|
320
|
+
list_annotated(list_versions.sort { |first, second| compare_versions(first, second) })
|
318
321
|
end
|
319
322
|
|
320
323
|
def rm_list_cache
|
@@ -370,7 +373,7 @@ HELP
|
|
370
373
|
`sudo /usr/sbin/dseditgroup -o edit -t group -a staff _developer`
|
371
374
|
end
|
372
375
|
|
373
|
-
def get_dmg(version, progress = true, url = nil, progress_block = nil)
|
376
|
+
def get_dmg(version, progress = true, url = nil, progress_block = nil, retry_download_count = 3)
|
374
377
|
if url
|
375
378
|
path = Pathname.new(url)
|
376
379
|
return path if path.exist?
|
@@ -381,7 +384,7 @@ HELP
|
|
381
384
|
end
|
382
385
|
end
|
383
386
|
|
384
|
-
download(version, progress, url, progress_block)
|
387
|
+
download(version, progress, url, progress_block, retry_download_count)
|
385
388
|
end
|
386
389
|
|
387
390
|
def fetch_seedlist
|
@@ -461,6 +464,27 @@ HELP
|
|
461
464
|
links
|
462
465
|
end
|
463
466
|
|
467
|
+
def compare_versions(first, second)
|
468
|
+
# Sort by version number
|
469
|
+
numeric_comparation = first.to_f <=> second.to_f
|
470
|
+
return numeric_comparation if numeric_comparation != 0
|
471
|
+
|
472
|
+
# Return beta versions before others
|
473
|
+
is_first_beta = first.include?('beta')
|
474
|
+
is_second_beta = second.include?('beta')
|
475
|
+
return -1 if is_first_beta && !is_second_beta
|
476
|
+
return 1 if !is_first_beta && is_second_beta
|
477
|
+
|
478
|
+
# Return GM versions before others
|
479
|
+
is_first_gm = first.include?('GM')
|
480
|
+
is_second_gm = second.include?('GM')
|
481
|
+
return -1 if is_first_gm && !is_second_gm
|
482
|
+
return 1 if !is_first_gm && is_second_gm
|
483
|
+
|
484
|
+
# Sort alphabetically
|
485
|
+
first <=> second
|
486
|
+
end
|
487
|
+
|
464
488
|
def hdiutil(*args)
|
465
489
|
io = IO.popen(['hdiutil', *args])
|
466
490
|
result = io.read
|
@@ -512,12 +536,13 @@ HELP
|
|
512
536
|
end
|
513
537
|
end
|
514
538
|
|
515
|
-
def download(progress, progress_block = nil)
|
539
|
+
def download(progress, progress_block = nil, retry_download_count = 3)
|
516
540
|
result = Curl.new.fetch(
|
517
541
|
url: source,
|
518
542
|
directory: CACHE_DIR,
|
519
543
|
progress: progress,
|
520
|
-
progress_block: progress_block
|
544
|
+
progress_block: progress_block,
|
545
|
+
retry_download_count: retry_download_count
|
521
546
|
)
|
522
547
|
result ? dmg_path : nil
|
523
548
|
end
|
@@ -17,7 +17,8 @@ module XcodeInstall
|
|
17
17
|
['--no-install', 'Only download DMG, but do not install it.'],
|
18
18
|
['--no-progress', 'Don’t show download progress.'],
|
19
19
|
['--no-clean', 'Don’t delete DMG after installation.'],
|
20
|
-
['--no-show-release-notes', 'Don’t open release notes in browser after installation.']
|
20
|
+
['--no-show-release-notes', 'Don’t open release notes in browser after installation.'],
|
21
|
+
['--retry-download-count', 'Count of retrying download when curl is failed.']].concat(super)
|
21
22
|
end
|
22
23
|
|
23
24
|
def initialize(argv)
|
@@ -31,6 +32,7 @@ module XcodeInstall
|
|
31
32
|
@should_switch = argv.flag?('switch', true)
|
32
33
|
@progress = argv.flag?('progress', true)
|
33
34
|
@show_release_notes = argv.flag?('show-release-notes', true)
|
35
|
+
@retry_download_count = argv.option('retry-download-count', '3')
|
34
36
|
super
|
35
37
|
end
|
36
38
|
|
@@ -44,11 +46,12 @@ module XcodeInstall
|
|
44
46
|
end
|
45
47
|
fail Informative, "Version #{@version} doesn't exist." unless @url || @installer.exist?(@version)
|
46
48
|
fail Informative, "Invalid URL: `#{@url}`" unless !@url || @url =~ /\A#{URI.regexp}\z/
|
49
|
+
fail Informative, "Invalid Retry: `#{@retry_download_count} is not positive number.`" if (@retry_download_count =~ /\A[0-9]*\z/).nil?
|
47
50
|
end
|
48
51
|
|
49
52
|
def run
|
50
53
|
@installer.install_version(@version, @should_switch, @should_clean, @should_install,
|
51
|
-
@progress, @url, @show_release_notes)
|
54
|
+
@progress, @url, @show_release_notes, nil, @retry_download_count.to_i)
|
52
55
|
end
|
53
56
|
end
|
54
57
|
end
|
data/spec/install_spec.rb
CHANGED
@@ -12,32 +12,32 @@ module XcodeInstall
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'downloads and installs' do
|
15
|
-
Installer.any_instance.expects(:download).with('6.3', true, nil, nil).returns('/some/path')
|
15
|
+
Installer.any_instance.expects(:download).with('6.3', true, nil, nil, 3).returns('/some/path')
|
16
16
|
Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
|
17
17
|
Command::Install.run(['6.3'])
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'downloads and installs with custom HTTP URL' do
|
21
21
|
url = 'http://yolo.com/xcode.dmg'
|
22
|
-
Installer.any_instance.expects(:download).with('6.3', true, url, nil).returns('/some/path')
|
22
|
+
Installer.any_instance.expects(:download).with('6.3', true, url, nil, 3).returns('/some/path')
|
23
23
|
Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
|
24
24
|
Command::Install.run(['6.3', "--url=#{url}"])
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'downloads and installs and does not switch if --no-switch given' do
|
28
|
-
Installer.any_instance.expects(:download).with('6.3', true, nil, nil).returns('/some/path')
|
28
|
+
Installer.any_instance.expects(:download).with('6.3', true, nil, nil, 3).returns('/some/path')
|
29
29
|
Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', false, true)
|
30
30
|
Command::Install.run(['6.3', '--no-switch'])
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'downloads without progress if switch --no-progress is given' do
|
34
|
-
Installer.any_instance.expects(:download).with('6.3', false, nil, nil).returns('/some/path')
|
34
|
+
Installer.any_instance.expects(:download).with('6.3', false, nil, nil, 3).returns('/some/path')
|
35
35
|
Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
|
36
36
|
Command::Install.run(['6.3', '--no-progress'])
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'reads .xcode-version' do
|
40
|
-
Installer.any_instance.expects(:download).with('6.3', true, nil, nil).returns('/some/path')
|
40
|
+
Installer.any_instance.expects(:download).with('6.3', true, nil, nil, 3).returns('/some/path')
|
41
41
|
Installer.any_instance.expects(:install_dmg).with('/some/path', '-6.3', true, true)
|
42
42
|
File.expects(:exist?).with('.xcode-version').returns(true)
|
43
43
|
File.expects(:read).returns('6.3')
|
data/spec/json_spec.rb
CHANGED
@@ -20,14 +20,14 @@ module XcodeInstall
|
|
20
20
|
installer.stubs(:xcodes).returns(seedlist)
|
21
21
|
|
22
22
|
versions = [
|
23
|
-
'4.3 for Lion', '4.3.1 for Lion', '4.3.2 for Lion', '4.3.3 for Lion', '4.4.1', '4.5', '4.6
|
24
|
-
'5
|
23
|
+
'4.3 for Lion', '4.3.1 for Lion', '4.3.2 for Lion', '4.3.3 for Lion', '4.4.1', '4.5', '4.6', '4.6.1', '4.6.2', '4.6.3',
|
24
|
+
'5', '5.0.1', '5.0.2', '5.1', '5.1.1',
|
25
25
|
'6.0.1', '6.1', '6.1.1', '6.2', '6.3', '6.3.1', '6.3.2', '6.4',
|
26
|
-
'7', '7.0.1', '7.1', '7.1.1', '7.2
|
27
|
-
'8', '8.1', '8.2', '8.2.1', '8.3
|
26
|
+
'7', '7.0.1', '7.1', '7.1.1', '7.2', '7.2.1', '7.3', '7.3.1',
|
27
|
+
'8', '8.1', '8.2', '8.2.1', '8.3', '8.3.2', '8.3.3',
|
28
28
|
'9', '9.0.1', '9.1', '9.2', '9.3', '9.3.1', '9.4', '9.4.1',
|
29
|
-
'10', '10.1', '10.2
|
30
|
-
'11', '11.1', '11.2', '11.2.1', '11.3 beta', '11.3', '11.3.1', '11.4 beta', '11.4', '11.4 beta 3', '11.4
|
29
|
+
'10', '10.1', '10.2', '10.2.1', '10.3',
|
30
|
+
'11', '11.1', '11.2', '11.2.1', '11.3 beta', '11.3', '11.3.1', '11.4 beta', '11.4 beta 2', '11.4 beta 3', '11.4', '11.4.1', '11.5 beta', '11.5 beta 2', '11.5 GM Seed', '11.5'
|
31
31
|
]
|
32
32
|
installer.list.split("\n").should == versions
|
33
33
|
end
|
data/spec/list_spec.rb
CHANGED
@@ -43,7 +43,23 @@ module XcodeInstall
|
|
43
43
|
it 'lists all versions' do
|
44
44
|
fake_xcodes '1', '2.3', '2.3.1', '2.3.2', '3 some', '4 beta', '10 beta'
|
45
45
|
fake_installed_xcodes
|
46
|
-
installer.list.should == "1\n2.3
|
46
|
+
installer.list.should == "1\n2.3\n2.3.1\n2.3.2\n3 some\n4 beta\n10 beta"
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'lists all versions in the correct order' do
|
50
|
+
fake_xcodes(
|
51
|
+
'12 beta 4', '12 beta 3', '12 beta 2', '12 for macOS Universal Apps beta 2',
|
52
|
+
'12 beta', '12 for macOS Universal Apps beta', '12.0.1', '12', '12 beta 6',
|
53
|
+
'12 beta 5', '12.1 GM seed', '12.2 beta 3', '12.2 beta', '12.2 beta 2'
|
54
|
+
)
|
55
|
+
fake_installed_xcodes
|
56
|
+
|
57
|
+
versions = [
|
58
|
+
'12 beta', '12 beta 2', '12 beta 3', '12 beta 4', '12 beta 5', '12 beta 6',
|
59
|
+
'12 for macOS Universal Apps beta', '12 for macOS Universal Apps beta 2',
|
60
|
+
'12', '12.0.1', '12.1 GM seed', '12.2 beta', '12.2 beta 2', '12.2 beta 3'
|
61
|
+
]
|
62
|
+
installer.list.split("\n").should == versions
|
47
63
|
end
|
48
64
|
end
|
49
65
|
|
@@ -51,7 +67,7 @@ module XcodeInstall
|
|
51
67
|
it 'lists all versions with annotations' do
|
52
68
|
fake_xcodes '1', '2.3', '2.3.1', '2.3.2', '3 some', '4.3.1 for Lion', '9.4.1', '10 beta'
|
53
69
|
fake_installed_xcodes '2.3', '4.3.1 for Lion', '10 beta'
|
54
|
-
installer.list.should == "1\n2.3
|
70
|
+
installer.list.should == "1\n2.3 (installed)\n2.3.1\n2.3.2\n3 some\n4.3.1 for Lion (installed)\n9.4.1\n10 beta (installed)"
|
55
71
|
end
|
56
72
|
|
57
73
|
it 'distinguish between beta and official_version' do
|
@@ -61,9 +77,9 @@ module XcodeInstall
|
|
61
77
|
end
|
62
78
|
|
63
79
|
it 'distinguish each beta versions' do
|
64
|
-
fake_xcodes '11.4 beta', '11.4 beta
|
80
|
+
fake_xcodes '11.4 beta 3', '11.4 beta'
|
65
81
|
fake_installed_xcodes '11.4 beta'
|
66
|
-
installer.list.should == "11.4 beta
|
82
|
+
installer.list.should == "11.4 beta (installed)\n11.4 beta 3"
|
67
83
|
end
|
68
84
|
end
|
69
85
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcode-install
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.6.
|
4
|
+
version: 2.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boris Bügling
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: claide
|