From 51a1792e7ad4946940089a68112af783faa8a16c Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Wed, 8 Jul 2015 14:22:44 +0100 Subject: [PATCH] Audit GitHub repository notability. This stuff seems to be taken better when coming from a script rather than from a human. Feel free to disagree about the specific numbers chosen here. --- Library/Homebrew/cmd/audit.rb | 21 +++++++++++++++++++++ Library/Homebrew/utils.rb | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/Library/Homebrew/cmd/audit.rb b/Library/Homebrew/cmd/audit.rb index 3ef601c3b2..bacd8b0e33 100644 --- a/Library/Homebrew/cmd/audit.rb +++ b/Library/Homebrew/cmd/audit.rb @@ -422,6 +422,26 @@ class FormulaAuditor end end + def audit_github_repository + return unless @strict + + regex = %r{https?://github.com/([^/]+)/([^/]+)/?.*} + _, user, repo = *regex.match(formula.stable.url) + _, user, repo = *regex.match(formula.homepage) unless user + return if !user || !repo + + metadata = GitHub.repository(user, repo) + problem "GitHub fork (not canonical repository)" if metadata["fork"] + if (metadata["forks_count"] < 5) || (metadata["watchers_count"] < 5) || + (metadata["stargazers_count"] < 10) + problem "GitHub repository not notable enough (<5 forks, <5 watchers and/or <10 stars)" + end + + if (Date.parse(metadata["created_at"]) > (Date.today - 30)) + problem "GitHub repository too new (<30 days old)" + end + end + def audit_specs if head_only?(formula) && formula.tap.to_s.downcase != "homebrew/homebrew-head-only" problem "Head-only (no stable download)" @@ -831,6 +851,7 @@ class FormulaAuditor audit_specs audit_desc audit_homepage + audit_github_repository audit_deps audit_conflicts audit_options diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 19b74a3cdd..85aef283ee 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -399,6 +399,10 @@ module GitHub extend self open(uri) { |json| json["items"] } end + def repository(user, repo) + open(URI.parse("https://api.github.com/repos/#{user}/#{repo}")) { |j| j } + end + def build_query_string(query, qualifiers) s = "q=#{uri_escape(query)}+" s << build_search_qualifier_string(qualifiers)