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