u3d 0.9.2 → 0.9.3

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: 5fa90ce7799123f17d7760705c0e678a9c24a057
4
- data.tar.gz: 973b34ba000a634b8bcf544de1a4b6ede5bc7553
3
+ metadata.gz: 43c7834c3f3b774506971cb0cb9d30fa947a9084
4
+ data.tar.gz: 15a1b29791c19f11fd8d301dc94d43f2129bceb2
5
5
  SHA512:
6
- metadata.gz: 5bd4042294072a4a90f70dfe7287e0eb5c0ef6a9151fcc42bf477873c8bc21e0118d3b1123013584f8f32dc3daaa2d415c3a2ede586665b469202adc75092ff4
7
- data.tar.gz: 1ee8b5bdf89fa4ef179794516d9943fb64d5bd3b29cedaf11de91a81ace1b1dc133ca146cdf7bdd06fad13988aae8f4420220a298d0c21048cc1c553e9f144ca
6
+ metadata.gz: a394c25724713e499cddf74a03fd3054ef20ed65384242afc490790b6aa63ac8928d92a87f75399317a94cb67284d17a5b1974885ed26d1420dcb913b7ff1b71
7
+ data.tar.gz: 60acfb2ade3034640bb195466a5b6315844f10ff13818a31fabd71e1782a9253bc673482c93a2edc4f7f128891d58fd15df71ab6d4888598f1d45eec23e37a63
@@ -0,0 +1,31 @@
1
+ # Change Log
2
+
3
+ ## [v0.9.2](https://github.com/DragonBox/u3d/tree/v0.9.2) (2017-08-04)
4
+ [Full Changelog](https://github.com/DragonBox/u3d/compare/v0.9.1...v0.9.2)
5
+
6
+ **Fixed bugs:**
7
+
8
+ - Fix missing key failure [\#13](https://github.com/DragonBox/u3d/pull/13) ([niezbop](https://github.com/niezbop))
9
+
10
+ **Closed issues:**
11
+
12
+ - -logFile /dev/stdout not supported [\#11](https://github.com/DragonBox/u3d/issues/11)
13
+ - Do you have any relevant documents? [\#7](https://github.com/DragonBox/u3d/issues/7)
14
+ - rspec broken on linux [\#5](https://github.com/DragonBox/u3d/issues/5)
15
+
16
+ **Merged pull requests:**
17
+
18
+ - Better support for /dev/stdout \(\#11\) [\#17](https://github.com/DragonBox/u3d/pull/17) ([lacostej](https://github.com/lacostej))
19
+ - u3d/list: sort versions [\#16](https://github.com/DragonBox/u3d/pull/16) ([lacostej](https://github.com/lacostej))
20
+ - Fix tail logs synchronization [\#12](https://github.com/DragonBox/u3d/pull/12) ([niezbop](https://github.com/niezbop))
21
+ - Various test fixes, including linux rspec support, and a regression [\#9](https://github.com/DragonBox/u3d/pull/9) ([lacostej](https://github.com/lacostej))
22
+ - specs: ensure test pass on Linux [\#8](https://github.com/DragonBox/u3d/pull/8) ([lacostej](https://github.com/lacostej))
23
+ - Linux versions fix [\#6](https://github.com/DragonBox/u3d/pull/6) ([niezbop](https://github.com/niezbop))
24
+ - Document further the prettifier [\#1](https://github.com/DragonBox/u3d/pull/1) ([lacostej](https://github.com/lacostej))
25
+
26
+ ## [v0.9.1](https://github.com/DragonBox/u3d/tree/v0.9.1) (2017-07-24)
27
+ [Full Changelog](https://github.com/DragonBox/u3d/compare/v0.9...v0.9.1)
28
+
29
+
30
+
31
+ \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- u3d (0.9.2)
4
+ u3d (0.9.3)
5
5
  colored (>= 1.2, < 2.0.0)
6
6
  commander (>= 4.4.0, < 5.0.0)
7
7
  file-tail (>= 1.2.0)
@@ -42,14 +42,14 @@ module U3d
42
42
  return
43
43
  end
44
44
  # version -> installations
45
- arraym = list.map{|a| [a.version, a]}
45
+ arraym = list.map { |a| [a.version, a] }
46
46
  map = Hash[*arraym.flatten]
47
47
  # sorted versions
48
48
  vcomparators = map.keys.map { |k| UnityVersionComparator.new(k) }
49
49
  sorted_keys = vcomparators.sort.map { |v| v.version.to_s }
50
50
  sorted_keys.each do |k|
51
51
  u = map[k]
52
- UI.message "Version #{u.version}\t(#{u.path})"
52
+ UI.message "%-*s%s" % [30, "Version #{u.version}", " (#{u.path})"]
53
53
  packages = u.packages
54
54
  next unless options[:packages] && packages && !packages.empty?
55
55
  UI.message 'Packages:'
@@ -114,11 +114,8 @@ module U3d
114
114
  versions = cache[os.id2name]['versions']
115
115
  version = interpret_latest(version, versions)
116
116
 
117
- unless packages.include?('Unity')
118
- unity = check_unity_presence(version: version)
119
- return unless unity
120
- options[:installation_path] ||= unity.path if Helper.windows?
121
- end
117
+ unity = check_unity_presence(version: version)
118
+ return unless enforce_setup_coherence(packages, options, unity)
122
119
 
123
120
  U3d::Globals.use_keychain = true if options[:keychain] && Helper.mac?
124
121
 
@@ -156,18 +153,16 @@ module U3d
156
153
 
157
154
  packages = packages_with_unity_first(options)
158
155
 
159
- unless packages.include?('Unity')
160
- unity = check_unity_presence(version: version)
161
- return unless unity
162
- options[:installation_path] ||= unity.path if Helper.windows?
163
- end
156
+ os = U3dCore::Helper.operating_system
157
+
158
+ unity = check_unity_presence(version: version)
159
+ return unless enforce_setup_coherence(packages, options, unity)
164
160
 
165
161
  U3d::Globals.use_keychain = true if options[:keychain] && Helper.mac?
166
162
 
167
163
  UI.important 'Root privileges are required'
168
164
  raise 'Could not get administrative privileges' unless U3dCore::CommandExecutor.has_admin_privileges?
169
165
 
170
- os = U3dCore::Helper.operating_system
171
166
  files = []
172
167
  if os == :linux
173
168
  UI.important 'Option -a | --all not available for Linux' if options[:all]
@@ -218,7 +213,7 @@ module U3d
218
213
  %w(add remove check)
219
214
  end
220
215
 
221
- def credentials(args: [], options: {})
216
+ def credentials(args: [], _options: {})
222
217
  action = args[0]
223
218
  raise "Please specify an action to perform, one of #{credentials_actions.join(',')}" unless action
224
219
  raise "Unknown action '#{action}'. Use one of #{credentials_actions.join(',')}" unless credentials_actions.include? action
@@ -297,13 +292,36 @@ module U3d
297
292
  installed = Installer.create.installed
298
293
  unity = installed.find { |u| u.version == version }
299
294
  if unity.nil?
300
- UI.error "Version #{version} of Unity is not installed yet. Please install it first before installing any other module"
295
+ UI.verbose "Version #{version} of Unity is not installed yet"
301
296
  else
302
297
  UI.verbose "Unity #{version} is installed at #{unity.path}"
303
298
  return unity
304
299
  end
305
300
  nil
306
301
  end
302
+
303
+ def enforce_setup_coherence(packages, options, unity)
304
+ if unity
305
+ UI.important "Unity #{unity.version} is already installed"
306
+ return false if Helper.linux?
307
+ if packages.include?('Unity')
308
+ UI.important 'Ignoring Unity module, it is already installed'
309
+ packages.delete('Unity')
310
+ options[:installation_path] ||= unity.path if Helper.windows?
311
+ end
312
+ if unity.packages
313
+ unity.packages.each do |pack|
314
+ UI.important "Ignoring #{pack} module, it is already installed" if packages.delete(pack)
315
+ end
316
+ end
317
+ else
318
+ unless packages.include?('Unity')
319
+ UI.error "Please install Unity #{unity.version} before any of its packages"
320
+ return false
321
+ end
322
+ end
323
+ true
324
+ end
307
325
  end
308
326
  end
309
327
  end
@@ -65,6 +65,7 @@ module U3d
65
65
  File.open(path, 'wb') do |f|
66
66
  uri = URI(url)
67
67
  current = 0
68
+ last_print_update = 0
68
69
  Net::HTTP.start(uri.host, uri.port) do |http|
69
70
  request = Net::HTTP::Get.new uri
70
71
  http.request request do |response|
@@ -77,7 +78,11 @@ module U3d
77
78
  response.read_body do |segment|
78
79
  f.write(segment)
79
80
  current += segment.length
81
+ # wait for Net::HTTP buffer on slow networks
82
+ sleep 0.08 # adjust to reduce CPU
80
83
  next unless UI.interactive?
84
+ next unless Time.now.to_f - last_print_update > 0.5
85
+ last_print_update = Time.now.to_f
81
86
  if size
82
87
  Utils.print_progress(current, size, started_at)
83
88
  else
@@ -30,7 +30,9 @@ module U3d
30
30
  DEFAULT_MAC_INSTALL = '/'.freeze
31
31
  DEFAULT_WINDOWS_INSTALL = 'C:/Program Files/'.freeze
32
32
  UNITY_DIR = "Unity_%s".freeze
33
+ UNITY_DIR_LINUX = "unity-editor-%s".freeze
33
34
  UNITY_DIR_CHECK = /Unity_\d+\.\d+\.\d+[a-z]\d+/
35
+ UNITY_DIR_CHECK_LINUX = /unity-editor-\d+\.\d+\.\d+[a-z]\d+\z/
34
36
 
35
37
  class Installation
36
38
  def self.create(path: nil)
@@ -75,6 +77,10 @@ module U3d
75
77
  Dir.entries(fpath).select { |e| File.directory?(File.join(fpath, e)) && !(e == '.' || e == '..') }
76
78
  end
77
79
 
80
+ def clean_install?
81
+ path =~ UNITY_DIR_CHECK
82
+ end
83
+
78
84
  private
79
85
 
80
86
  def plist
@@ -92,7 +98,7 @@ module U3d
92
98
  def version
93
99
  # I don't find an easy way to extract the version on Linux
94
100
  require 'rexml/document'
95
- fpath = "#{path}/Data/PlaybackEngines/LinuxStandaloneSupport/ivy.xml"
101
+ fpath = "#{path}/Editor/Data/PlaybackEngines/LinuxStandaloneSupport/ivy.xml"
96
102
  raise "Couldn't find file #{fpath}" unless File.exist? fpath
97
103
  doc = REXML::Document.new(File.read(fpath))
98
104
  version = REXML::XPath.first(doc, 'ivy-module/info/@e:unityVersion').value
@@ -107,12 +113,16 @@ module U3d
107
113
  end
108
114
 
109
115
  def exe_path
110
- "#{path}/Unity"
116
+ "#{path}/Editor/Unity"
111
117
  end
112
118
 
113
119
  def packages
114
120
  false
115
121
  end
122
+
123
+ def clean_install?
124
+ path =~ UNITY_DIR_CHECK_LINUX
125
+ end
116
126
  end
117
127
 
118
128
  class WindowsInstallation < Installation
@@ -157,6 +167,10 @@ module U3d
157
167
  raise "Unity installation does not seem correct. Couldn't locate PlaybackEngines." unless Dir.exist? fpath
158
168
  Dir.entries(fpath).select { |e| File.directory?(File.join(fpath, e)) && !(e == '.' || e == '..') }
159
169
  end
170
+
171
+ def clean_install?
172
+ path =~ UNITY_DIR_CHECK
173
+ end
160
174
  end
161
175
 
162
176
  class Installer
@@ -170,7 +184,7 @@ module U3d
170
184
  end
171
185
  if UI.interactive?
172
186
  unclean = []
173
- installer.installed.each { |unity| unclean << unity unless unity.path =~ UNITY_DIR_CHECK }
187
+ installer.installed.each { |unity| unclean << unity unless unity.clean_install? }
174
188
  if !unclean.empty? && UI.confirm("#{unclean.count} Unity installation should be moved. Proceed?")
175
189
  unclean.each { |unity| installer.sanitize_install(unity) }
176
190
  end
@@ -263,7 +277,7 @@ module U3d
263
277
  def sanitize_install(unity)
264
278
  source_path = File.expand_path(unity.path)
265
279
  parent = File.expand_path('..', source_path)
266
- new_path = File.join(parent, UNITY_DIR % unity.version)
280
+ new_path = File.join(parent, UNITY_DIR_LINUX % unity.version)
267
281
  UI.important "Moving #{source_path} to #{new_path}..."
268
282
  source_path = "\"#{source_path}\"" if source_path =~ / /
269
283
  new_path = "\"#{new_path}\"" if new_path =~ / /
@@ -275,7 +289,7 @@ module U3d
275
289
  end
276
290
 
277
291
  def installed
278
- find = File.join(DEFAULT_LINUX_INSTALL, 'Unity*')
292
+ find = File.join(DEFAULT_LINUX_INSTALL, 'unity-editor-*')
279
293
  versions = Dir[find].map { |path| LinuxInstallation.new(path: path) }
280
294
 
281
295
  # sorting should take into account stable/patch etc
@@ -285,23 +299,28 @@ module U3d
285
299
  def install(file_path, version, installation_path: nil, info: {})
286
300
  extension = File.extname(file_path)
287
301
  raise "Installation of #{extension} files is not supported on Linux" if extension != '.sh'
288
- path = installation_path || File.join(DEFAULT_LINUX_INSTALL, UNITY_DIR % version)
302
+ path = installation_path || DEFAULT_LINUX_INSTALL
289
303
  install_sh(
290
304
  file_path,
291
305
  installation_path: path
292
306
  )
307
+ # Forces sanitation for installation of 'weird' versions eg 5.6.1xf1Linux
308
+ sanitize_install(installed.select { |u| u.version == version }.first)
293
309
  end
294
310
 
295
311
  def install_sh(file, installation_path: nil)
296
312
  cmd = file.shellescape
297
313
  if installation_path
298
- Utils.ensure_dir(installation_path)
299
- U3dCore::CommandExecutor.execute(command: "cd #{installation_path}; #{cmd}", admin: true)
314
+ command = "cd \"#{installation_path}\"; #{cmd}"
315
+ unless File.directory? installation_path
316
+ command = "mkdir -p \"#{installation_path}\"; #{command}"
317
+ end
318
+ U3dCore::CommandExecutor.execute(command: command, admin: true)
300
319
  else
301
320
  U3dCore::CommandExecutor.execute(command: cmd, admin: true)
302
321
  end
303
322
  rescue => e
304
- UI.error "Failed to install bash file at #{file_path}: #{e}"
323
+ UI.error "Failed to install bash file at #{file}: #{e}"
305
324
  else
306
325
  UI.success 'Installation successful'
307
326
  end
@@ -381,7 +400,9 @@ module U3d
381
400
  def editor_version
382
401
  require 'yaml'
383
402
  yaml = YAML.load(File.read("#{@path}/ProjectSettings/ProjectVersion.txt"))
384
- yaml['m_EditorVersion']
403
+ version = yaml['m_EditorVersion']
404
+ version.gsub!(/(\d+\.\d+\.\d+)(?:x)?(\w\d+)(?:Linux)?/, '\1\2') if Helper.linux?
405
+ version
385
406
  end
386
407
  end
387
408
  end
@@ -36,6 +36,7 @@ module U3d
36
36
  log_file = installation.default_log_file
37
37
  end
38
38
 
39
+ Utils.ensure_dir File.dirname(log_file)
39
40
  FileUtils.touch(log_file) unless File.exist? log_file
40
41
 
41
42
  tail_thread = Thread.new do
@@ -53,7 +54,7 @@ module U3d
53
54
  end
54
55
 
55
56
  # Wait for tail_thread setup to be complete
56
- sleep 0.5 while tail_thread.status!='sleep'
57
+ sleep 0.5 while tail_thread.status != 'sleep'
57
58
  tail_thread.run
58
59
 
59
60
  begin
@@ -63,7 +64,7 @@ module U3d
63
64
  else
64
65
  args.map!(&:shellescape)
65
66
  end
66
- # FIXME return value not handled
67
+
67
68
  U3dCore::CommandExecutor.execute(command: args, print_all: true)
68
69
  ensure
69
70
  sleep 1
@@ -166,7 +166,7 @@ module U3d
166
166
  if response.kind_of? Net::HTTPSuccess
167
167
  capt = response.body.match(LINUX_DOWNLOAD_RECENT_FILE)
168
168
  if capt && capt[1] && capt[2]
169
- versions[capt[2].gsub(/x/, '')] = capt[1]
169
+ versions[capt[2].delete('x')] = capt[1]
170
170
  else
171
171
  UI.error("Could not retrieve a fitting file from #{url}")
172
172
  end
@@ -21,7 +21,7 @@
21
21
  ## --- END LICENSE BLOCK ---
22
22
 
23
23
  module U3d
24
- VERSION = '0.9.2'.freeze
24
+ VERSION = '0.9.3'.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"\
@@ -73,7 +73,7 @@ module U3dCore
73
73
  if Helper.windows?
74
74
  raise CredentialsError, "The command \'#{command}\' must be run in administrative shell" unless has_admin_privileges?
75
75
  else
76
- command = "sudo -k && echo #{cred.password.shellescape} | sudo -S " + command
76
+ command = "sudo -k && echo #{cred.password.shellescape} | sudo -S bash -c \"#{command}\""
77
77
  end
78
78
  UI.verbose 'Admin privileges granted for command execution'
79
79
  end
@@ -120,7 +120,8 @@ module U3dCore
120
120
  credentials = U3dCore::Credentials.new(user: ENV['USER'])
121
121
  begin
122
122
  result = system("sudo -k && echo #{credentials.password.shellescape} | sudo -S /usr/bin/whoami",
123
- out: File::NULL, err: File::NULL)
123
+ out: File::NULL,
124
+ err: File::NULL)
124
125
  rescue
125
126
  result = false
126
127
  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: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jerome Lacoste
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-08-04 00:00:00.000000000 Z
12
+ date: 2017-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: commander
@@ -243,6 +243,7 @@ files:
243
243
  - ".licenses.json"
244
244
  - ".rspec"
245
245
  - ".rubocop.yml"
246
+ - CHANGELOG.md
246
247
  - Gemfile
247
248
  - Gemfile.lock
248
249
  - LICENSE