Deps plugin for hoe.
check_extra_deps | Install missing dependencies. |
deps:email | Print a contact list for gems dependent on this gem |
deps:fetch | Fetch all the dependent gems of this gem into tarballs |
deps:list | List all the dependent gems of this gem |
The main rubygems repository.
Define tasks for plugin.
# File lib/hoe/deps.rb, line 22 22: def define_deps_tasks 23: namespace :deps do 24: desc "List all the dependent gems of this gem" 25: task :list do 26: gems = self.get_gems_by_name 27: gem = gems[self.name] 28: 29: abort "Couldn't find gem: #{self.name}" unless gem 30: 31: deps = self.dependent_upon self.name 32: max = deps.map { |s| s.full_name.size }.max 33: 34: puts " dependents:" 35: unless deps.empty? then 36: deps.sort_by { |spec| spec.full_name }.each do |spec| 37: vers = spec.dependencies.find {|s| s.name == name}.requirements_list 38: puts " %-*s - %s" % [max, spec.full_name, vers.join(", ")] 39: end 40: else 41: puts " none" 42: end 43: end 44: 45: desc "Print a contact list for gems dependent on this gem" 46: task :email do 47: gems = self.get_gems_by_name 48: gem = gems[self.name] 49: 50: abort "Couldn't find gem: #{self.name}" unless gem 51: 52: deps = self.dependent_upon self.name 53: email = deps.map { |s| s.email }.compact.flatten.sort.uniq 54: email = email.map { |s| s.split(/,\s*/) }.flatten.sort.uniq 55: 56: email.map! { |s| # don't you people realize how easy this is? 57: s.gsub(/ at | _at_ |\s*(atmark|@nospam@|-at?-|@at?@|<at?>|\[at?\]|\(at?\))\s*/, '@').gsub(/\s*(dot|\[d(ot)?\]|\.dot\.)\s*/, '.').gsub(/\s+com$/, '.com') 58: } 59: 60: bad, good = email.partition { |e| e !~ /^[\w.+-]+\@[\w.+-]+$/ } 61: 62: warn "Rejecting #{bad.size} email. I couldn't unmunge them." unless 63: bad.empty? 64: 65: puts good.join(", ") 66: 67: warn "Warning: couldn't extract any email addresses" if good.empty? 68: end 69: 70: desc "Fetch all the dependent gems of this gem into tarballs" 71: task :fetch do 72: gems = self.get_gems_by_name 73: gem = gems[self.name] 74: deps = self.dependent_upon self.name 75: 76: mkdir "deps" unless File.directory? "deps" 77: Dir.chdir "deps" do 78: begin 79: deps.sort_by { |spec| spec.full_name }.each do |spec| 80: full_name = spec.full_name 81: tgz_name = "#{full_name}.tgz" 82: gem_name = "#{full_name}.gem" 83: 84: next if File.exist? tgz_name 85: FileUtils.rm_rf [full_name, gem_name] 86: 87: begin 88: warn "downloading #{full_name}" 89: Gem::RemoteFetcher.fetcher.download(spec, GEMURL, Dir.pwd) 90: FileUtils.mv "cache/#{gem_name}", '.' 91: rescue Gem::RemoteFetcher::FetchError 92: warn " failed" 93: next 94: end 95: 96: warn "converting #{gem_name} to tarball" 97: 98: system "gem unpack #{gem_name} 2> /dev/null" 99: system "gem spec -l #{gem_name} > #{full_name}/gemspec.rb" 100: system "tar zmcf #{tgz_name} #{full_name}" 101: FileUtils.rm_rf [full_name, gem_name, "cache"] 102: end 103: ensure 104: FileUtils.rm_rf "cache" 105: end 106: end 107: end 108: end 109: 110: desc 'Install missing dependencies.' 111: task :check_extra_deps do 112: # extra_deps = [["rubyforge", ">= 1.0.0"], ["rake", ">= 0.8.1"]] 113: (extra_deps + extra_dev_deps).each do |dep| 114: begin 115: gem(*dep) 116: rescue Gem::LoadError 117: install_gem(*dep) 118: end 119: end 120: end 121: end
Return all the dependencies on the named rubygem.
# File lib/hoe/deps.rb, line 175 175: def dependent_upon name 176: get_latest_gems.find_all { |gem| 177: gem.dependencies.any? { |dep| dep.name == name } 178: } 179: end
Return a hash of the latest rubygems keyed by name.
# File lib/hoe/deps.rb, line 166 166: def get_gems_by_name 167: @@by_name ||= Hash[*get_latest_gems.map { |gem| 168: [gem.name, gem, gem.full_name, gem] 169: }.flatten] 170: end
Return the latest rubygems.
# File lib/hoe/deps.rb, line 159 159: def get_latest_gems 160: @@cache ||= Hash[*get_source_index.flatten].values 161: end
Return the rubygems source index.
# File lib/hoe/deps.rb, line 126 126: def get_source_index 127: @@index ||= nil 128: 129: return @@index if @@index 130: 131: dump = unless File.exist? '.source_index' then 132: warn "Fetching full index and caching. This can take a while." 133: url = GEMURL + "Marshal.#{Gem.marshal_version}.Z" 134: dump = Gem::RemoteFetcher.fetcher.fetch_path url 135: dump = Gem.inflate dump 136: 137: warn "stripping index to latest gems" 138: ary = Marshal.load dump 139: 140: h = {} 141: Hash[ary].values.sort.each { |spec| h[spec.name] = spec } 142: ary = h.map { |k,v| [v.full_name, v] } 143: 144: dump = Marshal.dump ary 145: 146: open '.source_index', 'wb' do |io| io.write dump end 147: 148: dump 149: else 150: open '.source_index', 'rb' do |io| io.read end 151: end 152: 153: @@index = Marshal.load dump 154: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.