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,51 +2,66 @@ 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?
raise UsageError
else
HOMEBREW_CACHE.mkpath
paths = ARGV.named.map do |url|
fc = FormulaCreator.new
fc.url = url
fc.mode = if ARGV.include? '--cmake'
:cmake
elsif ARGV.include? '--autotools'
:autotools
end
if fc.name.nil? or fc.name.to_s.strip.empty?
path = Pathname.new url
print "Formula name [#{path.stem}]: "
fc.name = __gets || path.stem
fc.path = Formula.path fc.name
end
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."
end
if Formula.aliases.include? fc.name
realname = Formula.canonical_name fc.name
raise <<-EOS.undent
The formula #{realname} is already aliased to #{fc.name}
Please check that you are not creating a duplicate.
To force creation use --force.
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 end
raise UsageError if ARGV.named.empty?
# Ensure that the cache exists so we can fetch the tarball
HOMEBREW_CACHE.mkpath
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'
:autotools
end
if fc.name.nil? or fc.name.to_s.strip.empty?
path = Pathname.new url
print "Formula name [#{path.stem}]: "
fc.name = __gets || path.stem
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."
end
if Formula.aliases.include? fc.name
realname = Formula.canonical_name fc.name
raise <<-EOS.undent
The formula #{realname} is already aliased to #{fc.name}
Please check that you are not creating a duplicate.
To force creation use --force.
EOS
end
end
fc.generate!
puts "Please `brew audit #{fc.name}` before submitting, thanks."
exec_editor fc.path
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)
/(.*?)[-_.]?#{path.version}/.match path.basename if @name.nil?
@name = $1 /(.*?)[-_.]?#{path.version}/.match path.basename
@path = Formula.path $1 unless $1.nil? @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 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 %>