create: allow --set-name and --set-version

Closes Homebrew/homebrew#10873.
Closes Homebrew/homebrew#14401.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
This commit is contained in:
Adam Vandenberg 2012-08-22 19:42:01 -07:00
parent 537de9c046
commit 4d7069ed6f

View File

@ -2,18 +2,32 @@ require 'formula'
require 'blacklist' require 'blacklist'
module Homebrew extend self module Homebrew extend self
# Create a formula from a tarball URL
def create def create
# Allow searching MacPorts or Fink.
if ARGV.include? '--macports' if ARGV.include? '--macports'
exec "open", "http://www.macports.org/ports.php?by=name&substr=#{ARGV.next}" exec "open", "http://www.macports.org/ports.php?by=name&substr=#{ARGV.next}"
elsif ARGV.include? '--fink' elsif ARGV.include? '--fink'
exec "open", "http://pdb.finkproject.org/pdb/browse.php?summary=#{ARGV.next}" exec "open", "http://pdb.finkproject.org/pdb/browse.php?summary=#{ARGV.next}"
elsif ARGV.named.empty? end
raise UsageError
else raise UsageError if ARGV.named.empty?
# Ensure that the cache exists so we can fetch the tarball
HOMEBREW_CACHE.mkpath HOMEBREW_CACHE.mkpath
paths = ARGV.named.map do |url|
url = ARGV.named.first # Pull the first (and only) url from ARGV
version = ARGV.next if ARGV.include? '--set-version'
name = ARGV.next if ARGV.include? '--set-name'
fc = FormulaCreator.new fc = FormulaCreator.new
fc.name = name
fc.version = version
fc.url = url fc.url = url
fc.mode = if ARGV.include? '--cmake' fc.mode = if ARGV.include? '--cmake'
:cmake :cmake
elsif ARGV.include? '--autotools' elsif ARGV.include? '--autotools'
@ -27,6 +41,8 @@ module Homebrew extend self
fc.path = Formula.path fc.name fc.path = Formula.path fc.name
end end
# Don't allow blacklisted formula, or names that shadow aliases,
# unless --force is specified.
unless ARGV.force? unless ARGV.force?
if msg = blacklisted?(fc.name) if msg = blacklisted?(fc.name)
raise "#{fc.name} is blacklisted for creation.\n#{msg}\nIf you really want to create this formula use --force." raise "#{fc.name} is blacklisted for creation.\n#{msg}\nIf you really want to create this formula use --force."
@ -41,12 +57,11 @@ module Homebrew extend self
EOS EOS
end end
end end
fc.generate
fc.path fc.generate!
end
puts "Please `brew audit "+paths.collect{|p|p.basename(".rb")}*" "+"` before submitting, thanks." puts "Please `brew audit #{fc.name}` before submitting, thanks."
exec_editor *paths exec_editor fc.path
end
end end
def __gets def __gets
@ -59,22 +74,26 @@ class FormulaCreator
attr :url attr :url
attr :sha1 attr :sha1
attr :name, true attr :name, true
attr :version, true
attr :path, true attr :path, true
attr :mode, true attr :mode, true
def url= url def url= url
@url = url @url = url
path = Pathname.new url path = Pathname.new(url)
if @name.nil?
/(.*?)[-_.]?#{path.version}/.match path.basename /(.*?)[-_.]?#{path.version}/.match path.basename
@name = $1 @name = $1
@path = Formula.path $1 unless $1.nil? @path = Formula.path $1 unless $1.nil?
else
@path = Formula.path name
end
if @version.nil?
@version = Pathname.new(url).version
end
end end
def version def generate!
Pathname.new(url).version
end
def generate
raise "#{path} already exists" if path.exist? raise "#{path} already exists" if path.exist?
require 'digest' require 'digest'
@ -83,8 +102,6 @@ class FormulaCreator
if version.nil? if version.nil?
opoo "Version cannot be determined from URL." opoo "Version cannot be determined from URL."
puts "You'll need to add an explicit 'version' to the formula." puts "You'll need to add an explicit 'version' to the formula."
else
puts "Version detected as #{version}."
end end
unless ARGV.include? "--no-fetch" and version unless ARGV.include? "--no-fetch" and version
@ -105,6 +122,9 @@ class FormulaCreator
class #{Formula.class_s name} < Formula class #{Formula.class_s name} < Formula
homepage '' homepage ''
url '#{url}' url '#{url}'
<% unless version.nil? %>
version '#{version}'
<% end %>
sha1 '#{sha1}' sha1 '#{sha1}'
<% if mode == :cmake %> <% if mode == :cmake %>