Batch up mdfind calls when possible

This commit is contained in:
Jack Nagel 2014-04-01 20:47:26 -05:00
parent 97ca3baedc
commit 0d3121f781
4 changed files with 13 additions and 9 deletions

View File

@ -438,7 +438,7 @@ end
def check_xcode_select_path
if not MacOS::CLT.installed? and not File.file? "#{MacOS::Xcode.folder}/usr/bin/xcodebuild"
path = MacOS.app_with_bundle_id(MacOS::Xcode::V4_BUNDLE_ID) || MacOS.app_with_bundle_id(MacOS::Xcode::V3_BUNDLE_ID)
path = MacOS.app_with_bundle_id(MacOS::Xcode::V4_BUNDLE_ID, MacOS::Xcode::V3_BUNDLE_ID)
path = '/Developer' if path.nil? or not path.directory?
<<-EOS.undent
Your Xcode is configured with an invalid path.

View File

@ -269,22 +269,26 @@ module OS
EOS
end
def app_with_bundle_id id
path = mdfind(id).first
def app_with_bundle_id(*ids)
path = mdfind(*ids).first
Pathname.new(path) unless path.nil? or path.empty?
end
def mdfind id
def mdfind(*ids)
return [] unless OS.mac?
(@mdfind ||= {}).fetch(id.to_s) do |key|
@mdfind[key] = `/usr/bin/mdfind "kMDItemCFBundleIdentifier == '#{key}'"`.split("\n")
(@mdfind ||= {}).fetch(ids) do
@mdfind[ids] = `/usr/bin/mdfind "#{mdfind_query(*ids)}"`.split("\n")
end
end
def pkgutil_info id
def pkgutil_info(id)
(@pkginfo ||= {}).fetch(id.to_s) do |key|
@pkginfo[key] = `/usr/sbin/pkgutil --pkg-info "#{key}" 2>/dev/null`.strip
end
end
def mdfind_query(*ids)
ids.map! { |id| "kMDItemCFBundleIdentifier == #{id}" }.join(" || ")
end
end
end

View File

@ -70,7 +70,7 @@ module OS
# helper tools and installed Xcode in a non-conventional place, this
# is our only option. See: http://superuser.com/questions/390757
def bundle_path
MacOS.app_with_bundle_id(V4_BUNDLE_ID) || MacOS.app_with_bundle_id(V3_BUNDLE_ID)
MacOS.app_with_bundle_id(V4_BUNDLE_ID, V3_BUNDLE_ID)
end
def installed?

View File

@ -52,7 +52,7 @@ module OS
end
def bundle_path
MacOS.app_with_bundle_id(FORGE_BUNDLE_ID) || MacOS.app_with_bundle_id(APPLE_BUNDLE_ID)
MacOS.app_with_bundle_id(FORGE_BUNDLE_ID, APPLE_BUNDLE_ID)
end
def version_from_mdls(path)