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.