u3d 1.0.12 → 1.0.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github_changelog_generator +1 -1
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +19 -1
- data/DEVELOPMENT_PROCESS.md +10 -0
- data/Gemfile.lock +13 -14
- data/config/log_rules.json +53 -5
- data/fastlane-plugin-u3d/lib/fastlane/plugin/u3d/version.rb +1 -1
- data/lib/u3d/cache.rb +49 -25
- data/lib/u3d/commands.rb +23 -26
- data/lib/u3d/commands_generator.rb +6 -9
- data/lib/u3d/downloader.rb +8 -3
- data/lib/u3d/iniparser.rb +1 -1
- data/lib/u3d/installer.rb +15 -17
- data/lib/u3d/log_analyzer.rb +2 -6
- data/lib/u3d/unity_runner.rb +1 -1
- data/lib/u3d/unity_version_definition.rb +1 -1
- data/lib/u3d/unity_versions.rb +2 -2
- data/lib/u3d/version.rb +1 -1
- data/lib/u3d_core/command_executor.rb +3 -3
- data/lib/u3d_core/core_ext/hash.rb +30 -0
- data/lib/u3d_core/core_ext/operating_system_symbol.rb +33 -0
- data/lib/u3d_core/ui/disable_colors.rb +2 -2
- data/lib/u3d_core/ui/implementations/shell.rb +1 -3
- data/u3d.gemspec +9 -11
- metadata +72 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 921e48e10c0e312b264724db1e4e8e995580150c
|
4
|
+
data.tar.gz: 65c8c9f9452e8a0ee9d8828301a17bc6cdbe114d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 420bae13d8ce41a64ee1b7cbef71e0083af60a6e31c0335ceae7f4fcbe42c74fd34cfe3bf535a49fc891dac7e12293db181e641b46003e79cc0c7db59eb5d76e
|
7
|
+
data.tar.gz: ca63925ef15a674149e5566f7afcc47b93e9c3782f22efe3e19febd2e8054100e9e5d44bd4c9ab3a5940651c87ec072099c63c5dc841507507314305d66e208f
|
data/.github_changelog_generator
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [v1.0.13](https://github.com/DragonBox/u3d/tree/v1.0.13) (2018-01-09)
|
4
|
+
[Full Changelog](https://github.com/DragonBox/u3d/compare/v1.0.12...v1.0.13)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- u3d/install: allow to specify packages download directory [\#213](https://github.com/DragonBox/u3d/issues/213)
|
9
|
+
- u3d/available: fetch versions data from a central repository, speeding up identification of available releases [\#142](https://github.com/DragonBox/u3d/issues/142)
|
10
|
+
- u3d/available: introduce a central cache \(fixes \#142\) [\#217](https://github.com/DragonBox/u3d/pull/217) ([lacostej](https://github.com/lacostej))
|
11
|
+
- u3d/available: allow to match using regular expression [\#216](https://github.com/DragonBox/u3d/pull/216) ([lacostej](https://github.com/lacostej))
|
12
|
+
- u3d/install: allow to specify packages download directory using an environment variable [\#214](https://github.com/DragonBox/u3d/pull/214) ([niezbop](https://github.com/niezbop))
|
13
|
+
- u3d/prettify: remove Jenkins rules [\#211](https://github.com/DragonBox/u3d/pull/211) ([niezbop](https://github.com/niezbop))
|
14
|
+
- u3d/prettify: update ruleset with LICENSE SYSTEM rules [\#210](https://github.com/DragonBox/u3d/pull/210) ([niezbop](https://github.com/niezbop))
|
15
|
+
|
16
|
+
**Merged pull requests:**
|
17
|
+
|
18
|
+
- Rubocop 0.52.1 workaround. Fixed in rubocop master [\#218](https://github.com/DragonBox/u3d/pull/218) ([lacostej](https://github.com/lacostej))
|
19
|
+
- u3d/internals: a serie of cache related refactors [\#215](https://github.com/DragonBox/u3d/pull/215) ([lacostej](https://github.com/lacostej))
|
20
|
+
- Update to latest rubocop [\#212](https://github.com/DragonBox/u3d/pull/212) ([lacostej](https://github.com/lacostej))
|
21
|
+
|
3
22
|
## [v1.0.12](https://github.com/DragonBox/u3d/tree/v1.0.12) (2018-01-03)
|
4
23
|
[Full Changelog](https://github.com/DragonBox/u3d/compare/v1.0.11...v1.0.12)
|
5
24
|
|
@@ -28,7 +47,6 @@
|
|
28
47
|
|
29
48
|
**Merged pull requests:**
|
30
49
|
|
31
|
-
- Preparing release for 1.0.11 [\#192](https://github.com/DragonBox/u3d/pull/192) ([lacostej](https://github.com/lacostej))
|
32
50
|
- doc: explain CI setup with jenkins [\#191](https://github.com/DragonBox/u3d/pull/191) ([lacostej](https://github.com/lacostej))
|
33
51
|
- u3d/run: fail with a proper message when opening a Unity4 project [\#187](https://github.com/DragonBox/u3d/pull/187) ([lacostej](https://github.com/lacostej))
|
34
52
|
|
data/DEVELOPMENT_PROCESS.md
CHANGED
@@ -9,3 +9,13 @@
|
|
9
9
|
`rake release`
|
10
10
|
|
11
11
|
`rake bump`
|
12
|
+
|
13
|
+
= release of the fastlane plugin
|
14
|
+
|
15
|
+
`cd fastlane-plugin-u3d`
|
16
|
+
|
17
|
+
bump the version in `lib/fastlane/plugin/u3d/version.rb`
|
18
|
+
|
19
|
+
`bundle exec rake release`
|
20
|
+
|
21
|
+
see https://docs.fastlane.tools/plugins/create-plugin/#rubygems
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
u3d (1.0.
|
4
|
+
u3d (1.0.13)
|
5
5
|
colored (>= 1.2, < 2.0.0)
|
6
6
|
commander (>= 4.4.0, < 5.0.0)
|
7
7
|
file-tail (>= 1.2.0)
|
@@ -50,7 +50,7 @@ GEM
|
|
50
50
|
rainbow (>= 2.1)
|
51
51
|
rake (>= 10.0)
|
52
52
|
retriable (~> 2.1)
|
53
|
-
highline (1.7.
|
53
|
+
highline (1.7.10)
|
54
54
|
i18n (0.8.6)
|
55
55
|
inifile (3.0.0)
|
56
56
|
json (2.1.0)
|
@@ -60,18 +60,17 @@ GEM
|
|
60
60
|
multipart-post (2.0.0)
|
61
61
|
octokit (4.7.0)
|
62
62
|
sawyer (~> 0.8.0, >= 0.5.3)
|
63
|
-
parallel (1.12.
|
64
|
-
parser (2.4.0.
|
65
|
-
ast (~> 2.
|
66
|
-
plist (3.
|
63
|
+
parallel (1.12.1)
|
64
|
+
parser (2.4.0.2)
|
65
|
+
ast (~> 2.3)
|
66
|
+
plist (3.4.0)
|
67
67
|
powerpack (0.1.1)
|
68
68
|
pry (0.10.4)
|
69
69
|
coderay (~> 1.1.0)
|
70
70
|
method_source (~> 0.8.1)
|
71
71
|
slop (~> 3.4)
|
72
72
|
public_suffix (2.0.5)
|
73
|
-
rainbow (
|
74
|
-
rake
|
73
|
+
rainbow (3.0.0)
|
75
74
|
rake (10.5.0)
|
76
75
|
retriable (2.1.0)
|
77
76
|
rspec (3.1.0)
|
@@ -89,14 +88,14 @@ GEM
|
|
89
88
|
rspec_junit_formatter (0.2.3)
|
90
89
|
builder (< 4)
|
91
90
|
rspec-core (>= 2, < 4, != 2.12.0)
|
92
|
-
rubocop (0.
|
91
|
+
rubocop (0.52.1)
|
93
92
|
parallel (~> 1.10)
|
94
|
-
parser (>= 2.
|
93
|
+
parser (>= 2.4.0.2, < 3.0)
|
95
94
|
powerpack (~> 0.1)
|
96
|
-
rainbow (>=
|
95
|
+
rainbow (>= 2.2.2, < 4.0)
|
97
96
|
ruby-progressbar (~> 1.7)
|
98
97
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
99
|
-
ruby-progressbar (1.
|
98
|
+
ruby-progressbar (1.9.0)
|
100
99
|
sawyer (0.8.1)
|
101
100
|
addressable (>= 2.3.5, < 2.6)
|
102
101
|
faraday (~> 0.8, < 1.0)
|
@@ -129,8 +128,8 @@ DEPENDENCIES
|
|
129
128
|
rake (~> 10.0)
|
130
129
|
rspec (~> 3.1.0)
|
131
130
|
rspec_junit_formatter (~> 0.2.3)
|
132
|
-
rubocop (~> 0.
|
131
|
+
rubocop (~> 0.52.1)
|
133
132
|
u3d!
|
134
133
|
|
135
134
|
BUNDLED WITH
|
136
|
-
1.16.
|
135
|
+
1.16.1
|
data/config/log_rules.json
CHANGED
@@ -137,15 +137,63 @@
|
|
137
137
|
}
|
138
138
|
}
|
139
139
|
},
|
140
|
-
"
|
140
|
+
"LICENSE": {
|
141
141
|
"active": true,
|
142
142
|
"silent": false,
|
143
|
-
"comment": "
|
144
|
-
"phase_start_pattern": "
|
143
|
+
"comment": "Unity license system logic",
|
144
|
+
"phase_start_pattern": "LICENSE SYSTEM",
|
145
145
|
"rules": {
|
146
|
-
"
|
146
|
+
"next_check": {
|
147
147
|
"active": true,
|
148
|
-
"start_pattern": "
|
148
|
+
"start_pattern": "LICENSE SYSTEM \\[.*\\] Next license update check is after (?<date>[\\d\\-]+)T(?<time>[\\d+\\:]+)",
|
149
|
+
"start_message": "Next update check after %{date} at %{time}"
|
150
|
+
},
|
151
|
+
"opening": {
|
152
|
+
"active": true,
|
153
|
+
"start_pattern": "LICENSE SYSTEM \\[.*\\] Opening (?<address>.*)$",
|
154
|
+
"start_message": "Opening %{address}",
|
155
|
+
"store_lines": false,
|
156
|
+
"end_pattern": "(?:\\[CEF\\]|LICENSE SYSTEM \\[.*\\] Received)",
|
157
|
+
"end_message": false
|
158
|
+
},
|
159
|
+
"received": {
|
160
|
+
"active": true,
|
161
|
+
"start_pattern": "LICENSE SYSTEM \\[.*\\] Received (?<address>.*)$",
|
162
|
+
"start_message": "Received %{address}",
|
163
|
+
"store_lines": false,
|
164
|
+
"end_pattern": "(?:\\[CEF\\]|LICENSE SYSTEM \\[.*\\] (?!Headers)|Cancelling)",
|
165
|
+
"end_message": false
|
166
|
+
},
|
167
|
+
"cef_undefined": {
|
168
|
+
"active": true,
|
169
|
+
"start_pattern": "\\[CEF\\] undefined in.*$",
|
170
|
+
"type": "warning"
|
171
|
+
},
|
172
|
+
"error": {
|
173
|
+
"active": true,
|
174
|
+
"start_pattern": "LICENSE SYSTEM \\[.*\\] (?<message>Error.*)",
|
175
|
+
"start_message": "%{message}",
|
176
|
+
"store_lines": true,
|
177
|
+
"end_pattern": "(?:^\\n|\\[CEF\\] undefined)",
|
178
|
+
"end_message": false,
|
179
|
+
"type": "error"
|
180
|
+
},
|
181
|
+
"timeout": {
|
182
|
+
"active": true,
|
183
|
+
"start_pattern": "Cancelling.*Timeout",
|
184
|
+
"start_message": "Timeout while trying to activate license. Please try again later or contact support@unity3d.com",
|
185
|
+
"type": "error"
|
186
|
+
},
|
187
|
+
"starting_activation": {
|
188
|
+
"active": true,
|
189
|
+
"start_pattern": "LICENSE SYSTEM \\[.*\\] Starting license activation with account (?<account>.*)$",
|
190
|
+
"start_message": "Starting license activation for account %{account}"
|
191
|
+
},
|
192
|
+
"successful_activation": {
|
193
|
+
"active": true,
|
194
|
+
"start_pattern": "LICENSE SYSTEM \\[.*\\] License activated successfully with user: (?<account>.*)$",
|
195
|
+
"start_message": "License activated for account %{account}",
|
196
|
+
"type": "success"
|
149
197
|
}
|
150
198
|
}
|
151
199
|
},
|
data/lib/u3d/cache.rb
CHANGED
@@ -22,12 +22,15 @@
|
|
22
22
|
|
23
23
|
require 'json'
|
24
24
|
require 'time'
|
25
|
+
require 'u3d_core/core_ext/operating_system_symbol'
|
25
26
|
require 'u3d/unity_versions'
|
26
27
|
require 'u3d/utils'
|
27
28
|
|
28
29
|
module U3d
|
29
30
|
# Cache stores the informations regarding versions
|
30
31
|
class Cache
|
32
|
+
using ::CoreExtensions::OperatingSystem
|
33
|
+
|
31
34
|
# Path to the directory containing the cache for the different OS
|
32
35
|
DEFAULT_LINUX_PATH = File.join(ENV['HOME'], '.u3d').freeze
|
33
36
|
DEFAULT_MAC_PATH = File.join(ENV['HOME'], 'Library', 'Application Support', 'u3d').freeze
|
@@ -38,6 +41,8 @@ module U3d
|
|
38
41
|
# Currently set to 24h
|
39
42
|
CACHE_LIFE = 60 * 60 * 24
|
40
43
|
|
44
|
+
GLOBAL_CACHE_URL = 'https://dragonbox.github.io/unities/v1/versions.json'.freeze
|
45
|
+
|
41
46
|
private
|
42
47
|
|
43
48
|
attr_accessor :cache
|
@@ -51,9 +56,9 @@ module U3d
|
|
51
56
|
@cache[key]
|
52
57
|
end
|
53
58
|
|
54
|
-
def initialize(path: nil, force_os: nil, force_refresh: false, offline: false)
|
59
|
+
def initialize(path: nil, force_os: nil, force_refresh: false, offline: false, central_cache: false)
|
55
60
|
raise "Cache: cannot specify both offline and force_refresh" if offline && force_refresh
|
56
|
-
@path = path ||
|
61
|
+
@path = path || Cache.default_os_path
|
57
62
|
@cache = {}
|
58
63
|
os = force_os || U3dCore::Helper.operating_system
|
59
64
|
Utils.ensure_dir(@path)
|
@@ -64,7 +69,18 @@ module U3d
|
|
64
69
|
need_update = false
|
65
70
|
end
|
66
71
|
@cache = data
|
67
|
-
overwrite_cache(file_path, os) if need_update || force_refresh
|
72
|
+
overwrite_cache(file_path, os, central_cache: central_cache) if need_update || force_refresh
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.default_os_path
|
76
|
+
case U3dCore::Helper.operating_system
|
77
|
+
when :linux
|
78
|
+
DEFAULT_LINUX_PATH
|
79
|
+
when :mac
|
80
|
+
DEFAULT_MAC_PATH
|
81
|
+
when :win
|
82
|
+
DEFAULT_WINDOWS_PATH
|
83
|
+
end
|
68
84
|
end
|
69
85
|
|
70
86
|
private #-------------------------------------------------------------------
|
@@ -87,39 +103,47 @@ module U3d
|
|
87
103
|
UI.error 'Failed to open cache.json: ' + file_error.to_s
|
88
104
|
need_update = true
|
89
105
|
else
|
90
|
-
need_update = data
|
91
|
-
|| data[os.id2name]['lastupdate'].nil?\
|
92
|
-
|| (Time.now.to_i - data[os.id2name]['lastupdate'] > CACHE_LIFE)\
|
93
|
-
|| (data[os.id2name]['versions'] || []).empty?
|
106
|
+
need_update = os_data_need_update?(data, os)
|
94
107
|
data[os.id2name] = nil if need_update
|
95
108
|
end
|
96
109
|
end
|
97
110
|
return need_update, data
|
98
111
|
end
|
99
112
|
|
113
|
+
def os_data_need_update?(data, os)
|
114
|
+
data[os.id2name].nil?\
|
115
|
+
|| data[os.id2name]['lastupdate'].nil?\
|
116
|
+
|| (Time.now.to_i - data[os.id2name]['lastupdate'] > CACHE_LIFE)\
|
117
|
+
|| (data[os.id2name]['versions'] || []).empty?
|
118
|
+
end
|
119
|
+
|
100
120
|
# Updates cache by retrieving versions with U3d::Downloader
|
101
|
-
def overwrite_cache(file_path, os)
|
102
|
-
|
103
|
-
|
104
|
-
platform = 'Linux' if os == :linux
|
105
|
-
UI.important "Cache is out of date. Updating cache for #{platform}"
|
106
|
-
@cache ||= {}
|
107
|
-
@cache[os.id2name] = {}
|
108
|
-
@cache[os.id2name]['lastupdate'] = Time.now.to_i
|
109
|
-
@cache[os.id2name]['versions'] = UnityVersions.list_available(os: os)
|
121
|
+
def overwrite_cache(file_path, os, central_cache: false)
|
122
|
+
update_cache(os) unless central_cache && fetch_central_cache(os)
|
123
|
+
|
110
124
|
File.delete(file_path) if File.file?(file_path)
|
111
125
|
File.open(file_path, 'w') { |f| f.write(@cache.to_json) }
|
112
126
|
end
|
113
127
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
128
|
+
# Fetches central versions.json. Ignore it if it is too old
|
129
|
+
def fetch_central_cache(os)
|
130
|
+
UI.message("Fetching central 'versions.json' cache")
|
131
|
+
data = JSON.parse(Utils.get_ssl(GLOBAL_CACHE_URL))
|
132
|
+
need_update = os_data_need_update?(data, os)
|
133
|
+
@cache = data unless need_update
|
134
|
+
!need_update
|
135
|
+
rescue StandardError => e
|
136
|
+
UI.error("Failed fetching central versions.json. Manual fetch for platform #{os} #{e}")
|
137
|
+
false
|
138
|
+
end
|
139
|
+
|
140
|
+
def update_cache(os)
|
141
|
+
UI.important "Cache is out of date. Updating cache for #{os.human_name}"
|
142
|
+
|
143
|
+
@cache ||= {}
|
144
|
+
@cache[os.id2name] = {}
|
145
|
+
@cache[os.id2name]['lastupdate'] = Time.now.to_i
|
146
|
+
@cache[os.id2name]['versions'] = UnityVersions.list_available(os: os)
|
123
147
|
end
|
124
148
|
end
|
125
149
|
end
|
data/lib/u3d/commands.rb
CHANGED
@@ -20,6 +20,7 @@
|
|
20
20
|
# SOFTWARE.
|
21
21
|
## --- END LICENSE BLOCK ---
|
22
22
|
|
23
|
+
require 'u3d_core/core_ext/hash'
|
23
24
|
require 'u3d/compatibility'
|
24
25
|
require 'u3d/unity_versions'
|
25
26
|
require 'u3d/unity_version_definition'
|
@@ -38,6 +39,8 @@ module U3d
|
|
38
39
|
# API for U3d, redirecting calls to class they concern
|
39
40
|
# rubocop:disable ClassLength
|
40
41
|
class Commands
|
42
|
+
using ::CoreExtensions::Extractable
|
43
|
+
|
41
44
|
class << self
|
42
45
|
def list_installed(options: {})
|
43
46
|
list = Installer.create.installed
|
@@ -65,17 +68,15 @@ module U3d
|
|
65
68
|
ver = options[:unity_version]
|
66
69
|
os = valid_os_or_current(options[:operating_system])
|
67
70
|
rl = options[:release_level]
|
68
|
-
cache = Cache.new(force_os: os, force_refresh: options[:force])
|
69
71
|
|
70
|
-
|
72
|
+
cache_versions = cache_versions(os, force_refresh: options[:force])
|
71
73
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
end
|
74
|
+
if ver
|
75
|
+
cache_versions = cache_versions.extract(*cache_versions.keys.select { |k| Regexp.new(ver).match(k) })
|
76
|
+
return UI.error "Version #{ver} doesn't match any in cache" if cache_versions.empty?
|
77
|
+
end
|
77
78
|
|
78
|
-
vcomparators =
|
79
|
+
vcomparators = cache_versions.keys.map { |k| UnityVersionComparator.new(k) }
|
79
80
|
if rl
|
80
81
|
letter = release_letter_mapping["latest_#{rl}".to_sym]
|
81
82
|
UI.message "Filtering available versions with release level '#{rl}' [letter '#{letter}']"
|
@@ -84,28 +85,21 @@ module U3d
|
|
84
85
|
sorted_keys = vcomparators.sort.map { |v| v.version.to_s }
|
85
86
|
|
86
87
|
sorted_keys.each do |k|
|
87
|
-
v =
|
88
|
+
v = cache_versions[k]
|
88
89
|
UI.message "Version #{k}: " + v.to_s.cyan.underline
|
89
90
|
next unless options[:packages]
|
90
91
|
inif = nil
|
91
92
|
begin
|
92
|
-
inif = U3d::INIparser.load_ini(k,
|
93
|
-
rescue => e
|
93
|
+
inif = U3d::INIparser.load_ini(k, cache_versions, os: os)
|
94
|
+
rescue StandardError => e
|
94
95
|
UI.error "Could not load packages for this version (#{e})"
|
95
96
|
else
|
96
97
|
UI.message 'Packages:'
|
97
|
-
inif.
|
98
|
+
inif.each_key { |pack| UI.message " - #{pack}" }
|
98
99
|
end
|
99
100
|
end
|
100
101
|
end
|
101
102
|
|
102
|
-
def cache_versions(os, offline: false)
|
103
|
-
cache = Cache.new(force_os: os, offline: offline)
|
104
|
-
cache_os = cache[os.id2name] || {}
|
105
|
-
cache_versions = cache_os['versions'] || {}
|
106
|
-
cache_versions
|
107
|
-
end
|
108
|
-
|
109
103
|
def install(args: [], options: {})
|
110
104
|
version = specified_or_current_project_version(args[0])
|
111
105
|
|
@@ -139,9 +133,7 @@ module U3d
|
|
139
133
|
|
140
134
|
unity = check_unity_presence(version: version)
|
141
135
|
|
142
|
-
unless unity
|
143
|
-
UI.user_error!('Unity version #{version} is not present and cannot be uninstalled')
|
144
|
-
end
|
136
|
+
UI.user_error!("Unity version #{version} is not present and cannot be uninstalled") unless unity
|
145
137
|
|
146
138
|
get_administrative_privileges(options)
|
147
139
|
|
@@ -163,14 +155,12 @@ module U3d
|
|
163
155
|
runner = Runner.new
|
164
156
|
args_pp = Runner.find_projectpath_in_args(run_args)
|
165
157
|
pp = args_pp
|
166
|
-
pp
|
158
|
+
pp ||= Dir.pwd
|
167
159
|
up = UnityProject.new(pp)
|
168
160
|
|
169
161
|
unless version # fall back in project default if we are on a Unity project
|
170
162
|
version = up.editor_version if up.exist?
|
171
|
-
unless version
|
172
|
-
UI.user_error!('Not sure which version of Unity to run. Are you in a Unity5 or later project?')
|
173
|
-
end
|
163
|
+
UI.user_error!('Not sure which version of Unity to run. Are you in a Unity5 or later project?') unless version
|
174
164
|
end
|
175
165
|
|
176
166
|
if up.exist? && args_pp.nil?
|
@@ -229,6 +219,13 @@ module U3d
|
|
229
219
|
|
230
220
|
private
|
231
221
|
|
222
|
+
def cache_versions(os, offline: false, force_refresh: false)
|
223
|
+
cache = Cache.new(force_os: os, offline: offline, force_refresh: force_refresh, central_cache: true)
|
224
|
+
cache_os = cache[os.id2name] || {}
|
225
|
+
cache_versions = cache_os['versions'] || {}
|
226
|
+
cache_versions
|
227
|
+
end
|
228
|
+
|
232
229
|
def verify_package_names(definition, packages)
|
233
230
|
packages.each do |package|
|
234
231
|
UI.user_error! "package '#{package}' doesn't exist" unless definition.available_package? package
|
@@ -74,7 +74,6 @@ module U3d
|
|
74
74
|
c.summary = 'Run unity, and parses its output through u3d\'s log prettifier'
|
75
75
|
c.description = %(
|
76
76
|
#{c.summary}
|
77
|
-
|
78
77
|
The default prettifier rules file is packaged with u3d (#{U3d::LogAnalyzer::RULES_PATH}).
|
79
78
|
You may which to pass your own using the environment variable U3D_RULES_PATH.
|
80
79
|
|
@@ -108,12 +107,13 @@ Fore more information about how the rules work, see https://github.com/DragonBox
|
|
108
107
|
c.option '-f', '--force', 'Force refresh list of available versions'
|
109
108
|
c.option '-r', '--release_level STRING', String, "Checks for availability on specific release level [#{levels.join(', ')}]"
|
110
109
|
c.option '-o', '--operating_system STRING', String, "Checks for availability on specific OS [#{oses.join(', ')}]"
|
111
|
-
c.option '-u', '--unity_version STRING', String, 'Checks if specified version is available'
|
110
|
+
c.option '-u', '--unity_version STRING', String, 'Checks if specified version is available. Can be a regular expression'
|
112
111
|
c.option '-p', '--packages', 'Lists available packages as well'
|
113
112
|
c.example 'List all versions available, forcing a refresh of the available packages from Unity servers', 'u3d available -f'
|
114
113
|
c.example 'List stable versions available', 'u3d available -r stable -p'
|
115
114
|
c.example 'List all versions available for Linux platform', 'u3d available -o linux'
|
116
115
|
c.example 'List packages available for Unity version 5.6.0f3', 'u3d available -u 5.6.0f3 -p'
|
116
|
+
c.example 'List packages available for Unity version containing the 5.6 string', 'u3d available -u \'5.6\' -p'
|
117
117
|
c.description = 'List download-ready versions of Unity3d'
|
118
118
|
c.action do |_args, options|
|
119
119
|
options.default packages: false
|
@@ -126,13 +126,15 @@ Fore more information about how the rules work, see https://github.com/DragonBox
|
|
126
126
|
c.summary = "Download (and/or) install Unity3D editor packages."
|
127
127
|
c.description = %(
|
128
128
|
#{c.summary}
|
129
|
-
|
130
129
|
This command allows you to either:
|
131
130
|
* download and install packages
|
132
131
|
* download packages but not install them
|
133
132
|
* install already downloaded packages
|
134
|
-
|
135
133
|
Already installed packages are skipped if asked to be installed again (except for the 'Example' package).
|
134
|
+
|
135
|
+
The default download path is $HOME/Downloads/Unity_Packages/, but you may change that by specifying the environment variable U3D_DOWNLOAD_PATH.
|
136
|
+
|
137
|
+
E.g. U3D_DOWNLOAD_PATH=/some/path/you/want u3d install ...
|
136
138
|
)
|
137
139
|
c.option '--[no-]download', 'Perform or not downloading before installation. Downloads by default'
|
138
140
|
c.option '--[no-]install', 'Perform or not installation after downloading. Installs by default'
|
@@ -167,9 +169,7 @@ Already installed packages are skipped if asked to be installed again (except fo
|
|
167
169
|
c.summary = 'Installs Unity dependencies. [Linux only]'
|
168
170
|
c.description = %(
|
169
171
|
#{c.summary}
|
170
|
-
|
171
172
|
Regarding the package manager: if dpkg is installed, u3d uses apt-get else if rpm is installed yum is used. If none of them is insalled, fails.
|
172
|
-
|
173
173
|
Regarding the dependencies themselves: only dependencies for the editor are installed. WebGL, Android and Tizen require others that you will have to install manually.
|
174
174
|
More on that: https://forum.unity3d.com/threads/unity-on-linux-release-notes-and-known-issues.350256/
|
175
175
|
)
|
@@ -191,12 +191,9 @@ More on that: https://forum.unity3d.com/threads/unity-on-linux-release-notes-and
|
|
191
191
|
c.summary = 'Prettify a saved logfile'
|
192
192
|
c.description = %(
|
193
193
|
#{c.summary}
|
194
|
-
|
195
194
|
The default prettifier rules file is packaged with u3d (#{U3d::LogAnalyzer::RULES_PATH}).
|
196
195
|
You may which to pass your own using the environment variable U3D_RULES_PATH.
|
197
|
-
|
198
196
|
E.g. U3D_RULES_PATH=my_rules.json u3d prettify ...
|
199
|
-
|
200
197
|
Fore more information about how the rules work, see https://github.com/DragonBox/u3d/blob/master/LOG_RULES.md
|
201
198
|
)
|
202
199
|
c.action do |args, _options|
|
data/lib/u3d/downloader.rb
CHANGED
@@ -34,6 +34,10 @@ module U3d
|
|
34
34
|
UNITY_MODULE_FILE_REGEX = %r{\/([\w\-_\.\+]+\.(?:pkg|exe|zip|sh|deb))}
|
35
35
|
|
36
36
|
class << self
|
37
|
+
def download_directory
|
38
|
+
File.expand_path(ENV['U3D_DOWNLOAD_PATH'] || File.join(DOWNLOAD_PATH, DOWNLOAD_DIRECTORY))
|
39
|
+
end
|
40
|
+
|
37
41
|
# fetch modules and put them in local cache
|
38
42
|
def fetch_modules(definition, packages: [], download: nil)
|
39
43
|
if download
|
@@ -113,6 +117,7 @@ module U3d
|
|
113
117
|
|
114
118
|
UI.header "Downloading #{package} version #{definition.version}"
|
115
119
|
UI.message 'Downloading from ' + url.to_s.cyan.underline
|
120
|
+
UI.message 'Download will be found at ' + path
|
116
121
|
download_package(path, url, size: definition.size_in_bytes(package))
|
117
122
|
|
118
123
|
if validator.validate(package, path, definition)
|
@@ -134,7 +139,7 @@ module U3d
|
|
134
139
|
|
135
140
|
class MacDownloader
|
136
141
|
def destination_for(package, definition)
|
137
|
-
dir = File.join(
|
142
|
+
dir = File.join(Downloader.download_directory, definition.version)
|
138
143
|
Utils.ensure_dir(dir)
|
139
144
|
file_name = UNITY_MODULE_FILE_REGEX.match(definition[package]['url'])[1]
|
140
145
|
|
@@ -148,7 +153,7 @@ module U3d
|
|
148
153
|
|
149
154
|
class LinuxDownloader
|
150
155
|
def destination_for(package, definition)
|
151
|
-
dir = File.join(
|
156
|
+
dir = File.join(Downloader.download_directory, definition.version)
|
152
157
|
Utils.ensure_dir(dir)
|
153
158
|
file_name = UNITY_MODULE_FILE_REGEX.match(definition[package]['url'])[1]
|
154
159
|
|
@@ -162,7 +167,7 @@ module U3d
|
|
162
167
|
|
163
168
|
class WindowsDownloader
|
164
169
|
def destination_for(package, definition)
|
165
|
-
dir = File.join(
|
170
|
+
dir = File.join(Downloader.download_directory, definition.version)
|
166
171
|
Utils.ensure_dir(dir)
|
167
172
|
file_name = UNITY_MODULE_FILE_REGEX.match(definition[package]['url'])[1]
|
168
173
|
|
data/lib/u3d/iniparser.rb
CHANGED
data/lib/u3d/installer.rb
CHANGED
@@ -31,8 +31,8 @@ module U3d
|
|
31
31
|
DEFAULT_LINUX_INSTALL = '/opt/'.freeze
|
32
32
|
DEFAULT_MAC_INSTALL = '/'.freeze
|
33
33
|
DEFAULT_WINDOWS_INSTALL = 'C:/Program Files/'.freeze
|
34
|
-
UNITY_DIR = "Unity_
|
35
|
-
UNITY_DIR_LINUX = "unity-editor
|
34
|
+
UNITY_DIR = "Unity_%<version>s".freeze
|
35
|
+
UNITY_DIR_LINUX = "unity-editor-%<version>s".freeze
|
36
36
|
|
37
37
|
class Installer
|
38
38
|
def self.create
|
@@ -88,7 +88,7 @@ module U3d
|
|
88
88
|
U3dCore::CommandExecutor.execute(command: command, admin: true)
|
89
89
|
UI.success "Successfully moved '#{source_path}' to '#{new_path}'"
|
90
90
|
end
|
91
|
-
rescue => e
|
91
|
+
rescue StandardError => e
|
92
92
|
UI.error "Unable to move '#{source_path}' to '#{new_path}': #{e}"
|
93
93
|
end
|
94
94
|
end
|
@@ -97,7 +97,7 @@ module U3d
|
|
97
97
|
def sanitize_install(unity, dry_run: false)
|
98
98
|
source_path = unity.root_path
|
99
99
|
parent = File.expand_path('..', source_path)
|
100
|
-
new_path = File.join(parent, UNITY_DIR
|
100
|
+
new_path = File.join(parent, format(UNITY_DIR, version: unity.version))
|
101
101
|
|
102
102
|
command = "mv #{source_path.shellescape} #{new_path.shellescape}"
|
103
103
|
|
@@ -130,7 +130,7 @@ module U3d
|
|
130
130
|
if unity.nil?
|
131
131
|
UI.verbose "No Unity install for version #{version} was found"
|
132
132
|
U3dCore::CommandExecutor.execute(command: command, admin: true)
|
133
|
-
destination_path = File.join(target_path, 'Applications', UNITY_DIR
|
133
|
+
destination_path = File.join(target_path, 'Applications', format(UNITY_DIR, version: version))
|
134
134
|
FileUtils.mv temp_path, destination_path
|
135
135
|
else
|
136
136
|
UI.verbose "Unity install for version #{version} found under #{unity.root_path}"
|
@@ -146,7 +146,7 @@ module U3d
|
|
146
146
|
FileUtils.mv temp_path, path if move_to_temp
|
147
147
|
end
|
148
148
|
end
|
149
|
-
rescue => e
|
149
|
+
rescue StandardError => e
|
150
150
|
UI.error "Failed to install pkg at #{file_path}: #{e}"
|
151
151
|
else
|
152
152
|
UI.success "Successfully installed package from #{file_path}"
|
@@ -156,7 +156,7 @@ module U3d
|
|
156
156
|
UI.verbose("Uninstalling Unity at '#{unity.root_path}'...")
|
157
157
|
command = "rm -r #{unity.root_path.argescape}"
|
158
158
|
U3dCore::CommandExecutor.execute(command: command, admin: true)
|
159
|
-
rescue => e
|
159
|
+
rescue StandardError => e
|
160
160
|
UI.error "Failed to uninstall unity at #{unity.path}: #{e}"
|
161
161
|
else
|
162
162
|
UI.success "Successfully uninstalled '#{unity.root_path}'"
|
@@ -195,7 +195,7 @@ module U3d
|
|
195
195
|
def sanitize_install(unity, dry_run: false)
|
196
196
|
source_path = File.expand_path(unity.root_path)
|
197
197
|
parent = File.expand_path('..', source_path)
|
198
|
-
new_path = File.join(parent, UNITY_DIR_LINUX
|
198
|
+
new_path = File.join(parent, format(UNITY_DIR_LINUX, version: unity.version))
|
199
199
|
|
200
200
|
command = "mv #{source_path.shellescape} #{new_path.shellescape}"
|
201
201
|
|
@@ -233,14 +233,12 @@ module U3d
|
|
233
233
|
|
234
234
|
if installation_path
|
235
235
|
command = "cd #{installation_path.shellescape}; #{cmd}"
|
236
|
-
unless File.directory? installation_path
|
237
|
-
command = "mkdir -p #{installation_path.shellescape}; #{command}"
|
238
|
-
end
|
236
|
+
command = "mkdir -p #{installation_path.shellescape}; #{command}" unless File.directory? installation_path
|
239
237
|
U3dCore::CommandExecutor.execute(command: command, admin: true)
|
240
238
|
else
|
241
239
|
U3dCore::CommandExecutor.execute(command: cmd, admin: true)
|
242
240
|
end
|
243
|
-
rescue => e
|
241
|
+
rescue StandardError => e
|
244
242
|
UI.error "Failed to install bash file at #{file}: #{e}"
|
245
243
|
else
|
246
244
|
UI.success 'Installation successful'
|
@@ -250,7 +248,7 @@ module U3d
|
|
250
248
|
UI.verbose("Uninstalling Unity at '#{unity.root_path}'...")
|
251
249
|
command = "rm -r #{unity.root_path}"
|
252
250
|
U3dCore::CommandExecutor.execute(command: command, admin: true)
|
253
|
-
rescue => e
|
251
|
+
rescue StandardError => e
|
254
252
|
UI.error "Failed to uninstall unity at #{unity.path}: #{e}"
|
255
253
|
else
|
256
254
|
UI.success "Successfully uninstalled '#{unity.root_path}'"
|
@@ -279,7 +277,7 @@ module U3d
|
|
279
277
|
def sanitize_install(unity, dry_run: false)
|
280
278
|
source_path = File.expand_path(unity.root_path)
|
281
279
|
parent = File.expand_path('..', source_path)
|
282
|
-
new_path = File.join(parent, UNITY_DIR
|
280
|
+
new_path = File.join(parent, format(UNITY_DIR, version: unity.version))
|
283
281
|
|
284
282
|
source_path.tr!('/', '\\')
|
285
283
|
new_path.tr!('/', '\\')
|
@@ -297,7 +295,7 @@ module U3d
|
|
297
295
|
def install(file_path, version, installation_path: nil, info: {})
|
298
296
|
extension = File.extname(file_path)
|
299
297
|
raise "Installation of #{extension} files is not supported on Windows" if extension != '.exe'
|
300
|
-
path = installation_path || File.join(DEFAULT_WINDOWS_INSTALL, UNITY_DIR
|
298
|
+
path = installation_path || File.join(DEFAULT_WINDOWS_INSTALL, format(UNITY_DIR, version: version))
|
301
299
|
install_exe(
|
302
300
|
file_path,
|
303
301
|
installation_path: path,
|
@@ -321,7 +319,7 @@ module U3d
|
|
321
319
|
end
|
322
320
|
command ||= file_path.to_s
|
323
321
|
U3dCore::CommandExecutor.execute(command: command, admin: true)
|
324
|
-
rescue => e
|
322
|
+
rescue StandardError => e
|
325
323
|
UI.error "Failed to install exe at #{file_path}: #{e}"
|
326
324
|
else
|
327
325
|
UI.success "Successfully installed #{info['title']}"
|
@@ -334,7 +332,7 @@ module U3d
|
|
334
332
|
command = "#{uninstall_exe.argescape} /S"
|
335
333
|
UI.message("Although the uninstall process completed, it takes a few seconds before the files are actually removed")
|
336
334
|
U3dCore::CommandExecutor.execute(command: command, admin: true)
|
337
|
-
rescue => e
|
335
|
+
rescue StandardError => e
|
338
336
|
UI.error "Failed to uninstall unity at #{unity.path}: #{e}"
|
339
337
|
else
|
340
338
|
UI.success "Successfully uninstalled '#{unity.root_path}'"
|
data/lib/u3d/log_analyzer.rb
CHANGED
@@ -184,9 +184,7 @@ module U3d
|
|
184
184
|
|
185
185
|
if @active_phase
|
186
186
|
apply_ruleset.call(@phases[@active_phase]['rules'], @active_phase)
|
187
|
-
if @phases[@active_phase]['phase_end_pattern'] && @phases[@active_phase]['phase_end_pattern'] =~ line
|
188
|
-
finish_phase
|
189
|
-
end
|
187
|
+
finish_phase if @phases[@active_phase]['phase_end_pattern'] && @phases[@active_phase]['phase_end_pattern'] =~ line
|
190
188
|
end
|
191
189
|
apply_ruleset.call(@generic_rules, 'GENERAL')
|
192
190
|
end
|
@@ -242,9 +240,7 @@ module U3d
|
|
242
240
|
r['fetched_line_pattern'] = Regexp.new r['fetched_line_pattern'] if r['fetched_line_pattern']
|
243
241
|
end
|
244
242
|
r['type'] = 'important' if r['type'] == 'warning'
|
245
|
-
if r['type'] && r['type'] != 'error' && r['type'] != 'important' && r['type'] != 'success'
|
246
|
-
r['type'] = 'message'
|
247
|
-
end
|
243
|
+
r['type'] = 'message' if r['type'] && r['type'] != 'error' && r['type'] != 'important' && r['type'] != 'success'
|
248
244
|
r['type'] ||= 'message'
|
249
245
|
r['ignore_lines'].map! { |pat| Regexp.new pat } if r['ignore_lines']
|
250
246
|
true
|
data/lib/u3d/unity_runner.rb
CHANGED
@@ -103,7 +103,7 @@ module U3d
|
|
103
103
|
tail_thread = Thread.new do
|
104
104
|
begin
|
105
105
|
pipe(log_file) { |line| output_callback.call(line) }
|
106
|
-
rescue => e
|
106
|
+
rescue StandardError => e
|
107
107
|
UI.error "Failure while trying to pipe #{log_file}: #{e.message}"
|
108
108
|
e.backtrace.each { |l| UI.error " #{l}" }
|
109
109
|
end
|
@@ -33,7 +33,7 @@ module U3d
|
|
33
33
|
@url = cached_versions ? cached_versions[version] : nil
|
34
34
|
begin
|
35
35
|
@ini = INIparser.load_ini(version, cached_versions, os: os, offline: offline)
|
36
|
-
rescue => e
|
36
|
+
rescue StandardError => e
|
37
37
|
# FIXME: weird that we catch this here
|
38
38
|
UI.error "Could not load INI file for version #{@version} on #{@os}: #{e}"
|
39
39
|
@ini = nil
|
data/lib/u3d/unity_versions.rb
CHANGED
@@ -39,7 +39,7 @@ module U3d
|
|
39
39
|
# URL for the beta releases list, they need to be accessed after
|
40
40
|
UNITY_BETAS = 'https://unity3d.com/unity/beta/archive'.freeze
|
41
41
|
# URL for a specific beta, takes into parameter a version string (%s)
|
42
|
-
UNITY_BETA_URL = 'https://unity3d.com/unity/beta/unity
|
42
|
+
UNITY_BETA_URL = 'https://unity3d.com/unity/beta/unity%<version>s'.freeze
|
43
43
|
|
44
44
|
#####################################################
|
45
45
|
# @!group REGEX: expressions to interpret data
|
@@ -88,7 +88,7 @@ module U3d
|
|
88
88
|
hash = {}
|
89
89
|
data = Utils.get_ssl(url)
|
90
90
|
results = data.scan(UNITY_BETAVERSION_REGEX).uniq
|
91
|
-
results.each { |beta| hash.merge!(fetch_version(UNITY_BETA_URL
|
91
|
+
results.each { |beta| hash.merge!(fetch_version(format(UNITY_BETA_URL, version: beta[0]), pattern)) }
|
92
92
|
hash
|
93
93
|
end
|
94
94
|
end
|
data/lib/u3d/version.rb
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
## --- END LICENSE BLOCK ---
|
22
22
|
|
23
23
|
module U3d
|
24
|
-
VERSION = '1.0.
|
24
|
+
VERSION = '1.0.13'.freeze
|
25
25
|
DESCRIPTION = 'Provides numerous tools for installing, managing and running the Unity3D game engine from command line.'.freeze
|
26
26
|
UNITY_VERSIONS_NOTE = "Unity3d uses the following version formatting: 0.0.0x0. The \'x\' can takes different values:\n"\
|
27
27
|
"\t. 'f' are the main release candidates for Unity3d\n"\
|
@@ -101,7 +101,7 @@ module U3dCore
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
raise "Exit status: #{status}".red if !status.nil? && status.nonzero?
|
104
|
-
rescue => ex
|
104
|
+
rescue StandardError => ex
|
105
105
|
# This could happen
|
106
106
|
# * if the status is failed
|
107
107
|
# * when the environment is wrong:
|
@@ -121,7 +121,7 @@ module U3dCore
|
|
121
121
|
if Helper.windows?
|
122
122
|
begin
|
123
123
|
result = system('reg query HKU\\S-1-5-19', out: File::NULL, err: File::NULL)
|
124
|
-
rescue
|
124
|
+
rescue StandardError
|
125
125
|
result = false
|
126
126
|
end
|
127
127
|
else
|
@@ -130,7 +130,7 @@ module U3dCore
|
|
130
130
|
result = system("sudo -k && echo #{credentials.password.shellescape} | sudo -S /usr/bin/whoami",
|
131
131
|
out: File::NULL,
|
132
132
|
err: File::NULL)
|
133
|
-
rescue
|
133
|
+
rescue StandardError
|
134
134
|
result = false
|
135
135
|
end
|
136
136
|
credentials.forget_credentials unless result # FIXME: why?
|
@@ -0,0 +1,30 @@
|
|
1
|
+
## --- BEGIN LICENSE BLOCK ---
|
2
|
+
# Copyright (c) 2017-present WeWantToKnow AS
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
12
|
+
# copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
20
|
+
# SOFTWARE.
|
21
|
+
## --- END LICENSE BLOCK ---
|
22
|
+
module CoreExtensions
|
23
|
+
module Extractable
|
24
|
+
refine Hash do
|
25
|
+
def extract(*keys)
|
26
|
+
select { |k, _v| keys.include?(k) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
## --- BEGIN LICENSE BLOCK ---
|
2
|
+
# Copyright (c) 2017-present WeWantToKnow AS
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
12
|
+
# copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
20
|
+
# SOFTWARE.
|
21
|
+
## --- END LICENSE BLOCK ---
|
22
|
+
module CoreExtensions
|
23
|
+
module OperatingSystem
|
24
|
+
refine Symbol do
|
25
|
+
def human_name
|
26
|
+
return 'Windows' if self == :win
|
27
|
+
return 'Mac OSX' if self == :mac
|
28
|
+
return 'Linux' if self == :linux
|
29
|
+
raise "Not a known operating system symbol #{self}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -27,12 +27,12 @@
|
|
27
27
|
require 'colored'
|
28
28
|
|
29
29
|
class String
|
30
|
-
Colored::COLORS.keys.
|
30
|
+
Colored::COLORS.keys.each_key do |color|
|
31
31
|
define_method(color) do
|
32
32
|
self # do nothing with the string, but return it
|
33
33
|
end
|
34
34
|
end
|
35
|
-
Colored::EXTRAS.keys.
|
35
|
+
Colored::EXTRAS.keys.each_key do |extra|
|
36
36
|
define_method(extra) do
|
37
37
|
self # do nothing with the string, but return it
|
38
38
|
end
|
@@ -63,13 +63,11 @@ module U3dCore
|
|
63
63
|
if U3dCore::Globals.log_timestamps?
|
64
64
|
timestamp = ENV["U3D_UI_TIMESTAMP"]
|
65
65
|
# default timestamp if none specified
|
66
|
-
|
67
|
-
timestamp = if U3dCore::Globals.verbose?
|
66
|
+
timestamp ||= if U3dCore::Globals.verbose?
|
68
67
|
'%Y-%m-%d %H:%M:%S.%2N'
|
69
68
|
else
|
70
69
|
'%H:%M:%S'
|
71
70
|
end
|
72
|
-
end
|
73
71
|
end
|
74
72
|
# hide has last word
|
75
73
|
timestamp = nil if ENV["U3D_HIDE_TIMESTAMP"]
|
data/u3d.gemspec
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
1
|
lib = File.expand_path('../lib', __FILE__)
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
require 'u3d/version'
|
@@ -25,20 +23,20 @@ Gem::Specification.new do |spec|
|
|
25
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
24
|
spec.require_paths = ["lib"]
|
27
25
|
|
28
|
-
spec.add_dependency 'commander', '>= 4.4.0', '< 5.0.0' # CLI parser
|
29
|
-
spec.add_dependency 'security', '= 0.1.3' # macOS Keychain manager, a dead project, no updates expected
|
30
26
|
spec.add_dependency 'colored', '>= 1.2', '< 2.0.0' # terminal
|
31
|
-
spec.add_dependency '
|
32
|
-
spec.add_dependency 'inifile', '>= 3.0.0', '< 4.0.0' # Parses INI files
|
33
|
-
spec.add_dependency 'filesize', '>= 0.1.1' # File sizes prettifier
|
27
|
+
spec.add_dependency 'commander', '>= 4.4.0', '< 5.0.0' # CLI parser
|
34
28
|
spec.add_dependency 'file-tail', '>= 1.2.0'
|
29
|
+
spec.add_dependency 'filesize', '>= 0.1.1' # File sizes prettifier
|
30
|
+
spec.add_dependency 'inifile', '>= 3.0.0', '< 4.0.0' # Parses INI files
|
31
|
+
spec.add_dependency 'plist', '>= 3.1.0', '< 4.0.0' # Generate the Xcode config plist file
|
32
|
+
spec.add_dependency 'security', '= 0.1.3' # macOS Keychain manager, a dead project, no updates expected
|
35
33
|
# Development only
|
36
34
|
spec.add_development_dependency "bundler", "~> 1.13"
|
35
|
+
spec.add_development_dependency "coveralls"
|
36
|
+
spec.add_development_dependency "github_changelog_generator"
|
37
|
+
spec.add_development_dependency "pry"
|
37
38
|
spec.add_development_dependency "rake", "~> 10.0"
|
38
39
|
spec.add_development_dependency "rspec", "~> 3.1.0"
|
39
40
|
spec.add_development_dependency 'rspec_junit_formatter', '~> 0.2.3'
|
40
|
-
spec.add_development_dependency
|
41
|
-
spec.add_development_dependency "coveralls"
|
42
|
-
spec.add_development_dependency "github_changelog_generator"
|
43
|
-
spec.add_development_dependency 'rubocop', '~> 0.49.1'
|
41
|
+
spec.add_development_dependency 'rubocop', '~> 0.52.1'
|
44
42
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: u3d
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jerome Lacoste
|
@@ -9,82 +9,76 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-01-
|
12
|
+
date: 2018-01-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: colored
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: '1.2'
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 2.0.0
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version:
|
30
|
+
version: '1.2'
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.0.0
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
|
-
name:
|
35
|
+
name: commander
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 4.4.0
|
41
|
+
- - "<"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 5.0.0
|
41
44
|
type: :runtime
|
42
45
|
prerelease: false
|
43
46
|
version_requirements: !ruby/object:Gem::Requirement
|
44
47
|
requirements:
|
45
|
-
- -
|
48
|
+
- - ">="
|
46
49
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
50
|
+
version: 4.4.0
|
51
|
+
- - "<"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 5.0.0
|
48
54
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
55
|
+
name: file-tail
|
50
56
|
requirement: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
-
- - "<"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: 2.0.0
|
60
|
+
version: 1.2.0
|
58
61
|
type: :runtime
|
59
62
|
prerelease: false
|
60
63
|
version_requirements: !ruby/object:Gem::Requirement
|
61
64
|
requirements:
|
62
65
|
- - ">="
|
63
66
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
65
|
-
- - "<"
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 2.0.0
|
67
|
+
version: 1.2.0
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
69
|
+
name: filesize
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
75
|
-
- - "<"
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 4.0.0
|
74
|
+
version: 0.1.1
|
78
75
|
type: :runtime
|
79
76
|
prerelease: false
|
80
77
|
version_requirements: !ruby/object:Gem::Requirement
|
81
78
|
requirements:
|
82
79
|
- - ">="
|
83
80
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
85
|
-
- - "<"
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: 4.0.0
|
81
|
+
version: 0.1.1
|
88
82
|
- !ruby/object:Gem::Dependency
|
89
83
|
name: inifile
|
90
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,33 +100,39 @@ dependencies:
|
|
106
100
|
- !ruby/object:Gem::Version
|
107
101
|
version: 4.0.0
|
108
102
|
- !ruby/object:Gem::Dependency
|
109
|
-
name:
|
103
|
+
name: plist
|
110
104
|
requirement: !ruby/object:Gem::Requirement
|
111
105
|
requirements:
|
112
106
|
- - ">="
|
113
107
|
- !ruby/object:Gem::Version
|
114
|
-
version:
|
108
|
+
version: 3.1.0
|
109
|
+
- - "<"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 4.0.0
|
115
112
|
type: :runtime
|
116
113
|
prerelease: false
|
117
114
|
version_requirements: !ruby/object:Gem::Requirement
|
118
115
|
requirements:
|
119
116
|
- - ">="
|
120
117
|
- !ruby/object:Gem::Version
|
121
|
-
version:
|
118
|
+
version: 3.1.0
|
119
|
+
- - "<"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 4.0.0
|
122
122
|
- !ruby/object:Gem::Dependency
|
123
|
-
name:
|
123
|
+
name: security
|
124
124
|
requirement: !ruby/object:Gem::Requirement
|
125
125
|
requirements:
|
126
|
-
- -
|
126
|
+
- - '='
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version: 1.
|
128
|
+
version: 0.1.3
|
129
129
|
type: :runtime
|
130
130
|
prerelease: false
|
131
131
|
version_requirements: !ruby/object:Gem::Requirement
|
132
132
|
requirements:
|
133
|
-
- -
|
133
|
+
- - '='
|
134
134
|
- !ruby/object:Gem::Version
|
135
|
-
version: 1.
|
135
|
+
version: 0.1.3
|
136
136
|
- !ruby/object:Gem::Dependency
|
137
137
|
name: bundler
|
138
138
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,103 +148,103 @@ dependencies:
|
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '1.13'
|
150
150
|
- !ruby/object:Gem::Dependency
|
151
|
-
name:
|
151
|
+
name: coveralls
|
152
152
|
requirement: !ruby/object:Gem::Requirement
|
153
153
|
requirements:
|
154
|
-
- - "
|
154
|
+
- - ">="
|
155
155
|
- !ruby/object:Gem::Version
|
156
|
-
version: '
|
156
|
+
version: '0'
|
157
157
|
type: :development
|
158
158
|
prerelease: false
|
159
159
|
version_requirements: !ruby/object:Gem::Requirement
|
160
160
|
requirements:
|
161
|
-
- - "
|
161
|
+
- - ">="
|
162
162
|
- !ruby/object:Gem::Version
|
163
|
-
version: '
|
163
|
+
version: '0'
|
164
164
|
- !ruby/object:Gem::Dependency
|
165
|
-
name:
|
165
|
+
name: github_changelog_generator
|
166
166
|
requirement: !ruby/object:Gem::Requirement
|
167
167
|
requirements:
|
168
|
-
- - "
|
168
|
+
- - ">="
|
169
169
|
- !ruby/object:Gem::Version
|
170
|
-
version:
|
170
|
+
version: '0'
|
171
171
|
type: :development
|
172
172
|
prerelease: false
|
173
173
|
version_requirements: !ruby/object:Gem::Requirement
|
174
174
|
requirements:
|
175
|
-
- - "
|
175
|
+
- - ">="
|
176
176
|
- !ruby/object:Gem::Version
|
177
|
-
version:
|
177
|
+
version: '0'
|
178
178
|
- !ruby/object:Gem::Dependency
|
179
|
-
name:
|
179
|
+
name: pry
|
180
180
|
requirement: !ruby/object:Gem::Requirement
|
181
181
|
requirements:
|
182
|
-
- - "
|
182
|
+
- - ">="
|
183
183
|
- !ruby/object:Gem::Version
|
184
|
-
version: 0
|
184
|
+
version: '0'
|
185
185
|
type: :development
|
186
186
|
prerelease: false
|
187
187
|
version_requirements: !ruby/object:Gem::Requirement
|
188
188
|
requirements:
|
189
|
-
- - "
|
189
|
+
- - ">="
|
190
190
|
- !ruby/object:Gem::Version
|
191
|
-
version: 0
|
191
|
+
version: '0'
|
192
192
|
- !ruby/object:Gem::Dependency
|
193
|
-
name:
|
193
|
+
name: rake
|
194
194
|
requirement: !ruby/object:Gem::Requirement
|
195
195
|
requirements:
|
196
|
-
- - "
|
196
|
+
- - "~>"
|
197
197
|
- !ruby/object:Gem::Version
|
198
|
-
version: '0'
|
198
|
+
version: '10.0'
|
199
199
|
type: :development
|
200
200
|
prerelease: false
|
201
201
|
version_requirements: !ruby/object:Gem::Requirement
|
202
202
|
requirements:
|
203
|
-
- - "
|
203
|
+
- - "~>"
|
204
204
|
- !ruby/object:Gem::Version
|
205
|
-
version: '0'
|
205
|
+
version: '10.0'
|
206
206
|
- !ruby/object:Gem::Dependency
|
207
|
-
name:
|
207
|
+
name: rspec
|
208
208
|
requirement: !ruby/object:Gem::Requirement
|
209
209
|
requirements:
|
210
|
-
- - "
|
210
|
+
- - "~>"
|
211
211
|
- !ruby/object:Gem::Version
|
212
|
-
version:
|
212
|
+
version: 3.1.0
|
213
213
|
type: :development
|
214
214
|
prerelease: false
|
215
215
|
version_requirements: !ruby/object:Gem::Requirement
|
216
216
|
requirements:
|
217
|
-
- - "
|
217
|
+
- - "~>"
|
218
218
|
- !ruby/object:Gem::Version
|
219
|
-
version:
|
219
|
+
version: 3.1.0
|
220
220
|
- !ruby/object:Gem::Dependency
|
221
|
-
name:
|
221
|
+
name: rspec_junit_formatter
|
222
222
|
requirement: !ruby/object:Gem::Requirement
|
223
223
|
requirements:
|
224
|
-
- - "
|
224
|
+
- - "~>"
|
225
225
|
- !ruby/object:Gem::Version
|
226
|
-
version:
|
226
|
+
version: 0.2.3
|
227
227
|
type: :development
|
228
228
|
prerelease: false
|
229
229
|
version_requirements: !ruby/object:Gem::Requirement
|
230
230
|
requirements:
|
231
|
-
- - "
|
231
|
+
- - "~>"
|
232
232
|
- !ruby/object:Gem::Version
|
233
|
-
version:
|
233
|
+
version: 0.2.3
|
234
234
|
- !ruby/object:Gem::Dependency
|
235
235
|
name: rubocop
|
236
236
|
requirement: !ruby/object:Gem::Requirement
|
237
237
|
requirements:
|
238
238
|
- - "~>"
|
239
239
|
- !ruby/object:Gem::Version
|
240
|
-
version: 0.
|
240
|
+
version: 0.52.1
|
241
241
|
type: :development
|
242
242
|
prerelease: false
|
243
243
|
version_requirements: !ruby/object:Gem::Requirement
|
244
244
|
requirements:
|
245
245
|
- - "~>"
|
246
246
|
- !ruby/object:Gem::Version
|
247
|
-
version: 0.
|
247
|
+
version: 0.52.1
|
248
248
|
description: Provides numerous tools for installing, managing and running the Unity3D
|
249
249
|
game engine from command line.
|
250
250
|
email: jerome@wewanttoknow.com
|
@@ -389,6 +389,8 @@ files:
|
|
389
389
|
- lib/u3d_core.rb
|
390
390
|
- lib/u3d_core/command_executor.rb
|
391
391
|
- lib/u3d_core/command_runner.rb
|
392
|
+
- lib/u3d_core/core_ext/hash.rb
|
393
|
+
- lib/u3d_core/core_ext/operating_system_symbol.rb
|
392
394
|
- lib/u3d_core/core_ext/string.rb
|
393
395
|
- lib/u3d_core/credentials.rb
|
394
396
|
- lib/u3d_core/globals.rb
|