Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

initial project commit

  • Loading branch information...
commit a2a4ddecfa061d539477e97590ea0607302f385d 0 parents
@TwP TwP authored
15 History.txt
@@ -0,0 +1,15 @@
+== 0.3.0 / 2007-12-11
+ * color highlighting now works (need facets-2.0 library)
+
+== 0.2.0 / 2006-11-26
+ * add the "turn" executable
+ * fixed warnings
+
+== 0.1.2 / 2006-11-13
+ * added some instructions for using the package
+
+== 0.1.1 / 2006-11-10
+ * removed explicit dependency on the 'hoe' gem
+
+== 0.1.0 / 2006-11-10
+ * initial release
13 Manifest.txt
@@ -0,0 +1,13 @@
+History.txt
+Manifest.txt
+README.txt
+Rakefile
+bin/turn
+lib/turn.rb
+tasks/annotations.rake
+tasks/doc.rake
+tasks/gem.rake
+tasks/manifest.rake
+tasks/rubyforge.rake
+tasks/setup.rb
+tasks/svn.rake
103 README.txt
@@ -0,0 +1,103 @@
+= TURN - Test::Unit Reporter (New)
+ by Tim Pease
+ http://codeforpeople.rubyforge.org/turn
+
+== DESCRIPTION:
+
+TURN is a new way to view Test::Unit results. With longer running tests, it
+can be very frustrating to see a failure (....F...) and then have to wait till
+all the tests finish before you can see what the exact failure was. TURN
+displays each test on a separate line with failures being displayed
+immediately instead of at the end of the tests.
+
+If you have the 'facets' gem installed, then TURN output will be displayed in
+wonderful technicolor (but only if your terminal supports ANSI color codes).
+Well, the only colors are green and red, but that is still color.
+
+== FEATURES:
+
+Sample output:
+
+ TestMyClass
+ test_alt PASS
+ test_alt_eq PASS
+ test_bad FAIL
+ ./test/test_my_class.rb:64:in `test_bad'
+ <false> is not true.
+ test_foo PASS
+ test_foo_eq PASS
+ TestYourClass
+ test_method_a PASS
+ test_method_b PASS
+ test_method_c PASS
+ ============================================================================
+ pass: 7, fail: 1, error: 0
+ total: 15 tests with 42 assertions in 0.018 seconds
+ ============================================================================
+
+== SYNOPSIS:
+
+If you have the 'facets' gem installed, then TURN output will be displayed in
+wonderful technicolor (but only if your terminal supports ANSI color codes).
+Well, the only colors are green and red, but that is still color.
+
+
+=== Command Line
+
+You can use the *turn* executable in place of the *ruby* interpreter.
+
+ turn -Ilib test/test_all.rb
+
+This will invoke the ruby interpreter and automatically require the turn
+formatting library. All command line arguments are passed "as is" to the
+ruby interpreter.
+
+=== Require
+
+Simply require the TURN package from within your test suite.
+
+ require 'turn'
+
+This will configure Test::Unit to use TURN formatting for displaying test
+restuls. A better line to use, though, is the following:
+
+ begin; require 'turn'; rescue LoadError; end
+
+When you distribute your code, the test suite can be run without requiring
+the end user to install the TURN package.
+
+For a Rails application, put the require line into the 'test/test_helper.rb'
+scipt. Now your Rails tests will use TURN formatting.
+
+== REQUIREMENTS:
+
+* facets 2.0
+
+== INSTALL:
+
+ sudo gem install turn
+
+== LICENSE:
+
+MIT License
+
+Copyright (c) 2006-2008
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 Rakefile
@@ -0,0 +1,19 @@
+# $Id$
+
+load 'tasks/setup.rb'
+
+PROJ.name = 'turn'
+PROJ.summary = 'Test::Unit Reporter (New) -- new output format for Test::Unit'
+PROJ.authors = 'Tim Pease'
+PROJ.email = 'tim.pease@gmail.com'
+PROJ.url = 'http://codeforpeople.rubyforge.org/turn'
+PROJ.description = paragraphs_of('README.txt', 1).join("\n\n")
+PROJ.changes = paragraphs_of('History.txt', 0..1).join("\n\n")
+PROJ.rubyforge_name = 'codeforpeople'
+PROJ.version = '0.3.0'
+
+PROJ.rdoc_exclude << '^lib/'
+PROJ.rdoc_remote_dir = PROJ.name
+PROJ.svn = PROJ.name
+
+# EOF
14 bin/turn
@@ -0,0 +1,14 @@
+#!/usr/bin/ruby
+
+RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+
+begin
+ require 'turn'
+ Kernel.exec(RUBY, '-r', 'turn', *ARGV)
+rescue LoadError
+ require 'rubygems'
+ require 'turn'
+ Kernel.exec(RUBY, '-rubygems', '-r', 'turn', *ARGV)
+end
+
+# EOF
101 lib/turn.rb
@@ -0,0 +1,101 @@
+# $Id$
+
+require 'test/unit/ui/console/testrunner'
+begin
+ require 'facets/ansicode'
+rescue LoadError
+ begin
+ require 'rubygems'
+ require 'facets/ansicode'
+ rescue LoadError
+ end
+end
+
+
+module ::Test::Unit
+module UI
+module Console
+ class TestRunner
+
+ alias :t_attach_to_mediator :attach_to_mediator
+ def attach_to_mediator
+ @mediator.add_listener(TestRunnerMediator::STARTED, &method(:t_started))
+ @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:t_finished))
+ @mediator.add_listener(TestCase::STARTED, &method(:t_test_started))
+ @mediator.add_listener(TestCase::FINISHED, &method(:t_test_finished))
+ @mediator.add_listener(TestResult::FAULT, &method(:t_fault))
+ @io.sync = true
+ @t_cur_file, @t_fault = nil
+ end
+
+ def t_started( result )
+ @t_result = result
+ end
+
+ def t_finished( elapsed_time )
+ failure = @t_result.failure_count
+ error = @t_result.error_count
+ total = @t_result.run_count
+ pass = total - failure - error
+
+ bar = '=' * 78
+ if COLORIZE
+ bar = if pass == total then ::Console::ANSICode.green bar
+ else ::Console::ANSICode.red bar end
+ end
+
+ @io.puts bar
+ @io.puts " pass: %d, fail: %d, error: %d" % [pass, failure, error]
+ @io.puts " total: %d tests with %d assertions in #{elapsed_time} seconds" % [total, @t_result.assertion_count]
+ @io.puts bar
+ end
+
+ def t_test_started( name )
+ method, file = name.scan(%r/^([^\(]+)\(([^\)]+)\)/o).flatten!
+ if @t_cur_file != file
+ @t_cur_file = file
+ @io.puts file
+ end
+ @io.print " %-69s" % method
+ end
+
+ def t_test_finished( name )
+ @io.puts PASS unless @t_fault
+ @t_fault = false
+ end
+
+ def t_fault( fault )
+ @t_fault = true
+ msg = "\t"
+
+ case fault
+ when ::Test::Unit::Error
+ @io.puts ERROR
+ msg << fault.to_s.split("\n")[2..-1].join("\n\t")
+ when ::Test::Unit::Failure
+ @io.puts FAIL
+ msg << fault.location[0] << "\n\t"
+ msg << fault.message.gsub("\n","\n\t")
+ end
+
+ msg = ::Console::ANSICode.magenta msg if COLORIZE
+ @io.puts msg
+ end
+
+ COLORIZE = defined?(::Console::ANSICode) && ENV.has_key?('TERM')
+ if COLORIZE
+ PASS = ::Console::ANSICode.green ' PASS'
+ FAIL = ::Console::ANSICode.red ' FAIL'
+ ERROR = ::Console::ANSICode.white(
+ ::Console::ANSICode.on_red('ERROR'))
+ else
+ PASS = " PASS"
+ FAIL = " FAIL"
+ ERROR = "ERROR"
+ end
+ end
+end
+end
+end
+
+# EOF
30 tasks/annotations.rake
@@ -0,0 +1,30 @@
+# $Id$
+
+if HAVE_BONES
+
+desc "Enumerate all annotations"
+task :notes do
+ Bones::AnnotationExtractor.enumerate(
+ PROJ, "OPTIMIZE|FIXME|TODO", :tag => true)
+end
+
+namespace :notes do
+ desc "Enumerate all OPTIMIZE annotations"
+ task :optimize do
+ Bones::AnnotationExtractor.enumerate(PROJ, "OPTIMIZE")
+ end
+
+ desc "Enumerate all FIXME annotations"
+ task :fixme do
+ Bones::AnnotationExtractor.enumerate(PROJ, "FIXME")
+ end
+
+ desc "Enumerate all TODO annotations"
+ task :todo do
+ Bones::AnnotationExtractor.enumerate(PROJ, "TODO")
+ end
+end
+
+end # if HAVE_BONES
+
+# EOF
49 tasks/doc.rake
@@ -0,0 +1,49 @@
+# $Id$
+
+require 'rake/rdoctask'
+
+namespace :doc do
+
+ desc 'Generate RDoc documentation'
+ Rake::RDocTask.new do |rd|
+ rd.main = PROJ.rdoc_main
+ rd.options << '-d' if !WIN32 and `which dot` =~ %r/\/dot/
+ rd.rdoc_dir = PROJ.rdoc_dir
+
+ incl = Regexp.new(PROJ.rdoc_include.join('|'))
+ excl = Regexp.new(PROJ.rdoc_exclude.join('|'))
+ files = PROJ.files.find_all do |fn|
+ case fn
+ when excl; false
+ when incl; true
+ else false end
+ end
+ rd.rdoc_files.push(*files)
+
+ title = "#{PROJ.name}-#{PROJ.version} Documentation"
+ title = "#{PROJ.rubyforge_name}'s " + title if PROJ.rubyforge_name != title
+
+ rd.options << "-t #{title}"
+ end
+
+ desc 'Generate ri locally for testing'
+ task :ri => :clobber_ri do
+ sh "#{RDOC} --ri -o ri ."
+ end
+
+ desc 'Remove ri products'
+ task :clobber_ri do
+ rm_r 'ri' rescue nil
+ end
+
+end # namespace :doc
+
+desc 'Alias to doc:rdoc'
+task :doc => 'doc:rdoc'
+
+desc 'Remove all build products'
+task :clobber => %w(doc:clobber_rdoc doc:clobber_ri)
+
+remove_desc_for_task %w(doc:clobber_rdoc doc:clobber_ri)
+
+# EOF
89 tasks/gem.rake
@@ -0,0 +1,89 @@
+# $Id$
+
+require 'rake/gempackagetask'
+
+namespace :gem do
+
+ PROJ.spec = Gem::Specification.new do |s|
+ s.name = PROJ.name
+ s.version = PROJ.version
+ s.summary = PROJ.summary
+ s.authors = Array(PROJ.authors)
+ s.email = PROJ.email
+ s.homepage = Array(PROJ.url).first
+ s.rubyforge_project = PROJ.rubyforge_name
+
+ s.description = PROJ.description
+
+ PROJ.dependencies.each do |dep|
+ s.add_dependency(*dep)
+ end
+
+ s.files = PROJ.files
+ s.executables = PROJ.executables.map {|fn| File.basename(fn)}
+ s.extensions = PROJ.files.grep %r/extconf\.rb$/
+
+ s.bindir = 'bin'
+ dirs = Dir["{#{PROJ.libs.join(',')}}"]
+ s.require_paths = dirs unless dirs.empty?
+
+ incl = Regexp.new(PROJ.rdoc_include.join('|'))
+ excl = PROJ.rdoc_exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
+ excl = Regexp.new(excl.join('|'))
+ rdoc_files = PROJ.files.find_all do |fn|
+ case fn
+ when excl; false
+ when incl; true
+ else false end
+ end
+ s.rdoc_options = PROJ.rdoc_opts + ['--main', PROJ.rdoc_main]
+ s.extra_rdoc_files = rdoc_files
+ s.has_rdoc = true
+
+ if test ?f, PROJ.test_file
+ s.test_file = PROJ.test_file
+ else
+ s.test_files = PROJ.tests.to_a
+ end
+
+ # Do any extra stuff the user wants
+# spec_extras.each do |msg, val|
+# case val
+# when Proc
+# val.call(s.send(msg))
+# else
+# s.send "#{msg}=", val
+# end
+# end
+ end
+
+ desc 'Show information about the gem'
+ task :debug do
+ puts PROJ.spec.to_ruby
+ end
+
+ Rake::GemPackageTask.new(PROJ.spec) do |pkg|
+ pkg.need_tar = PROJ.need_tar
+ pkg.need_zip = PROJ.need_zip
+ end
+
+ desc 'Install the gem'
+ task :install => [:clobber, :package] do
+ sh "#{SUDO} #{GEM} install pkg/#{PROJ.spec.file_name}"
+ end
+
+ desc 'Uninstall the gem'
+ task :uninstall do
+ sh "#{SUDO} #{GEM} uninstall -v '#{PROJ.version}' #{PROJ.name}"
+ end
+
+end # namespace :gem
+
+desc 'Alias to gem:package'
+task :gem => 'gem:package'
+
+task :clobber => 'gem:clobber_package'
+
+remove_desc_for_task %w(gem:clobber_package)
+
+# EOF
41 tasks/manifest.rake
@@ -0,0 +1,41 @@
+# $Id$
+
+require 'find'
+
+namespace :manifest do
+
+ desc 'Verify the manifest'
+ task :check do
+ fn = 'Manifest.tmp'
+ files = []
+ exclude = Regexp.new(PROJ.exclude.join('|'))
+ Find.find '.' do |path|
+ path.sub! %r/^(\.\/|\/)/o, ''
+ next unless test ?f, path
+ next if path =~ exclude
+ files << path
+ end
+
+ File.open(fn, 'w') {|fp| fp.puts files.sort}
+ system "#{DIFF} -du Manifest.txt #{fn}"
+ rm fn rescue nil
+ end
+
+ desc 'Create a new manifest'
+ task :create do
+ fn = 'Manifest.txt'
+ files = []
+ exclude = Regexp.new(PROJ.exclude.join('|'))
+ Find.find '.' do |path|
+ path.sub! %r/^(\.\/|\/)/o, ''
+ next unless test ?f, path
+ next if path =~ exclude
+ files << path
+ end
+
+ files << fn unless test ?f, fn
+ File.open(fn, 'w') {|fp| fp.puts files.sort}
+ end
+end
+
+# EOF
57 tasks/rubyforge.rake
@@ -0,0 +1,57 @@
+# $Id$
+
+if PROJ.rubyforge_name && HAVE_RUBYFORGE
+
+require 'rubyforge'
+require 'rake/contrib/sshpublisher'
+
+namespace :gem do
+ desc 'Package and upload to RubyForge'
+ task :release => [:clobber, :package] do |t|
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
+ pkg = "pkg/#{PROJ.spec.full_name}"
+
+ if $DEBUG then
+ puts "release_id = rf.add_release #{PROJ.rubyforge_name.inspect}, #{PROJ.name.inspect}, #{PROJ.version.inspect}, \"#{pkg}.tgz\""
+ puts "rf.add_file #{PROJ.rubyforge_name.inspect}, #{PROJ.name.inspect}, release_id, \"#{pkg}.gem\""
+ end
+
+ rf = RubyForge.new
+ puts 'Logging in'
+ rf.login
+
+ c = rf.userconfig
+ c['release_notes'] = PROJ.description if PROJ.description
+ c['release_changes'] = PROJ.changes if PROJ.changes
+ c['preformatted'] = true
+
+ files = [(PROJ.need_tar ? "#{pkg}.tgz" : nil),
+ (PROJ.need_zip ? "#{pkg}.zip" : nil),
+ "#{pkg}.gem"].compact
+
+ puts "Releasing #{PROJ.name} v. #{PROJ.version}"
+ rf.add_release PROJ.rubyforge_name, PROJ.name, PROJ.version, *files
+ end
+end # namespace :gem
+
+
+namespace :doc do
+ desc "Publish RDoc to RubyForge"
+ task :release => %w(doc:clobber_rdoc doc:rdoc) do
+ config = YAML.load(
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
+ )
+
+ host = "#{config['username']}@rubyforge.org"
+ remote_dir = "/var/www/gforge-projects/#{PROJ.rubyforge_name}/"
+ remote_dir << PROJ.rdoc_remote_dir if PROJ.rdoc_remote_dir
+ local_dir = PROJ.rdoc_dir
+
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
+ end
+end # namespace :doc
+
+end # if HAVE_RUBYFORGE
+
+# EOF
151 tasks/setup.rb
@@ -0,0 +1,151 @@
+# $Id$
+
+require 'rubygems'
+require 'rake'
+require 'fileutils'
+require 'ostruct'
+
+PROJ = OpenStruct.new
+
+PROJ.name = nil
+PROJ.summary = nil
+PROJ.description = nil
+PROJ.changes = nil
+PROJ.authors = nil
+PROJ.email = nil
+PROJ.url = nil
+PROJ.version = ENV['VERSION'] || '0.0.0'
+PROJ.rubyforge_name = nil
+PROJ.exclude = %w(tmp$ bak$ ~$ CVS .svn/ ^pkg/ ^doc/)
+
+# Rspec
+PROJ.specs = FileList['spec/**/*_spec.rb']
+PROJ.spec_opts = []
+
+# Test::Unit
+PROJ.tests = FileList['test/**/test_*.rb']
+PROJ.test_file = 'test/all.rb'
+PROJ.test_opts = []
+
+# Rcov
+PROJ.rcov_opts = ['--sort', 'coverage', '-T']
+
+# Rdoc
+PROJ.rdoc_opts = []
+PROJ.rdoc_include = %w(^lib/ ^bin/ ^ext/ .txt$)
+PROJ.rdoc_exclude = %w(extconf.rb$ ^Manifest.txt$)
+PROJ.rdoc_main = 'README.txt'
+PROJ.rdoc_dir = 'doc'
+PROJ.rdoc_remote_dir = nil
+
+# Extensions
+PROJ.extensions = FileList['ext/**/extconf.rb']
+PROJ.ruby_opts = %w(-w)
+PROJ.libs = []
+%w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
+
+# Gem Packaging
+PROJ.files =
+ if test ?f, 'Manifest.txt'
+ files = File.readlines('Manifest.txt').map {|fn| fn.chomp.strip}
+ files.delete ''
+ files
+ else [] end
+PROJ.executables = PROJ.files.find_all {|fn| fn =~ %r/^bin/}
+PROJ.dependencies = []
+PROJ.need_tar = true
+PROJ.need_zip = false
+
+# File Annotations
+PROJ.annotation_exclude = []
+PROJ.annotation_extensions = %w(.txt .rb .erb) << ''
+
+# Subversion Repository
+PROJ.svn = false
+PROJ.svn_root = nil
+PROJ.svn_trunk = 'trunk'
+PROJ.svn_tags = 'tags'
+PROJ.svn_branches = 'branches'
+
+# Load the other rake files in the tasks folder
+Dir.glob('tasks/*.rake').sort.each {|fn| import fn}
+
+# Setup some constants
+WIN32 = %r/win32/ =~ RUBY_PLATFORM unless defined? WIN32
+
+DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
+
+def quiet( &block )
+ io = [STDOUT.dup, STDERR.dup]
+ STDOUT.reopen DEV_NULL
+ STDERR.reopen DEV_NULL
+ block.call
+ensure
+ STDOUT.reopen io.first
+ STDERR.reopen io.last
+end
+
+DIFF = if WIN32 then 'diff.exe'
+ else
+ if quiet {system "gdiff", __FILE__, __FILE__} then 'gdiff'
+ else 'diff' end
+ end unless defined? DIFF
+
+SUDO = if WIN32 then ''
+ else
+ if quiet {system 'which sudo'} then 'sudo'
+ else '' end
+ end
+
+RCOV = WIN32 ? 'rcov.cmd' : 'rcov'
+GEM = WIN32 ? 'gem.cmd' : 'gem'
+
+%w(rcov spec/rake/spectask rubyforge bones).each do |lib|
+ begin
+ require lib
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", true}
+ rescue LoadError
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", false}
+ end
+end
+
+# Reads a file at +path+ and spits out an array of the +paragraphs+
+# specified.
+#
+# changes = paragraphs_of('History.txt', 0..1).join("\n\n")
+# summary, *description = paragraphs_of('README.txt', 3, 3..8)
+#
+def paragraphs_of(path, *paragraphs)
+ File.read(path).delete("\r").split(/\n\n+/).values_at(*paragraphs)
+end
+
+# Adds the given gem _name_ to the current project's dependency list. An
+# optional gem _version_ can be given. If omitted, the newest gem version
+# will be used.
+#
+def depend_on( name, version = nil )
+ spec = Gem.source_index.find_name(name).last
+ version = spec.version.to_s if version.nil? and !spec.nil?
+
+ PROJ.dependencies << (version.nil? ? [name] : [name, ">= #{version}"])
+end
+
+# Adds the given _path_ to the include path if it is not already there
+#
+def ensure_in_path( path )
+ path = File.expand_path(path)
+ $:.unshift(path) if test(?d, path) and not $:.include?(path)
+end
+
+# Find a rake task using the task name and remove any description text. This
+# will prevent the task from being displayed in the list of available tasks.
+#
+def remove_desc_for_task( names )
+ Array(names).each do |task_name|
+ task = Rake.application.tasks.find {|t| t.name == task_name}
+ next if task.nil?
+ task.instance_variable_set :@comment, nil
+ end
+end
+
+# EOF
44 tasks/svn.rake
@@ -0,0 +1,44 @@
+# $Id$
+
+
+if PROJ.svn and system("svn --version 2>&1 > #{DEV_NULL}")
+
+unless PROJ.svn_root
+ info = %x/svn info ./
+ m = %r/^Repository Root:\s+(.*)$/.match(info)
+ PROJ.svn_root = (m.nil? ? '' : m[1])
+end
+PROJ.svn_root = File.join(PROJ.svn_root, PROJ.svn) if String === PROJ.svn
+
+namespace :svn do
+
+ desc 'Show tags from the SVN repository'
+ task :show_tags do |t|
+ tags = %x/svn list #{File.join(PROJ.svn_root, PROJ.svn_tags)}/
+ tags.gsub!(%r/\/$/, '')
+ puts tags
+ end
+
+ desc 'Create a new tag in the SVN repository'
+ task :create_tag do |t|
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
+
+ trunk = File.join(PROJ.svn_root, PROJ.svn_trunk)
+ tag = "%s-%s" % [PROJ.name, PROJ.version]
+ tag = File.join(PROJ.svn_root, PROJ.svn_tags, tag)
+ msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
+
+ puts "Creating SVN tag '#{tag}'"
+ unless system "svn cp -m '#{msg}' #{trunk} #{tag}"
+ abort "Tag creation failed"
+ end
+ end
+
+end # namespace :svn
+
+task 'gem:release' => 'svn:create_tag'
+
+end # if PROJ.svn
+
+# EOF
Please sign in to comment.
Something went wrong with that request. Please try again.