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