Check GitHub for issues relating to build failures
Uses the GitHub issue search API, so it's very neat and concise. However you can get false positives, so it's not 100% useful. Still I think it is more useful than before, which was, nothing. A further issue is it depends on the ticket at GitHub using the formula's proper name. So we should ensure this as we can. Finally, it does add a possibly large delay to clean exit after a build error. We may want to fiddle with timeouts if it becomes troublesome.
This commit is contained in:
parent
89479912ec
commit
56351558b8
@ -212,6 +212,28 @@ rescue FormulaUnavailableError
|
||||
end
|
||||
end
|
||||
|
||||
def issues_for_formula name
|
||||
# bit basic as depends on the issue at github having the exact name of the
|
||||
# formula in it. Which for stuff like objective-caml is unlikely. So we
|
||||
# really should search for aliases too.
|
||||
|
||||
name = f.name if Formula === name
|
||||
|
||||
require 'open-uri'
|
||||
require 'yaml'
|
||||
|
||||
issues = []
|
||||
|
||||
open("http://github.com/api/v2/yaml/issues/search/mxcl/homebrew/open/"+name) do |f|
|
||||
YAML::load(f.read)['issues'].each do |issue|
|
||||
issues << 'http://github.com/mxcl/homebrew/issues/#issue/%s' % issue['number']
|
||||
end
|
||||
end
|
||||
|
||||
issues
|
||||
rescue
|
||||
[]
|
||||
end
|
||||
|
||||
def clean f
|
||||
Cleaner.new f
|
||||
|
||||
8
bin/brew
8
bin/brew
@ -326,12 +326,18 @@ rescue Interrupt => e
|
||||
exit 130
|
||||
rescue BuildError => e
|
||||
e.backtrace[1] =~ %r{Library/Formula/(.+)\.rb:(\d+)}
|
||||
puts "http://github.com/mxcl/homebrew/blob/master/Library/Formula/#{$1}.rb#L#{$2}"
|
||||
formula_name = $1
|
||||
puts "http://github.com/mxcl/homebrew/blob/master/Library/Formula/#{formula_name}.rb#L#{$2}"
|
||||
ohai "Environment"
|
||||
dump_config
|
||||
puts "Exit status: #{e.status.exitstatus}"
|
||||
onoe e
|
||||
puts PLEASE_REPORT_BUG
|
||||
# this feature can be slow (depends on network conditions and if github is up)
|
||||
# so ideally we'd show feedback, eg. "checking for existin issues..." and
|
||||
# then replace that string with the following when the github api returns
|
||||
issues = issues_for_formula(formula_name)
|
||||
puts "These existing issues may help you:", *issues unless issues.empty?
|
||||
exit 1
|
||||
rescue RuntimeError, SystemCallError => e
|
||||
onoe e
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user