Skip to content

Commit

Permalink
Cut down even further on rake -T noise
Browse files Browse the repository at this point in the history
  • Loading branch information
dhh committed Jun 9, 2010
1 parent 2117994 commit 9838156
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 36 deletions.
26 changes: 13 additions & 13 deletions activerecord/lib/active_record/railties/databases.rake
Expand Up @@ -5,7 +5,7 @@ namespace :db do
end

namespace :create do
desc 'Create all the local databases defined in config/database.yml'
# desc 'Create all the local databases defined in config/database.yml'
task :all => :load_config do
ActiveRecord::Base.configurations.each_value do |config|
# Skip entries that don't have a database key, such as the first entry here:
Expand All @@ -26,7 +26,7 @@ namespace :db do
end
end

desc 'Create the database defined in config/database.yml for the current Rails.env - also makes test database if in development mode'
desc 'Create the database from config/database.yml for the current Rails.env (use db:create:all to create all dbs in the config)'
task :create => :load_config do
# Make the test database at the same time as the development one, if it exists
if Rails.env.development? && ActiveRecord::Base.configurations['test']
Expand Down Expand Up @@ -100,7 +100,7 @@ namespace :db do
end

namespace :drop do
desc 'Drops all the local databases defined in config/database.yml'
# desc 'Drops all the local databases defined in config/database.yml'
task :all => :load_config do
ActiveRecord::Base.configurations.each_value do |config|
# Skip entries that don't have a database key
Expand All @@ -115,7 +115,7 @@ namespace :db do
end
end

desc 'Drops the database for the current Rails.env'
desc 'Drops the database for the current Rails.env (use db:drop:all to drop all databases)'
task :drop => :load_config do
config = ActiveRecord::Base.configurations[Rails.env || 'development']
begin
Expand All @@ -142,7 +142,7 @@ namespace :db do
end

namespace :migrate do
desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
# desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
task :redo => :environment do
if ENV["VERSION"]
Rake::Task["db:migrate:down"].invoke
Expand All @@ -153,18 +153,18 @@ namespace :db do
end
end

desc 'Resets your database using your migrations for the current environment'
# desc 'Resets your database using your migrations for the current environment'
task :reset => ["db:drop", "db:create", "db:migrate"]

desc 'Runs the "up" for a given migration VERSION.'
# desc 'Runs the "up" for a given migration VERSION.'
task :up => :environment do
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
raise "VERSION is required" unless version
ActiveRecord::Migrator.run(:up, "db/migrate/", version)
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
end

desc 'Runs the "down" for a given migration VERSION.'
# desc 'Runs the "down" for a given migration VERSION.'
task :down => :environment do
version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
raise "VERSION is required" unless version
Expand All @@ -187,7 +187,7 @@ namespace :db do
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
end

desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
# desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
task :reset => [ 'db:drop', 'db:setup' ]

# desc "Retrieves the charset for the current environment's database"
Expand Down Expand Up @@ -240,7 +240,7 @@ namespace :db do
end
end

desc 'Create the database, load the schema, and initialize with the seed data'
desc 'Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the db first)'
task :setup => [ 'db:create', 'db:schema:load', 'db:seed' ]

desc 'Load the seed data from db/seeds.rb'
Expand All @@ -263,7 +263,7 @@ namespace :db do
end
end

desc "Search for a fixture given a LABEL or ID. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
# desc "Search for a fixture given a LABEL or ID. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
task :identify => :environment do
require 'active_record/fixtures'

Expand Down Expand Up @@ -347,7 +347,7 @@ namespace :db do
end

namespace :test do
desc "Recreate the test database from the current schema.rb"
# desc "Recreate the test database from the current schema.rb"
task :load => 'db:test:purge' do
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
ActiveRecord::Schema.verbose = false
Expand Down Expand Up @@ -391,7 +391,7 @@ namespace :db do
end
end

desc "Empty the test database"
# desc "Empty the test database"
task :purge => :environment do
abcs = ActiveRecord::Base.configurations
case abcs["test"]["adapter"]
Expand Down
47 changes: 39 additions & 8 deletions railties/lib/rails/tasks/documentation.rake
@@ -1,13 +1,43 @@
require 'rake/rdoctask'

# Monkey-patch to remove redoc'ing and clobber descriptions to cut down on rake -T noise
class RDocTaskWithoutDescriptions < Rake::RDocTask
def define
task rdoc_task_name

task rerdoc_task_name => [clobber_task_name, rdoc_task_name]

task clobber_task_name do
rm_r rdoc_dir rescue nil
end

task :clobber => [clobber_task_name]

directory @rdoc_dir
task rdoc_task_name => [rdoc_target]
file rdoc_target => @rdoc_files + [Rake.application.rakefile] do
rm_r @rdoc_dir rescue nil
@before_running_rdoc.call if @before_running_rdoc
args = option_list + @rdoc_files
if @external
argstring = args.join(' ')
sh %{ruby -Ivendor vendor/rd #{argstring}}
else
require 'rdoc/rdoc'
RDoc::RDoc.new.document(args)
end
end
self
end
end

namespace :doc do
def gem_path(gem_name)
path = $LOAD_PATH.grep(/#{gem_name}[\w.-]*\/lib$/).first
yield File.dirname(path) if path
end

desc "Generate documentation for the application. Set custom template with TEMPLATE=/path/to/rdoc/template.rb or title with TITLE=\"Custom Title\""
Rake::RDocTask.new("app") { |rdoc|
RDocTaskWithoutDescriptions.new("app") { |rdoc|
rdoc.rdoc_dir = 'doc/app'
rdoc.template = ENV['template'] if ENV['template']
rdoc.title = ENV['title'] || "Rails Application Documentation"
Expand All @@ -17,9 +47,10 @@ namespace :doc do
rdoc.rdoc_files.include('app/**/*.rb')
rdoc.rdoc_files.include('lib/**/*.rb')
}
Rake::Task['doc:app'].comment = "Generate docs for the app -- also availble doc:rails, doc:guides, doc:plugins (options: TEMPLATE=/rdoc-template.rb, TITLE=\"Custom Title\")"

desc 'Generate documentation for the Rails framework.'
Rake::RDocTask.new("rails") { |rdoc|
# desc 'Generate documentation for the Rails framework.'
RDocTaskWithoutDescriptions.new("rails") { |rdoc|
rdoc.rdoc_dir = 'doc/api'
rdoc.template = "#{ENV['template']}.rb" if ENV['template']
rdoc.title = "Rails Framework Documentation"
Expand Down Expand Up @@ -71,15 +102,15 @@ namespace :doc do

plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }

desc "Generate documentation for all installed plugins"
# desc "Generate documentation for all installed plugins"
task :plugins => plugins.collect { |plugin| "doc:plugins:#{plugin}" }

desc "Remove plugin documentation"
# desc "Remove plugin documentation"
task :clobber_plugins do
rm_rf 'doc/plugins' rescue nil
end

desc "Generate Rails Guides"
# desc "Generate Rails Guides"
task :guides do
# FIXME: Reaching outside lib directory is a bad idea
require File.expand_path('../../../../guides/rails_guides', __FILE__)
Expand All @@ -89,7 +120,7 @@ namespace :doc do
namespace :plugins do
# Define doc tasks for each plugin
plugins.each do |plugin|
desc "Generate documentation for the #{plugin} plugin"
# desc "Generate documentation for the #{plugin} plugin"
task(plugin => :environment) do
plugin_base = "vendor/plugins/#{plugin}"
options = []
Expand Down
4 changes: 2 additions & 2 deletions railties/lib/rails/tasks/misc.rake
Expand Up @@ -7,13 +7,13 @@ task :rails_env do
end
end

desc 'Generate a crytographically secure secret key (rhis is typically used to generate a secret for cookie sessions).'
desc 'Generate a crytographically secure secret key (this is typically used to generate a secret for cookie sessions).'
task :secret do
require 'active_support/secure_random'
puts ActiveSupport::SecureRandom.hex(64)
end

desc 'Explain the current environment'
desc 'List versions of all Rails frameworks and the environment'
task :about do
puts Rails::Info
end
Expand Down
50 changes: 37 additions & 13 deletions railties/lib/rails/test_unit/testing.rake
@@ -1,5 +1,35 @@
require 'rake/testtask'

# Monkey-patch to silence the description from Rake::TestTask to cut down on rake -T noise
class TestTaskWithoutDescription < Rake::TestTask
# Create the tasks defined by this task lib.
def define
lib_path = @libs.join(File::PATH_SEPARATOR)
task @name do
run_code = ''
RakeFileUtils.verbose(@verbose) do
run_code =
case @loader
when :direct
"-e 'ARGV.each{|f| load f}'"
when :testrb
"-S testrb #{fix}"
when :rake
rake_loader
end
@ruby_opts.unshift( "-I\"#{lib_path}\"" )
@ruby_opts.unshift( "-w" ) if @warning
ruby @ruby_opts.join(" ") +
" \"#{run_code}\" " +
file_list.collect { |fn| "\"#{fn}\"" }.join(' ') +
" #{option_list}"
end
end
self
end
end


TEST_CHANGES_SINCE = Time.now - 600

# Look up tests for recently modified sources.
Expand Down Expand Up @@ -40,7 +70,7 @@ module Kernel
end
end

desc 'Run all unit, functional and integration tests'
desc 'Runs test:unit, test:functional, test:integration together (also available: test:benchmark, test:profile, test:plugins)'
task :test do
errors = %w(test:units test:functionals test:integration).collect do |task|
begin
Expand Down Expand Up @@ -92,38 +122,33 @@ namespace :test do
end
Rake::Task['test:uncommitted'].comment = "Test changes since last checkin (only Subversion and Git)"

Rake::TestTask.new(:units => "test:prepare") do |t|
TestTaskWithoutDescription.new(:units => "test:prepare") do |t|
t.libs << "test"
t.pattern = 'test/unit/**/*_test.rb'
end
Rake::Task['test:units'].comment = "Run the unit tests in test/unit"

Rake::TestTask.new(:functionals => "test:prepare") do |t|
TestTaskWithoutDescription.new(:functionals => "test:prepare") do |t|
t.libs << "test"
t.pattern = 'test/functional/**/*_test.rb'
end
Rake::Task['test:functionals'].comment = "Run the functional tests in test/functional"

Rake::TestTask.new(:integration => "test:prepare") do |t|
TestTaskWithoutDescription.new(:integration => "test:prepare") do |t|
t.libs << "test"
t.pattern = 'test/integration/**/*_test.rb'
end
Rake::Task['test:integration'].comment = "Run the integration tests in test/integration"

Rake::TestTask.new(:benchmark => 'test:prepare') do |t|
TestTaskWithoutDescription.new(:benchmark => 'test:prepare') do |t|
t.libs << 'test'
t.pattern = 'test/performance/**/*_test.rb'
t.options = '-- --benchmark'
end
Rake::Task['test:benchmark'].comment = 'Benchmark the performance tests'

Rake::TestTask.new(:profile => 'test:prepare') do |t|
TestTaskWithoutDescription.new(:profile => 'test:prepare') do |t|
t.libs << 'test'
t.pattern = 'test/performance/**/*_test.rb'
end
Rake::Task['test:profile'].comment = 'Profile the performance tests'

Rake::TestTask.new(:plugins => :environment) do |t|
TestTaskWithoutDescription.new(:plugins => :environment) do |t|
t.libs << "test"

if ENV['PLUGIN']
Expand All @@ -132,5 +157,4 @@ namespace :test do
t.pattern = 'vendor/plugins/*/**/test/**/*_test.rb'
end
end
Rake::Task['test:plugins'].comment = "Run the plugin tests in vendor/plugins/*/**/test (or specify with PLUGIN=name)"
end

4 comments on commit 9838156

@eric1234
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One man's noise is another man's documentation. I don't mind the re-wording but removing docs to often used tasks (such as db:migrate:redo) seems odd. It means I can no longer tell other developers to "run rake -T" and read the docs.

Is there a good online places these now hidden rake tasks are documented. Maybe the Rails guides? Or is this now a hidden feature for those in the know? Just my two cents.

@3den
Copy link

@3den 3den commented on 9838156 Feb 23, 2012

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhh to reduce noise we can aways use grep... It would be nice to have all tasks documented with descriptions again.

@bguthrie
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change has not improved my life, or my developers'; since the implication (to me) is that undescribed Rake tasks are not part of ActiveRecord's public API, I just find it confusing. Respectfully ask you and the core team to please reconsider.

@carlosantoniodasilva
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gbuesing you can still consider the same rake tasks as public, as they were before. It's just that now the most common used tasks show up, and you can always use rake -T --all to show everything, no matter whether they have description or not.

Please sign in to comment.