lib/aurb/aur.rb in aurb-1.2.0 vs lib/aurb/aur.rb in aurb-1.2.1

- old
+ new

@@ -40,65 +40,54 @@ # download('aurb') # => ['http://.../aurb.tar.gz'] def download(*packages) packages.map do |package| Aurb.aur_download_path URI.escape(package.to_s) end.select do |package| - downloadable?(package) + !!(open package rescue false) end.delete_if(&:blank?) end # Returns a +list+ of names of packages that have an upgrade # available to them, which could then in turn be passed on to # the +download+ method. # # # With Aurb on the AUR as version 1.1.2-1 - # upgrade(['aurb 0.0.0-0', 'aurb 0.9.9-9']) # => [:aurb] - def upgrade(list) + # upgrade('aurb 0.0.0-0', 'aurb 0.9.9-9') # => [:aurb] + def upgrade(*list) + upgradables = [] list.inject([]) do |ary, line| - name, version = line.split - next if in_community?(name) - ary << name.to_sym if upgradable?(name, version) - ary - end + ary << Thread.new do + name, version = line.split + next if Dir["/var/lib/pacman/sync/community/#{name}-#{version}"].any? + upgradables << name.to_sym if upgradable?(name, version) + end + end.each(&:join) + upgradables end protected - # See if +package+ is available in the community repository. - def in_community?(package) - Dir["/var/lib/pacman/sync/community/#{package}-*"].any? - end - - # Check if +package+ is available for download. - def downloadable?(package) - open package rescue false - end - # Compare version of local +package+ with the one on the AUR. def upgradable?(package, version) local_version = Version.new(version) remote_version = nil - - parse_json Aurb.aur_path(:info, package.to_s) do |json| + parse_json Aurb.aur_rpc_path(:info, package.to_s) do |json| return if json.type =~ /error/ remote_version = Version.new(json.results.Version) end - remote_version && local_version < remote_version end # Returns an array containing a hash of search results # for a given +package+. def list_search_results(package) - json = parse_json(Aurb.aur_path(:search, URI.escape(package.to_s))) + json = parse_json(Aurb.aur_rpc_path(:search, URI.escape(package.to_s))) return [] if json.type =~ /error/ - ids = json.results.map(&:ID) ids.inject([]) do |ary, id| - parse_json Aurb.aur_path(:info, id) do |json| + parse_json Aurb.aur_rpc_path(:info, id) do |json| next if json.type =~ /error/ - result = json.results.symbolize_keys - ary << result unless in_community?(result.Name) + ary << json.results.symbolize_keys end ary end end