echoe-4.6.5/0000755000004100000410000000000012247337443012652 5ustar www-datawww-dataechoe-4.6.5/Rakefile0000644000004100000410000000114312247337443014316 0ustar www-datawww-data($:.unshift File.expand_path(File.join( File.dirname(__FILE__), 'lib' ))).uniq! require 'echoe' Echoe.new('echoe') do |p| p.project = 'fauna' p.author = 'Evan Weaver' p.summary = 'A Rubygems packaging tool that provides Rake tasks for documentation, extension compiling, testing, and deployment.' p.runtime_dependencies = ['rubyforge >=2.0.4', 'allison >=2.0.3', 'rdoc >=2.5.11', 'rake >=0.9.2'] p.development_dependencies = [] p.certificate_chain = "echoe.pem" p.require_signed p.retain_gemspec = true p.licenses = ["Academic Free License (AFL) v. 3.0"] p.rubygems_version = ">=1.8.4" end echoe-4.6.5/CHANGELOG0000644000004100000410000001072012247337443014064 0ustar www-datawww-datav4.6.5. Gem public cert. v4.6.4. Compatibility hack for pre-Darkfish RDoc templates. v4.6.3. Better JRuby compatibility. v4.6.2. Require 'psych' if you have it, to fix Rubygems bug. v4.6.1. Compatibility with Rake 0.9.2, which deprecated the API added in 0.9.0. v4.6.0. Compatibility with RubyGems 1.8.4 and Rake 0.9.0. Uncertain behavior on previous versions. v4.5.6. Add :prerelease task for user release checks. v4.5.5. Tag releases in git automatically (smulube). v4.5.2. Ruby 1.9.2 compatibility, except for publish_docs. Ugh. v4.5.1. Create all subfolders. v4.5. Default to Allison template. v4.4.1. Correct default url. v4.4. Use GitHub for default url and documentation hosting. v4.3.1. Don't stop if gemcutter's plugin cannot be loaded, don't define RSpec tasks if RSpec is not present (Flameeyes). Use Dir.tmpdir. v4.3. Don't use sudo if the GEM_HOME is local. Support prerelease gem versions. v4.2. Allow custom requirements (TylerRick); take advantage of .git_ignore (greatseth); only use -P MediumSecurity on install if it is the packaging machine. v4.1. Remove prompts until I can find a cursor library that's not GPL. Restore Rubyforge gem dependency, for the announce method. v4.0. Use gemcutter. Dump Rubyforge. v3.2. Sort manifest. v3.1.3. Removing Evan's keychain so GitHub can build the gem. Version bump to force GitHub to re-generate gem. v3.1.2. Small bugfix. Version bump to force GitHub to re-generate gem. v3.1.1. Remove Rake/contrib from the gem requirements and vendor it. Fix some load paths on Ruby 1.9. v3.1. Fix some bugs; become Ruby 1.9 compatible. v3.0.2. Support for alternative Rakefile naming. v3.0.1. Compatibility with Rubygems 1.3. v3. Compatibility with Rubyforge 1.0.0 and Rubygems 1.2. v2.7.13. Avoid Rubyforge 1.0.0 which seems broken. v2.7.12. Respect system EDITOR setting (osteele). v2.7.11. Include Platform module for abstracting RUBY_PLATFORM regex checks (luislavena). v2.7.10. Include RDoc options in generated gemspec (Rob McKinnon). v2.7.9. Fix redefine task helper for new Rake. v2.7.8. Better default test pattern. v2.7.7. Don't use sudo on win32/cygwin (Kevin Williams). v2.7.6. Better Echoe.silence behavior. v2.7.5. Fix bug when MultiRails isn't installed; remove "test" from platform targets. v2.7.4. Ensured teardown.rb just like setup.rb. Load multi_rails automatically if its available. ENV['VERBOSE'] obeyed for Echoe.silence. v2.7.3. Put some handy things in lib/echoe/extensions.rb; use Rake::TestTask instead of screwing around in the shell. Automatically run test/setup.rb before the test task, if it exists. v2.7.2. Don't try to verify the existence of the RDoc template. Fixes for the RCov task. v2.7.1. Rcov changed to a weak dependency for JRuby. v2.7.0. Add coverage task; change default test pattern; Rubygems 0.9.4.5 compatibility and requirement. Cross-packaging hacks for same. Add rubygems_version accessor. Manifest alerts about removed files now as well as added. Allow targeting of every platform on RubyGems 0.9.5. v2.6.4. Fix related issue. v2.6.3. Fix issue with shared object paths in :compile task. v2.6.2. Fix executable pattern bug; use a better default clean pattern. v2.6. Unify pattern handling; changelog accessor, version accessor, expand paths of keys and certificates; support verbose (Rails-style) changelogs. v2.5. Add some extension building tasks; adjust clean behavior; rdoc inclusions definitely depend on Manifest now; ruby_version accessor; ignore_pattern for skipping files during the manifest build; bugfixes. v2.4.1. Manifest doesn't require itself (willcodeforwork). v2.4. Sign gems automatically if ENV['GEM_PRIVATE_KEY'] is present; add certificate_chain and private_key accessors. v2.3. Work around metadependencies issue by including gemspecs instead of Rakefiles by default; include_gemspec and include_rakefile accessors. v2.2. Need_gem option; announce task. v2.1. Adjust default RDoc include pattern; extra_deps now dependencies; rubyforge_name now project; support install messages; manifest instead of build_manifest. v2. Support documentation hosts other than rubyforge; auto-load CHANGELOG contents; remove bin/echoe which doesn't work anyway. Incompatible changes. v1.4. Auto-detect readme file; make rdoc default pattern compatible with manifest generator; fix publish_docs task. v1.3. Avoid rubyforge gem multi-activation conflict. v1.2. build_manifest Rake task. v1.1. Sane error messages on releasing new or duplicate gems; allow Manifest to not end in .txt. v1.0. Fork from Hoe. echoe-4.6.5/vendor/0000755000004100000410000000000012247337443014147 5ustar www-datawww-dataechoe-4.6.5/vendor/rake/0000755000004100000410000000000012247337443015071 5ustar www-datawww-dataechoe-4.6.5/vendor/rake/MIT-LICENSE0000644000004100000410000000204612247337443016527 0ustar www-datawww-dataCopyright (c) 2003, 2004 Jim Weirich 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. echoe-4.6.5/vendor/rake/lib/0000755000004100000410000000000012247337443015637 5ustar www-datawww-dataechoe-4.6.5/vendor/rake/lib/rake/0000755000004100000410000000000012247337443016561 5ustar www-datawww-dataechoe-4.6.5/vendor/rake/lib/rake/contrib/0000755000004100000410000000000012247337443020221 5ustar www-datawww-dataechoe-4.6.5/vendor/rake/lib/rake/contrib/sshpublisher.rb0000644000004100000410000000213712247337443023264 0ustar www-datawww-datamodule Rake # Publish an entire directory to an existing remote directory using # SSH. class SshDirPublisher def initialize(host, remote_dir, local_dir) @host = host @remote_dir = remote_dir @local_dir = local_dir end def upload sh %{scp -rq #{@local_dir}/* #{@host}:#{@remote_dir}} end end # Publish an entire directory to a fresh remote directory using SSH. class SshFreshDirPublisher < SshDirPublisher def upload sh %{ssh #{@host} rm -rf #{@remote_dir}} rescue nil sh %{ssh #{@host} mkdir #{@remote_dir}} super end end # Publish a list of files to an existing remote directory. class SshFilePublisher # Create a publisher using the give host information. def initialize(host, remote_dir, local_dir, *files) @host = host @remote_dir = remote_dir @local_dir = local_dir @files = files end # Upload the local directory to the remote directory. def upload @files.each do |fn| sh %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}} end end end end echoe-4.6.5/vendor/rake/lib/rake/contrib/rubyforgepublisher.rb0000644000004100000410000000051112247337443024465 0ustar www-datawww-data#!/usr/bin/env ruby require 'rake/contrib/sshpublisher' module Rake class RubyForgePublisher < SshDirPublisher attr_reader :project, :proj_id, :user def initialize(projname, user) super( "#{user}@rubyforge.org", "/var/www/gforge-projects/#{projname}", "html") end end end echoe-4.6.5/vendor/rake/lib/rake/contrib/sys.rb0000644000004100000410000001360612247337443021372 0ustar www-datawww-data#!/usr/bin/env ruby #-- # Copyright (c) 2003, 2004 Jim Weirich # # 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. #++ # begin require 'ftools' rescue LoadError end require 'rbconfig' ###################################################################### # Sys provides a number of file manipulation tools for the convenience # of writing Rakefiles. All commands in this module will announce # their activity on standard output if the $verbose flag is set # ($verbose = true is the default). You can control this by globally # setting $verbose or by using the +verbose+ and +quiet+ methods. # # Sys has been deprecated in favor of the FileUtils module available # in Ruby 1.8. # module Sys RUBY = Config::CONFIG['ruby_install_name'] # Install all the files matching +wildcard+ into the +dest_dir+ # directory. The permission mode is set to +mode+. def install(wildcard, dest_dir, mode) Dir[wildcard].each do |fn| File.install(fn, dest_dir, mode, $verbose) end end # Run the system command +cmd+. def run(cmd) log cmd system(cmd) or fail "Command Failed: [#{cmd}]" end # Run a Ruby interpreter with the given arguments. def ruby(*args) run "#{RUBY} #{args.join(' ')}" end # Copy a single file from +file_name+ to +dest_file+. def copy(file_name, dest_file) log "Copying file #{file_name} to #{dest_file}" File.copy(file_name, dest_file) end # Copy all files matching +wildcard+ into the directory +dest_dir+. def copy_files(wildcard, dest_dir) for_matching_files(wildcard, dest_dir) { |from, to| copy(from, to) } end # Link +file_name+ to +dest_file+. def link(file_name, dest_file) log "Linking file #{file_name} to #{dest_file}" File.link(file_name, dest_file) end # Link all files matching +wildcard+ into the directory +dest_dir+. def link_files(wildcard, dest_dir) for_matching_files(wildcard, dest_dir) { |from, to| link(from, to) } end # Symlink +file_name+ to +dest_file+. def symlink(file_name, dest_file) log "Symlinking file #{file_name} to #{dest_file}" File.symlink(file_name, dest_file) end # Symlink all files matching +wildcard+ into the directory +dest_dir+. def symlink_files(wildcard, dest_dir) for_matching_files(wildcard, dest_dir) { |from, to| link(from, to) } end # Remove all files matching +wildcard+. If a matching file is a # directory, it must be empty to be removed. used +delete_all+ to # recursively delete directories. def delete(*wildcards) wildcards.each do |wildcard| Dir[wildcard].each do |fn| if File.directory?(fn) log "Deleting directory #{fn}" Dir.delete(fn) else log "Deleting file #{fn}" File.delete(fn) end end end end # Recursively delete all files and directories matching +wildcard+. def delete_all(*wildcards) wildcards.each do |wildcard| Dir[wildcard].each do |fn| next if ! File.exist?(fn) if File.directory?(fn) Dir["#{fn}/*"].each do |subfn| next if subfn=='.' || subfn=='..' delete_all(subfn) end log "Deleting directory #{fn}" Dir.delete(fn) else log "Deleting file #{fn}" File.delete(fn) end end end end # Make the directories given in +dirs+. def makedirs(*dirs) dirs.each do |fn| log "Making directory #{fn}" File.makedirs(fn) end end # Make +dir+ the current working directory for the duration of # executing the given block. def indir(dir) olddir = Dir.pwd Dir.chdir(dir) yield ensure Dir.chdir(olddir) end # Split a file path into individual directory names. # # For example: # split_all("a/b/c") => ['a', 'b', 'c'] def split_all(path) head, tail = File.split(path) return [tail] if head == '.' || tail == '/' return [head, tail] if head == '/' return split_all(head) + [tail] end # Write a message to standard out if $verbose is enabled. def log(msg) print " " if $trace && $verbose puts msg if $verbose end # Perform a block with $verbose disabled. def quiet(&block) with_verbose(false, &block) end # Perform a block with $verbose enabled. def verbose(&block) with_verbose(true, &block) end # Perform a block with each file matching a set of wildcards. def for_files(*wildcards) wildcards.each do |wildcard| Dir[wildcard].each do |fn| yield(fn) end end end extend(self) private # ---------------------------------------------------------- def for_matching_files(wildcard, dest_dir) Dir[wildcard].each do |fn| dest_file = File.join(dest_dir, fn) parent = File.dirname(dest_file) makedirs(parent) if ! File.directory?(parent) yield(fn, dest_file) end end def with_verbose(v) oldverbose = $verbose $verbose = v yield ensure $verbose = oldverbose end end echoe-4.6.5/vendor/rake/lib/rake/contrib/compositepublisher.rb0000644000004100000410000000057512247337443024475 0ustar www-datawww-data#!/usr/bin/env ruby module Rake # Manage several publishers as a single entity. class CompositePublisher def initialize @publishers = [] end # Add a publisher to the composite. def add(pub) @publishers << pub end # Upload all the individual publishers. def upload @publishers.each { |p| p.upload } end end end echoe-4.6.5/vendor/rake/lib/rake/contrib/publisher.rb0000644000004100000410000000373412247337443022552 0ustar www-datawww-data#!/usr/bin/env ruby # Copyright 2003, 2004 by Jim Weirich (jim@weirichhouse.org) # All rights reserved. # Permission is granted for use, copying, modification, distribution, # and distribution of modified versions of this work as long as the # above copyright notice is included. # Configuration information about an upload host system. # * name :: Name of host system. # * webdir :: Base directory for the web information for the # application. The application name (APP) is appended to # this directory before using. # * pkgdir :: Directory on the host system where packages can be # placed. HostInfo = Struct.new(:name, :webdir, :pkgdir) # Manage several publishers as a single entity. class CompositePublisher def initialize @publishers = [] end # Add a publisher to the composite. def add(pub) @publishers << pub end # Upload all the individual publishers. def upload @publishers.each { |p| p.upload } end end # Publish an entire directory to an existing remote directory using # SSH. class SshDirPublisher def initialize(host, remote_dir, local_dir) @host = host @remote_dir = remote_dir @local_dir = local_dir end def upload run %{scp -rq #{@local_dir}/* #{@host}:#{@remote_dir}} end end # Publish an entire directory to a fresh remote directory using SSH. class SshFreshDirPublisher < SshDirPublisher def upload run %{ssh #{@host} rm -rf #{@remote_dir}} rescue nil run %{ssh #{@host} mkdir #{@remote_dir}} super end end # Publish a list of files to an existing remote directory. class SshFilePublisher # Create a publisher using the give host information. def initialize(host, remote_dir, local_dir, *files) @host = host @remote_dir = remote_dir @local_dir = local_dir @files = files end # Upload the local directory to the remote directory. def upload @files.each do |fn| run %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}} end end end echoe-4.6.5/vendor/rake/lib/rake/contrib/ftptools.rb0000644000004100000410000000732512247337443022427 0ustar www-datawww-data#!/usr/bin/env ruby # = Tools for FTP uploading. # # This file is still under development and is not released for general # use. require 'date' require 'net/ftp' module Rake # :nodoc: #################################################################### # Note: Not released for general use. class FtpFile attr_reader :name, :size, :owner, :group, :time def self.date @date_class ||= Date end def self.time @time_class ||= Time end def initialize(path, entry) @path = path @mode, line, @owner, @group, size, d1, d2, d3, @name = entry.split(' ') @size = size.to_i @time = determine_time(d1, d2, d3) end def path File.join(@path, @name) end def directory? @mode[0] == ?d end def mode parse_mode(@mode) end def symlink? @mode[0] == ?l end private # -------------------------------------------------------- def parse_mode(m) result = 0 (1..9).each do |i| result = 2*result + ((m[i]==?-) ? 0 : 1) end result end def determine_time(d1, d2, d3) now = self.class.time.now if /:/ =~ d3 h, m = d3.split(':') result = Time.parse("#{d1} #{d2} #{now.year} #{d3}") if result > now result = Time.parse("#{d1} #{d2} #{now.year-1} #{d3}") end else result = Time.parse("#{d1} #{d2} #{d3}") end result # elements = ParseDate.parsedate("#{d1} #{d2} #{d3}") # if elements[0].nil? # today = self.class.date.today # if elements[1] > today.month # elements[0] = today.year - 1 # else # elements[0] = today.year # end # end # elements = elements.collect { |el| el.nil? ? 0 : el } # Time.mktime(*elements[0,7]) end end #################################################################### # Manage the uploading of files to an FTP account. class FtpUploader # Log uploads to standard output when true. attr_accessor :verbose class << FtpUploader # Create an uploader and pass it to the given block as +up+. # When the block is complete, close the uploader. def connect(path, host, account, password) up = self.new(path, host, account, password) begin yield(up) ensure up.close end end end # Create an FTP uploader targetting the directory +path+ on +host+ # using the given account and password. +path+ will be the root # path of the uploader. def initialize(path, host, account, password) @created = Hash.new @path = path @ftp = Net::FTP.new(host, account, password) makedirs(@path) @ftp.chdir(@path) end # Create the directory +path+ in the uploader root path. def makedirs(path) route = [] File.split(path).each do |dir| route << dir current_dir = File.join(route) if @created[current_dir].nil? @created[current_dir] = true puts "Creating Directory #{current_dir}" if @verbose @ftp.mkdir(current_dir) rescue nil end end end # Upload all files matching +wildcard+ to the uploader's root # path. def upload_files(wildcard) Dir[wildcard].each do |fn| upload(fn) end end # Close the uploader. def close @ftp.close end private # -------------------------------------------------------- # Upload a single file to the uploader's root path. def upload(file) puts "Uploading #{file}" if @verbose dir = File.dirname(file) makedirs(dir) @ftp.putbinaryfile(file, file) unless File.directory?(file) end end end echoe-4.6.5/MIT-LICENSE0000644000004100000410000000206412247337443014310 0ustar www-datawww-data Copyright (c) 2006 Ryan Davis, Zen Spider Software 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. echoe-4.6.5/data.tar.gz.sig0000444000004100000410000000040012247337443015463 0ustar www-datawww-datatwkw=a)-5RtU<'utu{^ciE\ԭ|F2p~_qQ!Y~'lHe>%,HaWÞ@< kEK@ CN š, LÏ PJkG Rrechoe-4.6.5/README.rdoc0000644000004100000410000000474312247337443014470 0ustar www-datawww-data Echoe A Rubygems packaging tool that provides Rake tasks for documentation, extension compiling, testing, and deployment. == License Copyright 2007-2011 Cloudburst, LLC. Licensed under the AFL 3. See the included LICENSE file. Portions copyright 2006 Ryan Davis/Zen Spider Software and used with permission. See the included MIT-LICENSE file. == Features * simple configuration * comprehensive gem deployment * cross-packaging * signed gem support * automatic changeset parsing * documentation upload to any host = Usage == Installation Install the gem: sudo gem install echoe If you haven't already, make sure rubygems.org is configured locally and your password is correctly set. == Project configuration Organize your gem according to the usual structure: lib/ README LICENSE CHANGELOG Rakefile You can add the bin/ or ext/ folders if you have executables or extensions, respectively. Your CHANGELOG should be formatted as follows (including newlines): v2.1. newest change v2. older change v1.9. oldest change This way Echoe can parse the latest version and changeset message automatically. Your Rakefile needs the following minimal contents: require 'echoe' Echoe.new('gem_name') More advanced configuration is described in the Echoe class. == Deploying your gem To deploy the gem and documentation: rake manifest rake release rake publish_docs Once you've built your manifest, you only need to rebuild it if you add or remove files from the package structure. = Extras == All Rake tasks The following tasks are made available to your gem. Packaging: * manifest - Build a manifest list. Shows added and removed files. * docs - Build the documentation. * package - Build all the packages. Testing: * test - Run the test suite. * coverage - Generate a coverage report. * compile - Compile C extensions, if available. * clean - Clean up generated documentation, packaging, and build files. * install - Install the gem locally. * uninstall - Uninstall the gem. Upload: * publish_docs - Publish documentation to the web. * release - Package and upload the latest release to rubygems.org. == Reporting problems The support forum is here[http://github.com/fauna/echoe/issues]. Patches and contributions are very welcome. Please note that contributors are required to assign copyright for their additions to Cloudburst, LLC. echoe-4.6.5/lib/0000755000004100000410000000000012247337443013420 5ustar www-datawww-dataechoe-4.6.5/lib/echoe/0000755000004100000410000000000012247337443014503 5ustar www-datawww-dataechoe-4.6.5/lib/echoe/extensions.rb0000644000004100000410000000253412247337443017233 0ustar www-datawww-data class String #:nodoc: def uncapitalize #:nodoc: "#{self[0..0].downcase}#{self[1..-1]}" end def any? size > 0 end end class ::Rake::SshDirPublisher # :nodoc: attr_reader :host, :remote_dir, :local_dir end class Echoe def self.silence if !ENV['VERBOSE'] stdout, stderr = $stdout.clone, $stderr.clone $stdout.reopen(File.new("#{Dir.tmpdir}/stdout.echoe", 'w')) $stderr.reopen(File.new("#{Dir.tmpdir}/stderr.echoe", 'w')) begin yield ensure $stdout.reopen(stdout) $stderr.reopen(stderr) end else yield end end end # Redefine instead of chain a Rake task # http://www.bigbold.com/snippets/posts/show/2032 module Rake module TaskManager def redefine_task(task_class, *args, &block) task_name, deps = resolve_args(args) task_name = task_class.scope_name(@scope, task_name) deps = [deps] unless deps.respond_to?(:to_ary) deps = deps.collect {|d| d.to_s } task = @tasks[task_name.to_s] = task_class.new(task_name, self) task.application = self task.send(:add_comment, @last_comment) @last_comment = nil task.enhance(deps, &block) task end end class Task class << self def redefine_task(*args, &block) Rake.application.redefine_task(self, *args, &block) end end end end echoe-4.6.5/lib/echoe/platform.rb0000644000004100000410000000114212247337443016652 0ustar www-datawww-data ### Platform check regexes module Echoe::Platform def self.windows? @windows ||= RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/ !@windows.nil? end def self.gcc? @gcc ||= RUBY_PLATFORM =~ /mingw/ !@gcc.nil? end def self.msvc? @msvc ||= RUBY_PLATFORM =~ /mswin/ !@msvc.nil? end def self.java? @java ||= RUBY_PLATFORM =~ /java/ !@java.nil? end def self.suffix Gem.default_exec_format =~ /%s(.*)/ @suffix ||= $1 end def self.rake windows? ? "rake#{suffix}.bat" : "rake#{suffix}" end def self.make msvc? ? 'nmake' : 'make' end end echoe-4.6.5/lib/echoe/rubygems.rb0000644000004100000410000000207212247337443016666 0ustar www-datawww-data### Overrides for cross packaging, which Rubygems 0.9.5 doesn't do module Gem class Specification alias :old_validate :validate PLATFORM_CROSS_TARGETS = ["aix", "cygwin", "darwin", "freebsd", "hpux", "java", "linux", "mingw", "mswin", "netbsdelf", "openbsd", "solaris", "_platform", "jruby"] def validate begin old_validate rescue Gem::InvalidSpecificationException if platform =~ /(#{PLATFORM_CROSS_TARGETS.join("|")})/i true else raise Gem::InvalidSpecificationException, "Unknown package target \"#{platform}\"." end end end end end ### Some runtime Echoe hacks $platform = "ruby" # or Gem::PLATFORM::RUBY maybe def reset_target target #:nodoc: $platform = target Object.send(:remove_const, "RUBY_PLATFORM") Object.send(:const_set, "RUBY_PLATFORM", target) end if target = ARGV.detect do |arg| # Hack to get the platform set before the Rakefile evaluates Gem::Specification::PLATFORM_CROSS_TARGETS.include? arg end reset_target target end echoe-4.6.5/lib/echoe.rb0000644000004100000410000006723312247337443015043 0ustar www-datawww-data $HERE = File.dirname(__FILE__) require 'rake' require 'rake/clean' require "#{$HERE}/../vendor/rake/lib/rake/contrib/compositepublisher" require "#{$HERE}/../vendor/rake/lib/rake/contrib/sshpublisher" require 'rubygems/package_task' require 'rdoc/task' require 'rake/testtask' begin; require 'spec/rake/spectask'; rescue LoadError; end require 'rbconfig' require 'open-uri' require 'tmpdir' require "#{$HERE}/echoe/extensions" begin; require 'psych'; rescue LoadError; end require 'rubygems' require 'rubyforge' Echoe.silence { require 'rubygems/specification' } require "#{$HERE}/echoe/rubygems" begin; require 'rcov/rcovtask'; rescue LoadError; end begin; require 'load_multi_rails_rake_tasks'; rescue LoadError; end =begin rdoc Echoe includes some optional accessors for more advanced gem configuration. For example, a simple Rakefile might look like this: require 'echoe' Echoe.new("uncapitalizer") do |p| p.author = "Evan Weaver" p.summary = "A library that uncapitalizes strings." p.runtime_dependencies = ["string_tools >=1.4.0"] end See below for the full list. == Signing gems Echoe supports signing gems. First, create yourself a public and private key: gem cert --build you@yourmail.com Move them somewhere secret, and add the following environment variables in your .bash_profile or similar: export GEM_PRIVATE_KEY='/secret/path/to/gem-private_key.pem' export GEM_CERTIFICATE_CHAIN='/secret/path/to/gem-public_cert.pem' Make sure your environment is up-to-date: source ~/.bash_profile Upload your public_cert.pem file to your website or Rubyforge project, and tell your users to add that certificate to their system via: gem cert --add /path/to/public_cert.pem Finally, package and release your project as normal. Now users can install your gem via: sudo gem install gemname -P HighSecurity Note that you can also set the key and certificate locations in the Rakefile itself. Finally, you can add p.require_signed = true to your Rakefile so that you don't accidentally release an unsigned gem if your key is missing. == Metadependencies Echoe does not force packages to depend on Echoe itself. Instead, it generates a gemspec from your Rakefile and includes that. Downstream repackagers can use the gemspec as-is to build new versions of your gem even without Echoe. == Cross-packaging Echoe supports platform Rake targets to allow you to cross-package your gems. Just write the spec assuming RUBY_PLATFORM will be what you need it to be for each architecture, and then invoke Rake with the platform name when you're cross-packaging. For example, on JRuby, rake package will build a generic -ruby type gem. But if you want to include a Java-specific extension, you can do one of two things. You can package from within JRuby by checking if RUBY_PLATFORM =~ /java/ and setting p.platform = jruby, or you can run rake java package, which will set RUBY_PLATFORM and p.platform for you. This way you can run rake java package, rake aix install, or whatever task you need and Echoe will behave just like you're packaging from within the target platform. == Test environment setup and teardown For some applications, you may need to setup and teardown environment state for the entire test suite. This is especially common for integration tests that may need to spawn an external daemon. To support this, you can add a file tests/setup.rb and it will be silently executed before the entire suite runs. Add a similar file tests/teardown.rb in your app to be executed at the end of the entire run. Note; these files will only get executed if you run the tests via rake. Also, you can set the environment variable VERBOSE=1 to not hide the setup/teardown output. == Accessor options Descriptive options: * author - Your name. * email - Your email address. * description - A more detailed description of the library. * summary - A shorter description of the library. * url - A url for the library. Defaults to generated RDoc on GitHub pages for the project.f * install_message - A message to display after the gem is installed. Versioning options: * version - A string for the version number. Parsed from CHANGELOG otherwise. * changes - A string describing the most recent changes. Parsed from CHANGELOG otherwise. Common packaging options: * runtime_dependencies - An array of runtime dependencies for this gem. For example, ['mongrel', 'activesupport >= 2.0.2']. * development_dependencies - An array of development dependencies for this gem. For example, ['rake >=0.7.1']. * extension_pattern - A filename array, glob array, or regex for extension files that need to be run at install time. Defaults to "ext/**/extconf.rb". Testing options: * clean_pattern - A filename array, glob array, or regex for files that should be removed when rake clean is run. * test_pattern - A filename array, glob array, or regex for test runners. Overridden by "test/test_all.rb", if it exists. * spec_pattern - A filename array, glob array, or regex for test runners. * rcov_options - Any extra flags to pass to RCov when coverage reports are run. Uncommon packaging options: * platform - What platform this gem is for. * manifest_name - The name of the manifest file. Defaults to Manifest. * need_gem - Whether to generate a gem package. Defaults to true. * need_tar_gz - Whether to generate a .tar.gz package. Defaults to true. * need_tgz - Whether to generate a .tgz package. Defaults to false. * need_zip - Whether to generate a .zip package. Defaults to false. * include_rakefile - Include the Rakefile directly within the package. Defaults to true. * include_gemspec - Include the generated gemspec file within the package. Defaults to true. * ruby_version - Version string for which Ruby to require (for example, '>= 1.8.4'. * eval - Accepts a proc to be evaluated in the context of the Gem::Specification object. This allows you to set more unusual gemspec options. * ignore_pattern - A filename array, glob array, or regex for pathnames that should be ignored when building the manifest. * require_paths - Non-standard requirement paths to add to the gem definition. * executable_pattern - A filename array, glob array, or regex for files that should be installed as wrapped executables. Security options: * private_key - The path to your gem private key. Defaults to ENV['GEM_PRIVATE_KEY'], if available. This accessor is not published in the resulting gemspec. * certificate_chain - An array representing your certificate authorization chain. If no one else has signed your certificate, just set it to your own cert. Defaults to ENV['GEM_CERTIFICATE_CHAIN'], if available. This accessor is not published in the resulting gemspec. * require_signed - Force Echoe to refuse to package your gem if it's not properly signed. Default false. Publishing options: * project - The name of the Rubyforge project. Defaults to the name of the gem. * docs_host - A host and filesystem path to publish the documentation to. Defaults to GitHub pages for the project. SSH upload to an accessible static file host also works. Documentation options: * rdoc_pattern - A filename array, glob array, or regex for filenames that should be passed to RDoc. * rdoc_template - A path to an RDoc template. Defaults to the generic template. =end class Echoe include Rake::DSL # user-configurable attr_accessor :author, :changes, :clean_pattern, :description, :email, :runtime_dependencies, :development_dependencies, :need_tgz, :need_tar_gz, :need_gem, :need_zip, :rdoc_pattern, :project, :summary, :test_pattern, :spec_pattern, :url, :version, :docs_host, :rdoc_template, :manifest_name, :install_message, :extension_pattern, :private_key, :certificate_chain, :require_signed, :ruby_version, :platform, :ignore_pattern, :executable_pattern, :require_paths, :changelog, :rcov_options, :gemspec_format, :licenses # best left alone attr_accessor :name, :lib_files, :test_files, :bin_files, :spec, :rdoc_options, :include_gemspec, :include_rakefile, :gemspec_name, :retain_gemspec, :rakefile_name, :eval, :files, :changelog_patterns, :rubygems_version, :use_sudo, :gem_bin # legacy attr_accessor :extra_deps, :rdoc_files, :extensions, :dependencies def initialize(name, _version = nil) # Defaults self.name = name self.project = name.downcase self.changelog = "CHANGELOG" self.author = "" self.licenses = [] self.email = "" self.clean_pattern = ["pkg", "doc", 'build/*', '**/coverage', '**/*.o', '**/*.so', '**/*.a', '**/*.log', "{ext,lib}/*.{bundle,so,obj,pdb,lib,def,exp}", "ext/Makefile", "{ext,lib}/**/*.{bundle,so,obj,pdb,lib,def,exp}", "ext/**/Makefile", "pkg", "*.gem", ".config"] self.test_pattern = File.exist?("test/test_all.rb") ? "test/test_all.rb" : ['test/**/test_*.rb', 'test/**/*_test.rb'] self.spec_pattern = "spec/**/*_spec.rb" self.ignore_pattern = /^(pkg|doc)|(\.svn|CVS|\.bzr|\.DS|\.git)$/ self.changelog_patterns = { :version => [ /^\s*v([\d\w\.]+)(\.|\s|$)/, /\s*\*\s*([\d\w\.]+)\s*\*\s*$/ ], :changes => [ /^\s*v([\d\.]+\. .*)/, /\*\s*[\d\.]+\s*\*\s*(.*)\*\s*[\d\.]+\s*\*$/m ] } self.description = "" self.summary = "" self.install_message = nil self.executable_pattern = /^bin\// self.require_paths = nil self.use_sudo = !(Platform.windows? or ENV['GEM_HOME'].to_s.include?(ENV['USER'].to_s)) self.gem_bin = "gem#{Platform.suffix}" self.rcov_options = [] self.rdoc_pattern = /^(lib|bin|tasks|ext)|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/ self.gemspec_format = :ruby title = (name.downcase == name ? name.capitalize : name) self.rdoc_options = ['--line-numbers', '--title', title] readme = Dir['*'].detect { |filename| filename =~ /^readme/i } self.rdoc_options += ['--main', readme] if readme self.runtime_dependencies = [] self.development_dependencies = [] # These appear to not work at all self.manifest_name = "Manifest" self.extension_pattern = ["ext/**/extconf.rb", "ext/extconf.rb"] self.private_key = ENV['GEM_PRIVATE_KEY'] self.require_signed = false self.certificate_chain = ENV['GEM_CERTIFICATE_CHAIN'].to_s.split(/\,\s*/).compact self.need_gem = true self.need_tar_gz = true self.need_tgz = false self.need_zip = false self.platform = $platform self.include_rakefile = true self.include_gemspec = true self.gemspec_name = "#{name}.gemspec" self.retain_gemspec = false self.rakefile_name = "Rakefile" self.rubygems_version = ">= 1.2" yield self if block_given? self.docs_host ||= "git@github.com:#{self.project}/#{self.project}.github.com" if self.docs_host =~ /git@github.com/ self.url ||= "http://#{self.project}.github.com/#{self.project}/#{(self.name + '/') if project != name}" end # legacy compatibility self.runtime_dependencies = dependencies if dependencies and runtime_dependencies.empty? self.runtime_dependencies = extra_deps if extra_deps and runtime_dependencies.empty? self.rdoc_pattern = rdoc_files if rdoc_files self.extension_pattern = extensions if extensions # read manifest begin self.files = File.readlines(manifest_name).map { |x| x.strip } + [(gemspec_name if include_gemspec)] + [(rakefile_name if include_rakefile)] self.files = files.compact.uniq rescue Errno::ENOENT unless ARGV.include? "manifest" puts "Missing manifest. You can build one with 'rake manifest'." exit 1 else self.files = [] end end # snag version and changeset self.version ||= _version unless version if File.exist? changelog parsed = Array(changelog_patterns[:version]).map do |pattern| open(changelog) do |log| log.read[pattern, 1] end end.compact.first raise "Could not parse version from #{changelog}" unless parsed self.version = parsed.chomp(".").strip else raise "No #{changelog} found, and no version supplied in Rakefile." end end unless self.changes self.changes = if File.exist? changelog Array(changelog_patterns[:changes]).map do |pattern| open(changelog) do |log| log.read[pattern, 1] end end.compact.first or "" else "" end end # set some post-defaults self.certificate_chain = Array(certificate_chain).map {|file| File.expand_path(file)} self.private_key = File.expand_path(private_key) if private_key self.description = summary if description.empty? self.summary = description if summary.empty? self.clean_pattern = apply_pattern(clean_pattern) self.extension_pattern = apply_pattern(extension_pattern, files) self.ignore_pattern = apply_pattern(ignore_pattern) honor_gitignore! if File.exist?(".git") self.rdoc_pattern = apply_pattern(rdoc_pattern, files) - [manifest_name] self.executable_pattern = apply_pattern(executable_pattern, files) self.test_pattern = apply_pattern(test_pattern) self.spec_pattern = apply_pattern(spec_pattern) define_tasks end private def honor_gitignore! self.ignore_pattern += \ Dir["**/.gitignore"].inject([]) do |pattern,gitignore| pattern.concat \ File.readlines(gitignore). map { |line| line.strip }. reject { |line| "" == line }. map { |glob| d = File.dirname(gitignore) d == "." ? glob : File.join(d, glob) } end.flatten.uniq end def apply_pattern(pattern, files = nil) files ||= Dir['**/**'] case pattern when String, Array files & (Array(pattern).map do |p| Dir.glob(p) end.flatten) when Regexp files.select do |file| file =~ pattern end when FileList pattern.each do |ignorefile| ignorefiles = File.open(ignorefile).to_a.map(&:chomp) files = files.select do |file| ignorefiles.map { |i| File.fnmatch(i, file) }.include?(true) end end files else [] end end def define_tasks ### Packaging and Installing self.spec = Gem::Specification.new do |s| s.name = name s.version = version # s.specification_version = 3 s.summary = summary s.author = Array(author).join(", ") s.licenses = Array(licenses) s.email = email s.homepage = url s.rubyforge_project = project if project s.post_install_message = install_message if install_message s.description = description s.required_ruby_version = ruby_version s.required_rubygems_version = rubygems_version if rubygems_version s.platform = platform s.rdoc_options = rdoc_options s.extra_rdoc_files = rdoc_pattern if private_key and File.exist? private_key s.signing_key = private_key s.cert_chain = certificate_chain end runtime_dependencies.each do |dep| dep = dep.split(" ") if dep.is_a? String s.add_runtime_dependency(*dep) end development_dependencies.each do |dep| dep = dep.split(" ") if dep.is_a? String s.add_development_dependency(*dep) end s.files = files s.bindir = if executable_pattern.any? executable_pattern[0].split("/")[0] else "bin" end s.executables = executable_pattern.map do |file| file[(s.bindir.length + 1)..-1] end dirs = Dir['{lib,ext}'] s.extensions = extension_pattern if extension_pattern.any? if require_paths s.require_paths = require_paths else s.require_paths = dirs unless dirs.empty? end if File.exist? "test/test_all.rb" s.test_file = "test/test_all.rb" else s.test_files = test_pattern end if eval s.instance_eval &eval end end self.lib_files = spec.files.grep(/^lib/) self.bin_files = spec.files.grep(/^bin/) self.test_files = spec.files.grep(/^test/) Gem::PackageTask.new(spec) do |pkg| pkg.need_tar = @need_tgz pkg.need_tar_gz = @need_tar_gz pkg.need_zip = @need_zip end desc "Display Echoe's knowledge of your system" task :details do (self.instance_variables.sort - ['@spec']).each do |var| puts "#{var}: #{instance_variable_get(var).inspect}" end end desc "Builds the .gemspec" task :build_gemspec do # Construct the gemspec file, if needed. if include_gemspec File.open(gemspec_name, 'w') do |f| case gemspec_format when :yaml spec.to_yaml.split("\n").each do |line| # Don't publish any information about the private key or certificate chain f.puts line unless line =~ /signing_key|cert_chain|\.pem/ end when :ruby f.puts spec.to_ruby else raise "Unknown gemspec format #{gemspec_format.inspect}. Supported formats: :ruby and :yaml" end end end puts "Gemspec generated" end # Chain it to the gemspec task prerequisite task gemspec_name.to_sym => [:build_gemspec] desc "Generates manifest & gemspec in one go" task :build => [:manifest, :build_gemspec] task :package do # Chain some cleanup tasks to the default :package task. # Remove the gemfile if it wasn't actually requested. unless @need_gem puts " Gem file not requested. Removed." system "rm pkg/*.gem" end # Remove the generated gemspec once the packaging is done, to discourage people from modifying it by hand. if include_gemspec and File.exist? gemspec_name and not retain_gemspec File.delete gemspec_name end # Test signing status if private_key and File.exist? private_key puts "Signing gem." else raise "Key required, but not found. Maybe you forget to set ENV['GEM_PRIVATE_KEY']?" if require_signed puts "Private key not found; gem will not be signed." end puts "Targeting \"#{platform}\" platform." end desc 'Install the gem' task :install => [:clean, :package, :uninstall] do system "#{'sudo' if use_sudo} #{gem_bin} install pkg/*.gem --no-update-sources #{'-P MediumSecurity' if private_key and File.exist?(private_key)}" end namespace :install do desc 'Install the gem including development dependencies' task :development => [:clean, :package, :uninstall] do system "#{'sudo' if use_sudo} #{gem_bin} install pkg/*.gem -P MediumSecurity --no-update-sources --development" end end desc 'Uninstall the gem' task :uninstall do system "#{'sudo' if use_sudo} #{gem_bin} uninstall #{name} -a -I -x" end desc 'Override this task to add prerelease checks' task :prerelease desc 'Package and upload the release to Gemcutter' task :release => [:prerelease, :clean, :package] do |t| git_branch = nil if (File.exist?(".git")) git_branch = `git branch --no-color | egrep '^\\*' | awk '{print $2}'`.chomp if (diff = `git diff origin/#{git_branch}`).any? puts "You need to commit and push your changes first." puts diff exit(1) end end tag = "#{name}-#{version}" pkg = "pkg/#{tag}" pkg_gem = pkg + ".gem" pkg_tar = pkg + ".tgz" pkg_tar_gz = pkg + ".tar.gz" pkg_zip = pkg + ".zip" puts "Releasing #{name} v. #{version} to Gemcutter." if system("gem push #{pkg_gem.inspect}") if git_branch if system("git tag #{tag} && git push origin #{tag}") puts "Tagged release as #{tag}" end end end end ### Extension building task :lib do directory "lib" end if extension_pattern.any? desc "Compile the binary extension module" task :compile => [:lib] do extension_pattern.each do |extension| ext_dir = File.dirname(extension) lib_target = nil Dir.chdir(ext_dir) do ruby File.basename(extension) system(RUBY_PLATFORM =~ /win32/ ? 'nmake' : 'make') lib_target = if(target_prefix_line = open('Makefile').readlines.grep(/target_prefix = /).first) target_prefix_line.split('=').last.chomp("\n").strip else '' end end Dir["#{ext_dir}/*.#{Config::CONFIG['DLEXT']}"].each do |file| dir = "lib/#{lib_target}/".gsub('//', '/') mkdir_p dir cp file, dir end end end task :test => [:compile] if test_pattern.any? task :spec => :compile if spec_pattern.any? end ### Cross-platform targets Gem::Specification::PLATFORM_CROSS_TARGETS.each do |target| task target do reset_target target end end ### Documentation Rake::RDocTask.new(:docs) do |rd| # rd.main = Dir['*'].detect {|f| f =~ /^readme/i} rd.options += Array(rdoc_options) rd.rdoc_dir = 'doc' rd.rdoc_files.push(*rdoc_pattern) if rdoc_template rd.template = rdoc_template elsif ENV['RDOC_TEMPLATE'] rd.template = ENV['RDOC_TEMPLATE'] elsif `allison --path`.any? rd.template = `allison --path`.chomp + ".rb" end end task :doc => [:redocs] desc "Publish documentation to the internet." task :publish_docs => [:clean, :docs] do local_dir = File.expand_path('doc') if docs_host =~ /git@github.com/ Dir.mktmpdir do |dir| Dir.chdir(dir) do puts "Working in: #{dir}" cmd = "git clone #{docs_host}" puts "Cloning existing docs: #{cmd}" system(cmd) repository_name = docs_host.split("/").last Dir.chdir(repository_name) do project_dir_name = project Dir.mkdir(project_dir_name) rescue nil project_dir_name += "/#{name}" if project != name Dir.mkdir(project_dir_name) rescue nil cmd = "rm -rf '#{project_dir_name}' && mv #{local_dir} '#{project_dir_name}'" puts("Moving docs into checkout: #{cmd}") system(cmd) cmd = "git add '#{project_dir_name}' && git commit -a -m 'Update documentation for #{name} #{version}'" puts "Committing changes: #{cmd}" system(cmd) cmd = "git push" puts "Pushing changes: #{cmd}" system(cmd) end end end else # you may need ssh keys configured for this to work remote_dir_name = project remote_dir_name += "/#{name}" if project != name host, dir = docs_host.split(":") dir.chomp!("/") # XXX too dangerous? cmd = "ssh #{host} 'rm -rf #{dir}/#{remote_dir_name}'" puts "Deleting existing docs: #{cmd}" system(cmd) cmd = "scp -qr #{local_dir} #{host}:#{dir}/#{remote_dir_name}" puts "Uploading: #{cmd}" system(cmd) end end desc 'Generate a release announcement, edit it, and post it to Rubyforge.' task :announce do filename = "#{Dir.tmpdir}/#{name}_#{version}_announcement.txt" if File.exist?(filename) puts "Announcement file already exists. Please delete #{filename.inspect} first." exit(1) end File.open(filename, 'w') do |f| f.write "Subject: #{name.capitalize} #{version}\n\n" f.write "#{name.capitalize} has been updated to #{version}. #{name.capitalize} is #{summary.uncapitalize}\n\n" unless changes.empty? f.write "Changes in this version: " if changes.include?("\n") f.write(changes) else f.write(changes.sub(/^\s*[\w\d\.]+\s+/, '').uncapitalize) end f.write("\n\n") end f.write "More information is available at #{url} .\n\n" unless url.empty? end editor = ENV['EDITOR'] || 'nano' system("#{editor} #{filename}") or raise "Editor '#{editor}' failed to start" puts File.open(filename).read File.open(filename).readlines.detect { |line| line =~ /Subject: (.*)/ } subject = $1 or raise "Subject line seems to have disappeared" body = File.open(filename).readlines.reject { |line| line =~ /Subject: / }.join.gsub("\n\n\n", "\n\n") rf = RubyForge.new.configure rf.login rf.post_news(project, subject, body) puts "Published announcement to Rubyforge." File.delete filename end ### Clean desc 'Clean up auto-generated files' task :clean do puts "Cleaning" clean_pattern.each do |file| if File.exist?(file) puts "- #{file}" rm_rf file end end end ### Manifest desc "Build a Manifest list" task :manifest => [:clean] do puts "Building Manifest" old_files = files files = [] Dir['**/**'].sort.each do |file| next unless file next if ignore_pattern.include?(file) next if File.directory?(file) next if !include_rakefile and file == rakefile_name files << file end files << rakefile_name if include_rakefile files << manifest_name files.uniq! File.open(manifest_name, 'w').puts(files) (files | old_files).sort.each do |file| next if file == gemspec_name sign = " " if old_files.include?(file) and !files.include?(file) sign = "-" elsif files.include?(file) and !old_files.include?(file) sign = "+" end puts "#{sign} #{file}" end end task :build_manifest => :manifest ### Testing if test_pattern.any? Rake::TestTask.new(:test_inner) do |t| t.libs = ['lib', 'ext', 'bin', 'test'] t.test_files = test_pattern t.verbose = true end desc "Run the test suite" task :test do if File.exist? 'test/setup.rb' Echoe.silence do puts "Setting up test environment" system("ruby test/setup.rb") end end begin test = Rake::Task[:test_inner] if test.respond_to? :already_invoked= # Method provided by MultiRails test.already_invoked = false end test.invoke ensure if File.exist? 'test/teardown.rb' Echoe.silence do puts "Tearing down test environment" system("ruby test/teardown.rb") end end end end task :default => :test else task :default do puts "Nothing to do." end end if defined? Spec and spec_pattern.any? desc "Run the spec suite" Spec::Rake::SpecTask.new('spec') do |t| t.spec_files = spec_pattern end task :default => :spec end if defined? Rcov Rcov::RcovTask.new(:coverage) do |t| t.test_files = test_pattern t.rcov_opts << rcov_options if rcov_options t.verbose = true end task :rcov => :coverage end # Irb console desc 'Start an irb session and load the library.' task :console do exec "irb -I lib -r #{name}" end end end require "#{$HERE}/echoe/platform" echoe-4.6.5/metadata.yml0000644000004100000410000001157512247337443015166 0ustar www-datawww-data--- !ruby/object:Gem::Specification name: echoe version: !ruby/object:Gem::Version version: 4.6.5 platform: ruby authors: - Evan Weaver autorequire: bindir: bin cert_chain: - !binary |- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURhRENDQWxDZ0F3SUJB Z0lCQVRBTkJna3Foa2lHOXcwQkFRVUZBREE5TVEwd0N3WURWUVFEREFSbGRt RnUKTVJnd0ZnWUtDWkltaVpQeUxHUUJHUllJWTJ4dmRXUmlkWEl4RWpBUUJn b0praWFKay9Jc1pBRVpGZ0p6ZERBZQpGdzB4TXpFeE1EUXlNREkxTURWYUZ3 MHhOREV4TURReU1ESTFNRFZhTUQweERUQUxCZ05WQkFNTUJHVjJZVzR4CkdE QVdCZ29Ka2lhSmsvSXNaQUVaRmdoamJHOTFaR0oxY2pFU01CQUdDZ21TSm9t VDhpeGtBUmtXQW5OME1JSUIKSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4 QU1JSUJDZ0tDQVFFQXVHNHEySWRUdGxjNy9JSmtXUG5iT0FGdAp5c0tjM1ht TEhzamVTWFhTUGRRMW1iMmNEWHZ5RFM4VGt6anJnRG9KOTZSUjJ4cmg3YmZr SEFNSmhTVk1oc1BNCnJuWVM3ZkRzLy9YMWg2ZlJZQmpqaHFHZVFoQ0wxeHJT NS9JNHZLYjdBamdGbnVVYk1aL0gwK2ljMkljMnpUbloKanR0U1FaL1FPbFl5 Y3RyWW9UekFGZFB3TCtkT3hza095QW1BYnRWL3BWM293Y1hwQ2hSVC90cGhD N3U2OXNPaworSWpXc013ckJDYkVkai9KbWg0YTUyUW50QXdQV3g0S3J0MHpt OGVWMy9ValNPYkIzQlIxcFovaTVJc1NMUHMxCmx3TUE2eXdiZnhCVFA1OVhj Z0F5aGZWM3JSUVhiK3ZqcGY3T0x1T0NKT1VJTjhHRXdiNUhOakZvL1VWZGl3 SUQKQVFBQm8zTXdjVEFKQmdOVkhSTUVBakFBTUFzR0ExVWREd1FFQXdJRXNE QWRCZ05WSFE0RUZnUVViVENxeXlkbgowUm02bm5nZjE1S3RDRU1jMzdzd0d3 WURWUjBSQkJRd0VvRVFaWFpoYmtCamJHOTFaR0oxY2k1emREQWJCZ05WCkhS SUVGREFTZ1JCbGRtRnVRR05zYjNWa1luVnlMbk4wTUEwR0NTcUdTSWIzRFFF QkJRVUFBNElCQVFCZ2dHR2IKMEFveUYwUW9memtQSW11aE4xVUY2ZUcvUmRZ T0hxaVVvdnVSTi85SWJseUtBYVpBSWwxbUlzcGZDYXY4RVZ3bwpTQzZ2ejRP YUlWcFM3UWRJMDRvTE5IeGhtQzZDNVRUQk9OdGRkRGw5M00rOXVXVmlwRDV1 VlBrdGNIV0crYktuCjJMMWxVeWtRWHI4cmE0NVRxQVVaL1ArWXY3NlU4a1Vz VkcySEU1Z2wvQ2dCNStWMXFrcG41TTRDQURzdlN2UEEKcUVBVFp2dytLVXp6 TUNVaVZ6cStUNmxEcnJDdCtzRDNOWmx2RzRCRDJQcFF1UHREZjFpNjFEVWMr NXMyTndtMgp0NHVxTkY3c3dCV1MwbjQwL2htbjV1OHBUMkpWc3V3YW03OUdH aEptTmZDZFBDY0NiZ3Bocm9leFJjcndkVVJYCmx5MDBYZGYxZ0RWQnhSb1IK LS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= date: 2013-11-04 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: rubyforge requirement: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 2.0.4 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 2.0.4 - !ruby/object:Gem::Dependency name: allison requirement: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 2.0.3 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 2.0.3 - !ruby/object:Gem::Dependency name: rdoc requirement: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 2.5.11 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 2.5.11 - !ruby/object:Gem::Dependency name: rake requirement: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 0.9.2 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 0.9.2 description: A Rubygems packaging tool that provides Rake tasks for documentation, extension compiling, testing, and deployment. email: '' executables: [] extensions: [] extra_rdoc_files: - CHANGELOG - LICENSE - README.rdoc - lib/echoe.rb - lib/echoe/extensions.rb - lib/echoe/platform.rb - lib/echoe/rubygems.rb files: - CHANGELOG - LICENSE - MIT-LICENSE - Manifest - README.rdoc - Rakefile - echoe.gemspec - echoe.pem - lib/echoe.rb - lib/echoe/extensions.rb - lib/echoe/platform.rb - lib/echoe/rubygems.rb - vendor/rake/MIT-LICENSE - vendor/rake/lib/rake/contrib/compositepublisher.rb - vendor/rake/lib/rake/contrib/ftptools.rb - vendor/rake/lib/rake/contrib/publisher.rb - vendor/rake/lib/rake/contrib/rubyforgepublisher.rb - vendor/rake/lib/rake/contrib/sshpublisher.rb - vendor/rake/lib/rake/contrib/sys.rb homepage: http://fauna.github.com/fauna/echoe/ licenses: - Academic Free License (AFL) v. 3.0 metadata: {} post_install_message: rdoc_options: - --line-numbers - --title - Echoe - --main - README.rdoc require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: '0' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ! '>=' - !ruby/object:Gem::Version version: 1.8.4 requirements: [] rubyforge_project: fauna rubygems_version: 2.1.10 signing_key: specification_version: 4 summary: A Rubygems packaging tool that provides Rake tasks for documentation, extension compiling, testing, and deployment. test_files: [] echoe-4.6.5/echoe.gemspec0000644000004100000410000000471412247337443015310 0ustar www-datawww-data# -*- encoding: utf-8 -*- # stub: echoe 4.6.5 ruby lib Gem::Specification.new do |s| s.name = "echoe" s.version = "4.6.5" s.required_rubygems_version = Gem::Requirement.new(">= 1.8.4") if s.respond_to? :required_rubygems_version= s.authors = ["Evan Weaver"] s.cert_chain = ["/Users/eweaver/cloudburst/github/echoe/echoe.pem"] s.date = "2013-11-04" s.description = "A Rubygems packaging tool that provides Rake tasks for documentation, extension compiling, testing, and deployment." s.email = "" s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "lib/echoe.rb", "lib/echoe/extensions.rb", "lib/echoe/platform.rb", "lib/echoe/rubygems.rb"] s.files = ["CHANGELOG", "LICENSE", "MIT-LICENSE", "Manifest", "README.rdoc", "Rakefile", "echoe.gemspec", "echoe.pem", "lib/echoe.rb", "lib/echoe/extensions.rb", "lib/echoe/platform.rb", "lib/echoe/rubygems.rb", "vendor/rake/MIT-LICENSE", "vendor/rake/lib/rake/contrib/compositepublisher.rb", "vendor/rake/lib/rake/contrib/ftptools.rb", "vendor/rake/lib/rake/contrib/publisher.rb", "vendor/rake/lib/rake/contrib/rubyforgepublisher.rb", "vendor/rake/lib/rake/contrib/sshpublisher.rb", "vendor/rake/lib/rake/contrib/sys.rb"] s.homepage = "http://fauna.github.com/fauna/echoe/" s.licenses = ["Academic Free License (AFL) v. 3.0"] s.rdoc_options = ["--line-numbers", "--title", "Echoe", "--main", "README.rdoc"] s.require_paths = ["lib"] s.rubyforge_project = "fauna" s.rubygems_version = "2.1.10" s.signing_key = "/Users/eweaver/cloudburst/configuration/gem_certificates/gem-private_key.pem" s.summary = "A Rubygems packaging tool that provides Rake tasks for documentation, extension compiling, testing, and deployment." if s.respond_to? :specification_version then s.specification_version = 4 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then s.add_runtime_dependency(%q, [">= 2.0.4"]) s.add_runtime_dependency(%q, [">= 2.0.3"]) s.add_runtime_dependency(%q, [">= 2.5.11"]) s.add_runtime_dependency(%q, [">= 0.9.2"]) else s.add_dependency(%q, [">= 2.0.4"]) s.add_dependency(%q, [">= 2.0.3"]) s.add_dependency(%q, [">= 2.5.11"]) s.add_dependency(%q, [">= 0.9.2"]) end else s.add_dependency(%q, [">= 2.0.4"]) s.add_dependency(%q, [">= 2.0.3"]) s.add_dependency(%q, [">= 2.5.11"]) s.add_dependency(%q, [">= 0.9.2"]) end end echoe-4.6.5/echoe.pem0000644000004100000410000000233112247337443014437 0ustar www-datawww-data-----BEGIN CERTIFICATE----- MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA9MQ0wCwYDVQQDDARldmFu MRgwFgYKCZImiZPyLGQBGRYIY2xvdWRidXIxEjAQBgoJkiaJk/IsZAEZFgJzdDAe Fw0xMzExMDQyMDI1MDVaFw0xNDExMDQyMDI1MDVaMD0xDTALBgNVBAMMBGV2YW4x GDAWBgoJkiaJk/IsZAEZFghjbG91ZGJ1cjESMBAGCgmSJomT8ixkARkWAnN0MIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuG4q2IdTtlc7/IJkWPnbOAFt ysKc3XmLHsjeSXXSPdQ1mb2cDXvyDS8TkzjrgDoJ96RR2xrh7bfkHAMJhSVMhsPM rnYS7fDs//X1h6fRYBjjhqGeQhCL1xrS5/I4vKb7AjgFnuUbMZ/H0+ic2Ic2zTnZ jttSQZ/QOlYyctrYoTzAFdPwL+dOxskOyAmAbtV/pV3owcXpChRT/tphC7u69sOk +IjWsMwrBCbEdj/Jmh4a52QntAwPWx4Krt0zm8eV3/UjSObB3BR1pZ/i5IsSLPs1 lwMA6ywbfxBTP59XcgAyhfV3rRQXb+vjpf7OLuOCJOUIN8GEwb5HNjFo/UVdiwID AQABo3MwcTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUbTCqyydn 0Rm6nngf15KtCEMc37swGwYDVR0RBBQwEoEQZXZhbkBjbG91ZGJ1ci5zdDAbBgNV HRIEFDASgRBldmFuQGNsb3VkYnVyLnN0MA0GCSqGSIb3DQEBBQUAA4IBAQBggGGb 0AoyF0QofzkPImuhN1UF6eG/RdYOHqiUovuRN/9IblyKAaZAIl1mIspfCav8EVwo SC6vz4OaIVpS7QdI04oLNHxhmC6C5TTBONtddDl93M+9uWVipD5uVPktcHWG+bKn 2L1lUykQXr8ra45TqAUZ/P+Yv76U8kUsVG2HE5gl/CgB5+V1qkpn5M4CADsvSvPA qEATZvw+KUzzMCUiVzq+T6lDrrCt+sD3NZlvG4BD2PpQuPtDf1i61DUc+5s2Nwm2 t4uqNF7swBWS0n40/hmn5u8pT2JVsuwam79GGhJmNfCdPCcCbgphroexRcrwdURX ly00Xdf1gDVBxRoR -----END CERTIFICATE----- echoe-4.6.5/Manifest0000644000004100000410000000070712247337443014347 0ustar www-datawww-dataCHANGELOG LICENSE MIT-LICENSE Manifest README.rdoc Rakefile echoe.gemspec echoe.pem lib/echoe.rb lib/echoe/extensions.rb lib/echoe/platform.rb lib/echoe/rubygems.rb vendor/rake/MIT-LICENSE vendor/rake/lib/rake/contrib/compositepublisher.rb vendor/rake/lib/rake/contrib/ftptools.rb vendor/rake/lib/rake/contrib/publisher.rb vendor/rake/lib/rake/contrib/rubyforgepublisher.rb vendor/rake/lib/rake/contrib/sshpublisher.rb vendor/rake/lib/rake/contrib/sys.rb echoe-4.6.5/checksums.yaml.gz.sig0000444000004100000410000000040012247337443016713 0ustar www-datawww-dataN,J}" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. echoe-4.6.5/metadata.gz.sig0000444000004100000410000000040012247337443015545 0ustar www-datawww-data&KHAM_geUNz؜3f4 H~}(F)d-|=q*LBe.@xEPI#8+e6,UWTɭ1D1` ٓA5~}8!O&N5m]@WTG<9䏖8ߴЙ ]m๯(U({8"N{jfSrXi ^0wUhvߜgL)F хechoe-4.6.5/checksums.yaml.gz0000444000004100000410000000065012247337443016141 0ustar www-datawww-dataxRA0tJLh"XvFI1U$*l<~}վы#y"gѿ{~"QԜSv _<G\:t e"Ϲ]پObur@ x;*YIJ6oEϨ L JCE3rEY tY@v_́oNdu`$sJaPzLmux]% $NLp. 4R똴6̬VN@YwaXT2; ,O8Be68qRcf