lib/u3d/commands.rb in u3d-1.0.12 vs lib/u3d/commands.rb in u3d-1.0.13
- old
+ new
@@ -18,10 +18,11 @@
# 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_core/core_ext/hash'
require 'u3d/compatibility'
require 'u3d/unity_versions'
require 'u3d/unity_version_definition'
require 'u3d/downloader'
require 'u3d/installer'
@@ -36,10 +37,12 @@
module U3d
# API for U3d, redirecting calls to class they concern
# rubocop:disable ClassLength
class Commands
+ using ::CoreExtensions::Extractable
+
class << self
def list_installed(options: {})
list = Installer.create.installed
if list.empty?
UI.important 'No Unity version installed'
@@ -63,51 +66,42 @@
def list_available(options: {})
ver = options[:unity_version]
os = valid_os_or_current(options[:operating_system])
rl = options[:release_level]
- cache = Cache.new(force_os: os, force_refresh: options[:force])
- return UI.error "Version #{ver} is not in cache" if ver && cache[os.id2name]['versions'][ver].nil?
+ cache_versions = cache_versions(os, force_refresh: options[:force])
- versions = if ver
- { ver => cache[os.id2name]['versions'][ver] }
- else
- cache[os.id2name]['versions']
- end
+ if ver
+ cache_versions = cache_versions.extract(*cache_versions.keys.select { |k| Regexp.new(ver).match(k) })
+ return UI.error "Version #{ver} doesn't match any in cache" if cache_versions.empty?
+ end
- vcomparators = versions.keys.map { |k| UnityVersionComparator.new(k) }
+ vcomparators = cache_versions.keys.map { |k| UnityVersionComparator.new(k) }
if rl
letter = release_letter_mapping["latest_#{rl}".to_sym]
UI.message "Filtering available versions with release level '#{rl}' [letter '#{letter}']"
vcomparators.select! { |vc| vc.version.parts[3] == letter }
end
sorted_keys = vcomparators.sort.map { |v| v.version.to_s }
sorted_keys.each do |k|
- v = versions[k]
+ v = cache_versions[k]
UI.message "Version #{k}: " + v.to_s.cyan.underline
next unless options[:packages]
inif = nil
begin
- inif = U3d::INIparser.load_ini(k, versions, os: os)
- rescue => e
+ inif = U3d::INIparser.load_ini(k, cache_versions, os: os)
+ rescue StandardError => e
UI.error "Could not load packages for this version (#{e})"
else
UI.message 'Packages:'
- inif.keys.each { |pack| UI.message " - #{pack}" }
+ inif.each_key { |pack| UI.message " - #{pack}" }
end
end
end
- def cache_versions(os, offline: false)
- cache = Cache.new(force_os: os, offline: offline)
- cache_os = cache[os.id2name] || {}
- cache_versions = cache_os['versions'] || {}
- cache_versions
- end
-
def install(args: [], options: {})
version = specified_or_current_project_version(args[0])
os = U3dCore::Helper.operating_system
@@ -137,13 +131,11 @@
def uninstall(args: [], options: [])
version = specified_or_current_project_version(args[0])
unity = check_unity_presence(version: version)
- unless unity
- UI.user_error!('Unity version #{version} is not present and cannot be uninstalled')
- end
+ UI.user_error!("Unity version #{version} is not present and cannot be uninstalled") unless unity
get_administrative_privileges(options)
Installer.uninstall(unity: unity)
end
@@ -161,18 +153,16 @@
version = options[:unity_version]
runner = Runner.new
args_pp = Runner.find_projectpath_in_args(run_args)
pp = args_pp
- pp = Dir.pwd unless pp
+ pp ||= Dir.pwd
up = UnityProject.new(pp)
unless version # fall back in project default if we are on a Unity project
version = up.editor_version if up.exist?
- unless version
- UI.user_error!('Not sure which version of Unity to run. Are you in a Unity5 or later project?')
- end
+ UI.user_error!('Not sure which version of Unity to run. Are you in a Unity5 or later project?') unless version
end
if up.exist? && args_pp.nil?
extra_run_args = ['-projectpath', up.path]
run_args = [extra_run_args, run_args].flatten
@@ -226,9 +216,16 @@
latest_patch: 'p'
}
end
private
+
+ def cache_versions(os, offline: false, force_refresh: false)
+ cache = Cache.new(force_os: os, offline: offline, force_refresh: force_refresh, central_cache: true)
+ cache_os = cache[os.id2name] || {}
+ cache_versions = cache_os['versions'] || {}
+ cache_versions
+ end
def verify_package_names(definition, packages)
packages.each do |package|
UI.user_error! "package '#{package}' doesn't exist" unless definition.available_package? package
end