lib/u3d/installation.rb in u3d-1.0.7 vs lib/u3d/installation.rb in u3d-1.0.8
- old
+ new
@@ -1,167 +1,170 @@
-## --- BEGIN LICENSE BLOCK ---
-# Copyright (c) 2016-present WeWantToKnow AS
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-## --- END LICENSE BLOCK ---
-
-require 'u3d/utils'
-
-module U3d
- UNITY_DIR_CHECK = /Unity_\d+\.\d+\.\d+[a-z]\d+/
- UNITY_DIR_CHECK_LINUX = /unity-editor-\d+\.\d+\.\d+[a-z]\d+\z/
-
- class Installation
- def self.create(path: nil)
- if Helper.mac?
- MacInstallation.new path
- elsif Helper.linux?
- LinuxInstallation.new path
- else
- WindowsInstallation.new path
- end
- end
- end
-
- class MacInstallation < Installation
- attr_reader :path
-
- require 'plist'
-
- def initialize(path: nil)
- @path = path
- end
-
- def version
- plist['CFBundleVersion']
- end
-
- def default_log_file
- "#{ENV['HOME']}/Library/Logs/Unity/Editor.log"
- end
-
- def exe_path
- "#{path}/Contents/MacOS/Unity"
- end
-
- def packages
- if Utils.parse_unity_version(version)[0].to_i <= 4
- # Unity < 5 doesn't have packages
- return []
- end
- fpath = File.expand_path('../PlaybackEngines', path)
- return [] unless Dir.exist? fpath # install without package
- Dir.entries(fpath).select { |e| File.directory?(File.join(fpath, e)) && !(e == '.' || e == '..') }
- end
-
- def clean_install?
- path =~ UNITY_DIR_CHECK
- end
-
- private
-
- def plist
- @plist ||= Plist.parse_xml("#{@path}/Contents/Info.plist")
- end
- end
-
- class LinuxInstallation < Installation
- attr_reader :path
-
- def initialize(path: nil)
- @path = path
- end
-
- def version
- # I don't find an easy way to extract the version on Linux
- require 'rexml/document'
- fpath = "#{path}/Editor/Data/PlaybackEngines/LinuxStandaloneSupport/ivy.xml"
- raise "Couldn't find file #{fpath}" unless File.exist? fpath
- doc = REXML::Document.new(File.read(fpath))
- version = REXML::XPath.first(doc, 'ivy-module/info/@e:unityVersion').value
- if (m = version.match(/^(.*)x(.*)Linux$/))
- version = "#{m[1]}#{m[2]}"
- end
- version
- end
-
- def default_log_file
- "#{ENV['HOME']}/.config/unity3d/Editor.log"
- end
-
- def exe_path
- "#{path}/Editor/Unity"
- end
-
- def packages
- false
- end
-
- def clean_install?
- path =~ UNITY_DIR_CHECK_LINUX
- end
- end
-
- class WindowsInstallation < Installation
- attr_reader :path
-
- def initialize(path: nil)
- @path = path
- end
-
- def version
- require 'rexml/document'
- fpath = "#{path}/Editor/Data/PlaybackEngines/windowsstandalonesupport/ivy.xml"
- raise "Couldn't find file #{fpath}" unless File.exist? fpath
- doc = REXML::Document.new(File.read(fpath))
- version = REXML::XPath.first(doc, 'ivy-module/info/@e:unityVersion').value
-
- version
- end
-
- def default_log_file
- if @logfile.nil?
- begin
- loc_appdata = Utils.windows_local_appdata
- log_dir = File.expand_path('Unity/Editor/', loc_appdata)
- UI.important "Log directory (#{log_dir}) does not exist" unless Dir.exist? log_dir
- @logfile = File.expand_path('Editor.log', log_dir)
- rescue RuntimeError => ex
- UI.error "Unable to retrieve the editor logfile: #{ex}"
- end
- end
- @logfile
- end
-
- def exe_path
- File.join(@path, 'Editor', 'Unity.exe')
- end
-
- def packages
- # Unity prior to Unity5 did not have package
- return [] if Utils.parse_unity_version(version)[0].to_i <= 4
- fpath = "#{path}/Editor/Data/PlaybackEngines/"
- return [] unless Dir.exist? fpath # install without package
- Dir.entries(fpath).select { |e| File.directory?(File.join(fpath, e)) && !(e == '.' || e == '..') }
- end
-
- def clean_install?
- path =~ UNITY_DIR_CHECK
- end
- end
-end
+## --- BEGIN LICENSE BLOCK ---
+# Copyright (c) 2016-present WeWantToKnow AS
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+## --- END LICENSE BLOCK ---
+
+require 'u3d/utils'
+
+module U3d
+ UNITY_DIR_CHECK = /Unity_\d+\.\d+\.\d+[a-z]\d+/
+ UNITY_DIR_CHECK_LINUX = /unity-editor-\d+\.\d+\.\d+[a-z]\d+\z/
+
+ class Installation
+ def self.create(path: nil)
+ if Helper.mac?
+ MacInstallation.new path
+ elsif Helper.linux?
+ LinuxInstallation.new path
+ else
+ WindowsInstallation.new path
+ end
+ end
+ end
+
+ class MacInstallation < Installation
+ attr_reader :path
+
+ require 'plist'
+
+ def initialize(path: nil)
+ @path = path
+ end
+
+ def version
+ plist['CFBundleVersion']
+ end
+
+ def default_log_file
+ "#{ENV['HOME']}/Library/Logs/Unity/Editor.log"
+ end
+
+ def exe_path
+ "#{path}/Contents/MacOS/Unity"
+ end
+
+ def packages
+ if Utils.parse_unity_version(version)[0].to_i <= 4
+ # Unity < 5 doesn't have packages
+ return []
+ end
+ fpath = File.expand_path('../PlaybackEngines', path)
+ return [] unless Dir.exist? fpath # install without package
+ Dir.entries(fpath).select { |e| File.directory?(File.join(fpath, e)) && !(e == '.' || e == '..') }
+ end
+
+ def clean_install?
+ path =~ UNITY_DIR_CHECK
+ end
+
+ private
+
+ def plist
+ @plist ||= Plist.parse_xml("#{@path}/Contents/Info.plist")
+ end
+ end
+
+ class LinuxInstallation < Installation
+ attr_reader :path
+
+ def initialize(path: nil)
+ @path = path
+ end
+
+ def version
+ # I don't find an easy way to extract the version on Linux
+ require 'rexml/document'
+ fpath = "#{path}/Editor/Data/PlaybackEngines/LinuxStandaloneSupport/ivy.xml"
+ raise "Couldn't find file #{fpath}" unless File.exist? fpath
+ doc = REXML::Document.new(File.read(fpath))
+ version = REXML::XPath.first(doc, 'ivy-module/info/@e:unityVersion').value
+ if (m = version.match(/^(.*)x(.*)Linux$/))
+ version = "#{m[1]}#{m[2]}"
+ end
+ version
+ end
+
+ def default_log_file
+ "#{ENV['HOME']}/.config/unity3d/Editor.log"
+ end
+
+ def exe_path
+ "#{path}/Editor/Unity"
+ end
+
+ def packages
+ false
+ end
+
+ def clean_install?
+ path =~ UNITY_DIR_CHECK_LINUX
+ end
+ end
+
+ class WindowsInstallation < Installation
+ attr_reader :path
+
+ def initialize(path: nil)
+ @path = path
+ end
+
+ def version
+ require 'rexml/document'
+ # For versions >= 5
+ fpath = "#{path}/Editor/Data/PlaybackEngines/windowsstandalonesupport/ivy.xml"
+ # For versions < 5
+ fpath = "#{path}/Editor/Data/PlaybackEngines/wp8support/ivy.xml" unless File.exist? fpath
+ raise "Couldn't find file #{fpath}" unless File.exist? fpath
+ doc = REXML::Document.new(File.read(fpath))
+ version = REXML::XPath.first(doc, 'ivy-module/info/@e:unityVersion').value
+
+ version
+ end
+
+ def default_log_file
+ if @logfile.nil?
+ begin
+ loc_appdata = Utils.windows_local_appdata
+ log_dir = File.expand_path('Unity/Editor/', loc_appdata)
+ UI.important "Log directory (#{log_dir}) does not exist" unless Dir.exist? log_dir
+ @logfile = File.expand_path('Editor.log', log_dir)
+ rescue RuntimeError => ex
+ UI.error "Unable to retrieve the editor logfile: #{ex}"
+ end
+ end
+ @logfile
+ end
+
+ def exe_path
+ File.join(@path, 'Editor', 'Unity.exe')
+ end
+
+ def packages
+ # Unity prior to Unity5 did not have package
+ return [] if Utils.parse_unity_version(version)[0].to_i <= 4
+ fpath = "#{path}/Editor/Data/PlaybackEngines/"
+ return [] unless Dir.exist? fpath # install without package
+ Dir.entries(fpath).select { |e| File.directory?(File.join(fpath, e)) && !(e == '.' || e == '..') }
+ end
+
+ def clean_install?
+ path =~ UNITY_DIR_CHECK
+ end
+ end
+end