From 33ebb05ce90f2e2af3b0356b18f6ee17a033f0ff Mon Sep 17 00:00:00 2001 From: Pascal Belloncle Date: Tue, 5 Feb 2008 00:50:22 -0800 Subject: [PATCH] a few last tweaks before release --- .gitignore | 2 + Manifest.txt | 2 + email.txt | 25 - pkg/git-rails-0.1.0.gem | Bin 21504 -> 0 bytes pkg/git-rails-0.1.0.tgz | Bin 16732 -> 0 bytes pkg/git-rails-0.1.0/History.txt | 11 - pkg/git-rails-0.1.0/Manifest.txt | 22 - pkg/git-rails-0.1.0/README.txt | 31 - pkg/git-rails-0.1.0/Rakefile | 18 - pkg/git-rails-0.1.0/bin/git-rails | 122 -- pkg/git-rails-0.1.0/lib/git-rails/commands.rb | 29 - .../lib/git-rails/commands/init.rb | 41 - .../lib/git-rails/commands/install.rb | 14 - .../lib/git-rails/commands/update.rb | 14 - .../lib/git-rails/exceptions.rb | 12 - pkg/git-rails-0.1.0/lib/git-rails/git.rb | 56 - pkg/git-rails-0.1.0/lib/git-rails/version.rb | 9 - pkg/git-rails-0.1.0/lib/git_rails.rb | 7 - pkg/git-rails-0.1.0/setup.rb | 1585 ----------------- .../spec/commands/init_spec.rb | 68 - .../spec/commands/install_spec.rb | 37 - .../spec/commands/update_spec.rb | 49 - .../spec/git_rails_commands_spec.rb | 11 - .../spec/git_rails_git_spec.rb | 74 - pkg/git-rails-0.1.0/spec/spec.opts | 3 - pkg/git-rails-0.1.0/spec/spec_helper.rb | 64 - pkg/git-rails-0.1.0/tasks/rspec.rake | 21 - 27 files changed, 4 insertions(+), 2323 deletions(-) create mode 100644 .gitignore delete mode 100644 email.txt delete mode 100644 pkg/git-rails-0.1.0.gem delete mode 100644 pkg/git-rails-0.1.0.tgz delete mode 100644 pkg/git-rails-0.1.0/History.txt delete mode 100644 pkg/git-rails-0.1.0/Manifest.txt delete mode 100644 pkg/git-rails-0.1.0/README.txt delete mode 100644 pkg/git-rails-0.1.0/Rakefile delete mode 100644 pkg/git-rails-0.1.0/bin/git-rails delete mode 100644 pkg/git-rails-0.1.0/lib/git-rails/commands.rb delete mode 100644 pkg/git-rails-0.1.0/lib/git-rails/commands/init.rb delete mode 100644 pkg/git-rails-0.1.0/lib/git-rails/commands/install.rb delete mode 100644 pkg/git-rails-0.1.0/lib/git-rails/commands/update.rb delete mode 100644 pkg/git-rails-0.1.0/lib/git-rails/exceptions.rb delete mode 100644 pkg/git-rails-0.1.0/lib/git-rails/git.rb delete mode 100644 pkg/git-rails-0.1.0/lib/git-rails/version.rb delete mode 100644 pkg/git-rails-0.1.0/lib/git_rails.rb delete mode 100644 pkg/git-rails-0.1.0/setup.rb delete mode 100644 pkg/git-rails-0.1.0/spec/commands/init_spec.rb delete mode 100644 pkg/git-rails-0.1.0/spec/commands/install_spec.rb delete mode 100644 pkg/git-rails-0.1.0/spec/commands/update_spec.rb delete mode 100644 pkg/git-rails-0.1.0/spec/git_rails_commands_spec.rb delete mode 100644 pkg/git-rails-0.1.0/spec/git_rails_git_spec.rb delete mode 100644 pkg/git-rails-0.1.0/spec/spec.opts delete mode 100644 pkg/git-rails-0.1.0/spec/spec_helper.rb delete mode 100644 pkg/git-rails-0.1.0/tasks/rspec.rake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5102a15 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +pkg +email.txt diff --git a/Manifest.txt b/Manifest.txt index adcf28e..be242ea 100644 --- a/Manifest.txt +++ b/Manifest.txt @@ -1,7 +1,9 @@ History.txt +License.txt Manifest.txt README.txt Rakefile +TODO bin/git-rails lib/git-rails/commands.rb lib/git-rails/commands/init.rb diff --git a/email.txt b/email.txt deleted file mode 100644 index 86d5d60..0000000 --- a/email.txt +++ /dev/null @@ -1,25 +0,0 @@ -Subject: [ANN] git-rails 0.1.0 Released - -git-rails version 0.1.0 has been released! - - - -## DESCRIPTION: - -Tools to help using git with rails - -## FEATURES/PROBLEMS: - -* create new git repository with .gitignore, linked to remote git repository -* install plugins from git source as git modules -* install plugins from svn source as git modules - -Changes: - -### 0.2.0 / 2008-02-04 - -* enhancements: - * Added missing gem dependencies - * First public release - - diff --git a/pkg/git-rails-0.1.0.gem b/pkg/git-rails-0.1.0.gem deleted file mode 100644 index 10318173b38014912cbce43c1ab2433d9ea7ae00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21504 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 diff --git a/pkg/git-rails-0.1.0.tgz b/pkg/git-rails-0.1.0.tgz deleted file mode 100644 index 7127aa9225a6debff5050c73d82431128b658997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16732 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/$@k|g*W|2=y4tZZtW!IO4b8==Op+hcW+ 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 diff --git a/pkg/git-rails-0.1.0/History.txt b/pkg/git-rails-0.1.0/History.txt deleted file mode 100644 index 34ea0f8..0000000 --- a/pkg/git-rails-0.1.0/History.txt +++ /dev/null @@ -1,11 +0,0 @@ -=== 0.2.0 / 2008-02-04 - -* enhancements: - * Added missing gem dependencies - * First public release - -=== 0.1.0 / 2008-02-02 - -* 1 major enhancement: - * Initial release - diff --git a/pkg/git-rails-0.1.0/Manifest.txt b/pkg/git-rails-0.1.0/Manifest.txt deleted file mode 100644 index adcf28e..0000000 --- a/pkg/git-rails-0.1.0/Manifest.txt +++ /dev/null @@ -1,22 +0,0 @@ -History.txt -Manifest.txt -README.txt -Rakefile -bin/git-rails -lib/git-rails/commands.rb -lib/git-rails/commands/init.rb -lib/git-rails/commands/install.rb -lib/git-rails/commands/update.rb -lib/git-rails/exceptions.rb -lib/git-rails/git.rb -lib/git-rails/version.rb -lib/git_rails.rb -setup.rb -spec/commands/init_spec.rb -spec/commands/install_spec.rb -spec/commands/update_spec.rb -spec/git_rails_commands_spec.rb -spec/git_rails_git_spec.rb -spec/spec.opts -spec/spec_helper.rb -tasks/rspec.rake diff --git a/pkg/git-rails-0.1.0/README.txt b/pkg/git-rails-0.1.0/README.txt deleted file mode 100644 index 932213c..0000000 --- a/pkg/git-rails-0.1.0/README.txt +++ /dev/null @@ -1,31 +0,0 @@ -= git-rails - -* http://blog.nanorails.com - -== DESCRIPTION: - -Tools to help using git with rails - -== FEATURES/PROBLEMS: - -* create new git repository with .gitignore, linked to remote git repository -* install plugins from git source as git modules -* install plugins from svn source as git modules - -== SYNOPSIS: - - git-rails init {remote git repository} - git-rails install [remote plugin repository] - git-rails update plugin-name - -== REQUIREMENTS: - -* git -* rails 2.0.2 -* hoe 1.5.0 -* main 2.8.0 -* rake 0.8.1 - -== INSTALL: - -* sudo gem install git-rails diff --git a/pkg/git-rails-0.1.0/Rakefile b/pkg/git-rails-0.1.0/Rakefile deleted file mode 100644 index 8707339..0000000 --- a/pkg/git-rails-0.1.0/Rakefile +++ /dev/null @@ -1,18 +0,0 @@ -# -*- ruby -*- - -require 'rubygems' -require 'hoe' -require './lib/git_rails.rb' - -Hoe.new('git-rails', GitRails::VERSION::STRING) do |p| - p.rubyforge_name = 'git-rails' - p.author = 'Pascal Belloncle (nano RAILS)' - p.email = 'psq@nanorails.com' - p.summary = 'Tools to make using git with rails a breeze' - p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n") - p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1] - p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n") - p.extra_deps << ['main', '>= 2.8.0'] -end - -# vim: syntax=Ruby diff --git a/pkg/git-rails-0.1.0/bin/git-rails b/pkg/git-rails-0.1.0/bin/git-rails deleted file mode 100644 index 22f1558..0000000 --- a/pkg/git-rails-0.1.0/bin/git-rails +++ /dev/null @@ -1,122 +0,0 @@ -#! /opt/local/bin/ruby -$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib")) - -begin - require 'rubygems' -rescue -end -require 'main' - -require 'git_rails' - -Home = File.expand_path(ENV['HOME'] || '~') - -# mostly blatantly stolen from ara's punch script main kicks ass! -Main { - description <<-txt - git-rails is a tool to help manage a rails app using git - - run 'git-rails help commandname' for more info. - txt - - examples <<-txt - txt - - mode(:init){ - description <<-txt - initializes a git repository, and links to remote url if provided (for push/pull) - also creates a .gitignore file - - txt - - examples <<-txt - . git-rails init -m "message" -c git@gitorious.org:rur/mainline.git - txt - - mixin :optional_remote, :option_message, :option_commit - - run{ - GitRails::Command.run(:init, remote, message, commit) - } - } - - mode(:install){ - description <<-txt - installs a plugin from a remote git repostiory - - txt - - examples <<-txt - . git-rails install git://gitorious.org/rur/mainline.git plugin-name - txt - - mixin :argument_remote, :argument_plugin_name - - run{ - GitRails::Command.run(:install, remote, plugin_name) - } - } - - mode(:update){ - description <<-txt - updates a plugin from original source - txt - - examples <<-txt - . git-rails update plugin-name - txt - - mixin :argument_plugin_name - - run{ - GitRails::Command.run(:update, plugin_name) - } - } - - mode(:version){ - description 'shows git-rails version' - - run{ - puts "git-rails #{GitRails::VERSION::STRING}" - } - } - - mixin :argument_remote do - argument(:remote){ - attr - } - end - - mixin :argument_plugin_name do - argument(:plugin_name){ - attr - } - end - - mixin :optional_remote do - argument(:remote){ - optional - attr - } - end - - mixin :option_message do - option(:message, :m){ - optional - argument :required - desc 'commit message' - attr - } - end - - mixin :option_commit do - option(:commit, :c){ - optional - desc 'perform a commit' - attr - } - end - - run{ help! } -} - diff --git a/pkg/git-rails-0.1.0/lib/git-rails/commands.rb b/pkg/git-rails-0.1.0/lib/git-rails/commands.rb deleted file mode 100644 index f22b178..0000000 --- a/pkg/git-rails-0.1.0/lib/git-rails/commands.rb +++ /dev/null @@ -1,29 +0,0 @@ -module GitRails - class Command - - attr_accessor :config, :svn, :git, :local - - def initialize(options = {}) - # @config = options["config"] || Giston::Config.new - # @svn = options["svn"] || Giston::Svn.new - # @git = options["git"] || Giston::Git.new - # @local = options["local"] || Giston::Local.new - end - - def self.run(command, *args) - klass = GitRails::Commands.const_get(command.to_s.capitalize) - klass.new.run(*args) - rescue GitRails::Exception => e - puts "git-rails: An exception has occured: #{e.message || e} (#{e})" - end - - private - def msg(str) - puts "git-rails: " + str - end - end -end - -require 'git-rails/commands/init' -require 'git-rails/commands/install' -require 'git-rails/commands/update' diff --git a/pkg/git-rails-0.1.0/lib/git-rails/commands/init.rb b/pkg/git-rails-0.1.0/lib/git-rails/commands/init.rb deleted file mode 100644 index 74e9be2..0000000 --- a/pkg/git-rails-0.1.0/lib/git-rails/commands/init.rb +++ /dev/null @@ -1,41 +0,0 @@ -module GitRails - module Commands - class Init < GitRails::Command - - def run(remote, message='', commit=false) - unless File.exists?(".gitignore") - gitignore = File.new(".gitignore", "w") - gitignore << "log/*.log\n" - gitignore << "tmp/**/*\n" - gitignore << ".DS_Store\n" - gitignore << "public/cache/**/*\n" - gitignore.close - end - FileUtils.mkdir_p("log") - gitignore = File.new("log/.gitignore", "w") - gitignore.close - FileUtils.mkdir_p("tmp") - gitignore = File.new("tmp/.gitignore", "w") - gitignore.close - - git = GitRails::Git.new - git.init - git.add(".") - git.commit_all('', message ? {"-m" => "\"#{message}\""} : {}) if commit - if (remote) - config = File.new(".git/config", "a") - config << "[remote \"origin\"]\n" - config << " url = #{remote}\n" - config << " fetch = +refs/heads/*:refs/remotes/origin/*\n" - config << "[branch \"master\"]\n" - config << " remote = origin\n" - config << " merge = refs/heads/master\n" - config.close - puts "You can now push to the origin #{remote} by using:\n" - puts " git pust origin master\n" - end - end - - end - end -end diff --git a/pkg/git-rails-0.1.0/lib/git-rails/commands/install.rb b/pkg/git-rails-0.1.0/lib/git-rails/commands/install.rb deleted file mode 100644 index cfb21a6..0000000 --- a/pkg/git-rails-0.1.0/lib/git-rails/commands/install.rb +++ /dev/null @@ -1,14 +0,0 @@ -module GitRails - module Commands - class Install < GitRails::Command - - def run(remote, plugin_name) - git_sub_module = GitRails::Git::SubModule.new - git_sub_module.add(remote, File.join("vendor", "plugins", plugin_name)) - git_sub_module.init - git_sub_module.update - end - - end - end -end diff --git a/pkg/git-rails-0.1.0/lib/git-rails/commands/update.rb b/pkg/git-rails-0.1.0/lib/git-rails/commands/update.rb deleted file mode 100644 index 3a2c2b6..0000000 --- a/pkg/git-rails-0.1.0/lib/git-rails/commands/update.rb +++ /dev/null @@ -1,14 +0,0 @@ -module GitRails - module Commands - class Update < GitRails::Command - - def run(plugin_name) - git = GitRails::Git.new - Dir.chdir(File.join("vendor", "plugins", plugin_name)) do - git.pull - end - end - - end - end -end diff --git a/pkg/git-rails-0.1.0/lib/git-rails/exceptions.rb b/pkg/git-rails-0.1.0/lib/git-rails/exceptions.rb deleted file mode 100644 index ad7c755..0000000 --- a/pkg/git-rails-0.1.0/lib/git-rails/exceptions.rb +++ /dev/null @@ -1,12 +0,0 @@ -module GitRails - class Exception < StandardError - end - - module Commands - end - - class Git - class LocalRepositoryHasUncommitedChanges < GitRails::Exception; end - class RepositoryError < GitRails::Exception; end - end -end diff --git a/pkg/git-rails-0.1.0/lib/git-rails/git.rb b/pkg/git-rails-0.1.0/lib/git-rails/git.rb deleted file mode 100644 index e426272..0000000 --- a/pkg/git-rails-0.1.0/lib/git-rails/git.rb +++ /dev/null @@ -1,56 +0,0 @@ -module GitRails - class Git - - def local_changes?(dir) - dir ||= '.' - out = sys('git-status | grep -e "#{dir}"') - !out.empty? - end - - def init - Git::sys('git init') - end - - def add(path) - Git::sys('git add', path) - end - - def commit_all(path='', options={}) - Git::sys('git commit -a', options.collect{|key,value| "#{key} #{value}"}.join(" "), path) - end - - def push(dest, source) - Git::sys('git push', dest, source) - end - - def pull(remote='') - Git::sys('git pull', remote) - end - - def status() - Git::sys('git status') - end - - def log() - Git::sys('git log') - end - - class SubModule - def add(source_url, dest_path) - ::GitRails::Git::sys('git submodule add', source_url, dest_path) - end - def init - ::GitRails::Git::sys('git submodule init') - end - def update(path='') - ::GitRails::Git::sys('git submodule update') - end - end - - protected - def self.sys(*args) - `#{args.join(' ')}` - end - end -end - diff --git a/pkg/git-rails-0.1.0/lib/git-rails/version.rb b/pkg/git-rails-0.1.0/lib/git-rails/version.rb deleted file mode 100644 index 7882d73..0000000 --- a/pkg/git-rails-0.1.0/lib/git-rails/version.rb +++ /dev/null @@ -1,9 +0,0 @@ -module GitRails #:nodoc: - module VERSION #:nodoc: - MAJOR = 0 - MINOR = 1 - TINY = 0 - - STRING = [MAJOR, MINOR, TINY].join('.') - end -end diff --git a/pkg/git-rails-0.1.0/lib/git_rails.rb b/pkg/git-rails-0.1.0/lib/git_rails.rb deleted file mode 100644 index 6eb6159..0000000 --- a/pkg/git-rails-0.1.0/lib/git_rails.rb +++ /dev/null @@ -1,7 +0,0 @@ -$:.unshift File.dirname(__FILE__) - -require "git-rails/version" -require "git-rails/exceptions" - -require "git-rails/commands" -require "git-rails/git" diff --git a/pkg/git-rails-0.1.0/setup.rb b/pkg/git-rails-0.1.0/setup.rb deleted file mode 100644 index 424a5f3..0000000 --- a/pkg/git-rails-0.1.0/setup.rb +++ /dev/null @@ -1,1585 +0,0 @@ -# -# setup.rb -# -# Copyright (c) 2000-2005 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the terms of -# the GNU LGPL, Lesser General Public License version 2.1. -# - -unless Enumerable.method_defined?(:map) # Ruby 1.4.6 - module Enumerable - alias map collect - end -end - -unless File.respond_to?(:read) # Ruby 1.6 - def File.read(fname) - open(fname) {|f| - return f.read - } - end -end - -unless Errno.const_defined?(:ENOTEMPTY) # Windows? - module Errno - class ENOTEMPTY - # We do not raise this exception, implementation is not needed. - end - end -end - -def File.binread(fname) - open(fname, 'rb') {|f| - return f.read - } -end - -# for corrupted Windows' stat(2) -def File.dir?(path) - File.directory?((path[-1,1] == '/') ? path : path + '/') -end - - -class ConfigTable - - include Enumerable - - def initialize(rbconfig) - @rbconfig = rbconfig - @items = [] - @table = {} - # options - @install_prefix = nil - @config_opt = nil - @verbose = true - @no_harm = false - end - - attr_accessor :install_prefix - attr_accessor :config_opt - - attr_writer :verbose - - def verbose? - @verbose - end - - attr_writer :no_harm - - def no_harm? - @no_harm - end - - def [](key) - lookup(key).resolve(self) - end - - def []=(key, val) - lookup(key).set val - end - - def names - @items.map {|i| i.name } - end - - def each(&block) - @items.each(&block) - end - - def key?(name) - @table.key?(name) - end - - def lookup(name) - @table[name] or setup_rb_error "no such config item: #{name}" - end - - def add(item) - @items.push item - @table[item.name] = item - end - - def remove(name) - item = lookup(name) - @items.delete_if {|i| i.name == name } - @table.delete_if {|name, i| i.name == name } - item - end - - def load_script(path, inst = nil) - if File.file?(path) - MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path - end - end - - def savefile - '.config' - end - - def load_savefile - begin - File.foreach(savefile()) do |line| - k, v = *line.split(/=/, 2) - self[k] = v.strip - end - rescue Errno::ENOENT - setup_rb_error $!.message + "\n#{File.basename($0)} config first" - end - end - - def save - @items.each {|i| i.value } - File.open(savefile(), 'w') {|f| - @items.each do |i| - f.printf "%s=%s\n", i.name, i.value if i.value? and i.value - end - } - end - - def load_standard_entries - standard_entries(@rbconfig).each do |ent| - add ent - end - end - - def standard_entries(rbconfig) - c = rbconfig - - rubypath = File.join(c['bindir'], c['ruby_install_name'] + c['EXEEXT']) - - major = c['MAJOR'].to_i - minor = c['MINOR'].to_i - teeny = c['TEENY'].to_i - version = "#{major}.#{minor}" - - # ruby ver. >= 1.4.4? - newpath_p = ((major >= 2) or - ((major == 1) and - ((minor >= 5) or - ((minor == 4) and (teeny >= 4))))) - - if c['rubylibdir'] - # V > 1.6.3 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = c['rubylibdir'] - librubyverarch = c['archdir'] - siteruby = c['sitedir'] - siterubyver = c['sitelibdir'] - siterubyverarch = c['sitearchdir'] - elsif newpath_p - # 1.4.4 <= V <= 1.6.3 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = "#{c['prefix']}/lib/ruby/#{version}" - librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}" - siteruby = c['sitedir'] - siterubyver = "$siteruby/#{version}" - siterubyverarch = "$siterubyver/#{c['arch']}" - else - # V < 1.4.4 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = "#{c['prefix']}/lib/ruby/#{version}" - librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}" - siteruby = "#{c['prefix']}/lib/ruby/#{version}/site_ruby" - siterubyver = siteruby - siterubyverarch = "$siterubyver/#{c['arch']}" - end - parameterize = lambda {|path| - path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix') - } - - if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg } - makeprog = arg.sub(/'/, '').split(/=/, 2)[1] - else - makeprog = 'make' - end - - [ - ExecItem.new('installdirs', 'std/site/home', - 'std: install under libruby; site: install under site_ruby; home: install under $HOME')\ - {|val, table| - case val - when 'std' - table['rbdir'] = '$librubyver' - table['sodir'] = '$librubyverarch' - when 'site' - table['rbdir'] = '$siterubyver' - table['sodir'] = '$siterubyverarch' - when 'home' - setup_rb_error '$HOME was not set' unless ENV['HOME'] - table['prefix'] = ENV['HOME'] - table['rbdir'] = '$libdir/ruby' - table['sodir'] = '$libdir/ruby' - end - }, - PathItem.new('prefix', 'path', c['prefix'], - 'path prefix of target environment'), - PathItem.new('bindir', 'path', parameterize.call(c['bindir']), - 'the directory for commands'), - PathItem.new('libdir', 'path', parameterize.call(c['libdir']), - 'the directory for libraries'), - PathItem.new('datadir', 'path', parameterize.call(c['datadir']), - 'the directory for shared data'), - PathItem.new('mandir', 'path', parameterize.call(c['mandir']), - 'the directory for man pages'), - PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']), - 'the directory for system configuration files'), - PathItem.new('localstatedir', 'path', parameterize.call(c['localstatedir']), - 'the directory for local state data'), - PathItem.new('libruby', 'path', libruby, - 'the directory for ruby libraries'), - PathItem.new('librubyver', 'path', librubyver, - 'the directory for standard ruby libraries'), - PathItem.new('librubyverarch', 'path', librubyverarch, - 'the directory for standard ruby extensions'), - PathItem.new('siteruby', 'path', siteruby, - 'the directory for version-independent aux ruby libraries'), - PathItem.new('siterubyver', 'path', siterubyver, - 'the directory for aux ruby libraries'), - PathItem.new('siterubyverarch', 'path', siterubyverarch, - 'the directory for aux ruby binaries'), - PathItem.new('rbdir', 'path', '$siterubyver', - 'the directory for ruby scripts'), - PathItem.new('sodir', 'path', '$siterubyverarch', - 'the directory for ruby extentions'), - PathItem.new('rubypath', 'path', rubypath, - 'the path to set to #! line'), - ProgramItem.new('rubyprog', 'name', rubypath, - 'the ruby program using for installation'), - ProgramItem.new('makeprog', 'name', makeprog, - 'the make program to compile ruby extentions'), - SelectItem.new('shebang', 'all/ruby/never', 'ruby', - 'shebang line (#!) editing mode'), - BoolItem.new('without-ext', 'yes/no', 'no', - 'does not compile/install ruby extentions') - ] - end - private :standard_entries - - def load_multipackage_entries - multipackage_entries().each do |ent| - add ent - end - end - - def multipackage_entries - [ - PackageSelectionItem.new('with', 'name,name...', '', 'ALL', - 'package names that you want to install'), - PackageSelectionItem.new('without', 'name,name...', '', 'NONE', - 'package names that you do not want to install') - ] - end - private :multipackage_entries - - ALIASES = { - 'std-ruby' => 'librubyver', - 'stdruby' => 'librubyver', - 'rubylibdir' => 'librubyver', - 'archdir' => 'librubyverarch', - 'site-ruby-common' => 'siteruby', # For backward compatibility - 'site-ruby' => 'siterubyver', # For backward compatibility - 'bin-dir' => 'bindir', - 'bin-dir' => 'bindir', - 'rb-dir' => 'rbdir', - 'so-dir' => 'sodir', - 'data-dir' => 'datadir', - 'ruby-path' => 'rubypath', - 'ruby-prog' => 'rubyprog', - 'ruby' => 'rubyprog', - 'make-prog' => 'makeprog', - 'make' => 'makeprog' - } - - def fixup - ALIASES.each do |ali, name| - @table[ali] = @table[name] - end - @items.freeze - @table.freeze - @options_re = /\A--(#{@table.keys.join('|')})(?:=(.*))?\z/ - end - - def parse_opt(opt) - m = @options_re.match(opt) or setup_rb_error "config: unknown option #{opt}" - m.to_a[1,2] - end - - def dllext - @rbconfig['DLEXT'] - end - - def value_config?(name) - lookup(name).value? - end - - class Item - def initialize(name, template, default, desc) - @name = name.freeze - @template = template - @value = default - @default = default - @description = desc - end - - attr_reader :name - attr_reader :description - - attr_accessor :default - alias help_default default - - def help_opt - "--#{@name}=#{@template}" - end - - def value? - true - end - - def value - @value - end - - def resolve(table) - @value.gsub(%r<\$([^/]+)>) { table[$1] } - end - - def set(val) - @value = check(val) - end - - private - - def check(val) - setup_rb_error "config: --#{name} requires argument" unless val - val - end - end - - class BoolItem < Item - def config_type - 'bool' - end - - def help_opt - "--#{@name}" - end - - private - - def check(val) - return 'yes' unless val - case val - when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes' - when /\An(o)?\z/i, /\Af(alse)\z/i then 'no' - else - setup_rb_error "config: --#{@name} accepts only yes/no for argument" - end - end - end - - class PathItem < Item - def config_type - 'path' - end - - private - - def check(path) - setup_rb_error "config: --#{@name} requires argument" unless path - path[0,1] == '$' ? path : File.expand_path(path) - end - end - - class ProgramItem < Item - def config_type - 'program' - end - end - - class SelectItem < Item - def initialize(name, selection, default, desc) - super - @ok = selection.split('/') - end - - def config_type - 'select' - end - - private - - def check(val) - unless @ok.include?(val.strip) - setup_rb_error "config: use --#{@name}=#{@template} (#{val})" - end - val.strip - end - end - - class ExecItem < Item - def initialize(name, selection, desc, &block) - super name, selection, nil, desc - @ok = selection.split('/') - @action = block - end - - def config_type - 'exec' - end - - def value? - false - end - - def resolve(table) - setup_rb_error "$#{name()} wrongly used as option value" - end - - undef set - - def evaluate(val, table) - v = val.strip.downcase - unless @ok.include?(v) - setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})" - end - @action.call v, table - end - end - - class PackageSelectionItem < Item - def initialize(name, template, default, help_default, desc) - super name, template, default, desc - @help_default = help_default - end - - attr_reader :help_default - - def config_type - 'package' - end - - private - - def check(val) - unless File.dir?("packages/#{val}") - setup_rb_error "config: no such package: #{val}" - end - val - end - end - - class MetaConfigEnvironment - def initialize(config, installer) - @config = config - @installer = installer - end - - def config_names - @config.names - end - - def config?(name) - @config.key?(name) - end - - def bool_config?(name) - @config.lookup(name).config_type == 'bool' - end - - def path_config?(name) - @config.lookup(name).config_type == 'path' - end - - def value_config?(name) - @config.lookup(name).config_type != 'exec' - end - - def add_config(item) - @config.add item - end - - def add_bool_config(name, default, desc) - @config.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc) - end - - def add_path_config(name, default, desc) - @config.add PathItem.new(name, 'path', default, desc) - end - - def set_config_default(name, default) - @config.lookup(name).default = default - end - - def remove_config(name) - @config.remove(name) - end - - # For only multipackage - def packages - raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor' unless @installer - @installer.packages - end - - # For only multipackage - def declare_packages(list) - raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor' unless @installer - @installer.packages = list - end - end - -end # class ConfigTable - - -# This module requires: #verbose?, #no_harm? -module FileOperations - - def mkdir_p(dirname, prefix = nil) - dirname = prefix + File.expand_path(dirname) if prefix - $stderr.puts "mkdir -p #{dirname}" if verbose? - return if no_harm? - - # Does not check '/', it's too abnormal. - dirs = File.expand_path(dirname).split(%r<(?=/)>) - if /\A[a-z]:\z/i =~ dirs[0] - disk = dirs.shift - dirs[0] = disk + dirs[0] - end - dirs.each_index do |idx| - path = dirs[0..idx].join('') - Dir.mkdir path unless File.dir?(path) - end - end - - def rm_f(path) - $stderr.puts "rm -f #{path}" if verbose? - return if no_harm? - force_remove_file path - end - - def rm_rf(path) - $stderr.puts "rm -rf #{path}" if verbose? - return if no_harm? - remove_tree path - end - - def remove_tree(path) - if File.symlink?(path) - remove_file path - elsif File.dir?(path) - remove_tree0 path - else - force_remove_file path - end - end - - def remove_tree0(path) - Dir.foreach(path) do |ent| - next if ent == '.' - next if ent == '..' - entpath = "#{path}/#{ent}" - if File.symlink?(entpath) - remove_file entpath - elsif File.dir?(entpath) - remove_tree0 entpath - else - force_remove_file entpath - end - end - begin - Dir.rmdir path - rescue Errno::ENOTEMPTY - # directory may not be empty - end - end - - def move_file(src, dest) - force_remove_file dest - begin - File.rename src, dest - rescue - File.open(dest, 'wb') {|f| - f.write File.binread(src) - } - File.chmod File.stat(src).mode, dest - File.unlink src - end - end - - def force_remove_file(path) - begin - remove_file path - rescue - end - end - - def remove_file(path) - File.chmod 0777, path - File.unlink path - end - - def install(from, dest, mode, prefix = nil) - $stderr.puts "install #{from} #{dest}" if verbose? - return if no_harm? - - realdest = prefix ? prefix + File.expand_path(dest) : dest - realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest) - str = File.binread(from) - if diff?(str, realdest) - verbose_off { - rm_f realdest if File.exist?(realdest) - } - File.open(realdest, 'wb') {|f| - f.write str - } - File.chmod mode, realdest - - File.open("#{objdir_root()}/InstalledFiles", 'a') {|f| - if prefix - f.puts realdest.sub(prefix, '') - else - f.puts realdest - end - } - end - end - - def diff?(new_content, path) - return true unless File.exist?(path) - new_content != File.binread(path) - end - - def command(*args) - $stderr.puts args.join(' ') if verbose? - system(*args) or raise RuntimeError, - "system(#{args.map{|a| a.inspect }.join(' ')}) failed" - end - - def ruby(*args) - command config('rubyprog'), *args - end - - def make(task = nil) - command(*[config('makeprog'), task].compact) - end - - def extdir?(dir) - File.exist?("#{dir}/MANIFEST") or File.exist?("#{dir}/extconf.rb") - end - - def files_of(dir) - Dir.open(dir) {|d| - return d.select {|ent| File.file?("#{dir}/#{ent}") } - } - end - - DIR_REJECT = %w( . .. CVS SCCS RCS CVS.adm .svn ) - - def directories_of(dir) - Dir.open(dir) {|d| - return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT - } - end - -end - - -# This module requires: #srcdir_root, #objdir_root, #relpath -module HookScriptAPI - - def get_config(key) - @config[key] - end - - alias config get_config - - # obsolete: use metaconfig to change configuration - def set_config(key, val) - @config[key] = val - end - - # - # srcdir/objdir (works only in the package directory) - # - - def curr_srcdir - "#{srcdir_root()}/#{relpath()}" - end - - def curr_objdir - "#{objdir_root()}/#{relpath()}" - end - - def srcfile(path) - "#{curr_srcdir()}/#{path}" - end - - def srcexist?(path) - File.exist?(srcfile(path)) - end - - def srcdirectory?(path) - File.dir?(srcfile(path)) - end - - def srcfile?(path) - File.file?(srcfile(path)) - end - - def srcentries(path = '.') - Dir.open("#{curr_srcdir()}/#{path}") {|d| - return d.to_a - %w(. ..) - } - end - - def srcfiles(path = '.') - srcentries(path).select {|fname| - File.file?(File.join(curr_srcdir(), path, fname)) - } - end - - def srcdirectories(path = '.') - srcentries(path).select {|fname| - File.dir?(File.join(curr_srcdir(), path, fname)) - } - end - -end - - -class ToplevelInstaller - - Version = '3.4.1' - Copyright = 'Copyright (c) 2000-2005 Minero Aoki' - - TASKS = [ - [ 'all', 'do config, setup, then install' ], - [ 'config', 'saves your configurations' ], - [ 'show', 'shows current configuration' ], - [ 'setup', 'compiles ruby extentions and others' ], - [ 'install', 'installs files' ], - [ 'test', 'run all tests in test/' ], - [ 'clean', "does `make clean' for each extention" ], - [ 'distclean',"does `make distclean' for each extention" ] - ] - - def ToplevelInstaller.invoke - config = ConfigTable.new(load_rbconfig()) - config.load_standard_entries - config.load_multipackage_entries if multipackage? - config.fixup - klass = (multipackage?() ? ToplevelInstallerMulti : ToplevelInstaller) - klass.new(File.dirname($0), config).invoke - end - - def ToplevelInstaller.multipackage? - File.dir?(File.dirname($0) + '/packages') - end - - def ToplevelInstaller.load_rbconfig - if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg } - ARGV.delete(arg) - load File.expand_path(arg.split(/=/, 2)[1]) - $".push 'rbconfig.rb' - else - require 'rbconfig' - end - ::Config::CONFIG - end - - def initialize(ardir_root, config) - @ardir = File.expand_path(ardir_root) - @config = config - # cache - @valid_task_re = nil - end - - def config(key) - @config[key] - end - - def inspect - "#<#{self.class} #{__id__()}>" - end - - def invoke - run_metaconfigs - case task = parsearg_global() - when nil, 'all' - parsearg_config - init_installers - exec_config - exec_setup - exec_install - else - case task - when 'config', 'test' - ; - when 'clean', 'distclean' - @config.load_savefile if File.exist?(@config.savefile) - else - @config.load_savefile - end - __send__ "parsearg_#{task}" - init_installers - __send__ "exec_#{task}" - end - end - - def run_metaconfigs - @config.load_script "#{@ardir}/metaconfig" - end - - def init_installers - @installer = Installer.new(@config, @ardir, File.expand_path('.')) - end - - # - # Hook Script API bases - # - - def srcdir_root - @ardir - end - - def objdir_root - '.' - end - - def relpath - '.' - end - - # - # Option Parsing - # - - def parsearg_global - while arg = ARGV.shift - case arg - when /\A\w+\z/ - setup_rb_error "invalid task: #{arg}" unless valid_task?(arg) - return arg - when '-q', '--quiet' - @config.verbose = false - when '--verbose' - @config.verbose = true - when '--help' - print_usage $stdout - exit 0 - when '--version' - puts "#{File.basename($0)} version #{Version}" - exit 0 - when '--copyright' - puts Copyright - exit 0 - else - setup_rb_error "unknown global option '#{arg}'" - end - end - nil - end - - def valid_task?(t) - valid_task_re() =~ t - end - - def valid_task_re - @valid_task_re ||= /\A(?:#{TASKS.map {|task,desc| task }.join('|')})\z/ - end - - def parsearg_no_options - unless ARGV.empty? - task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1) - setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}" - end - end - - alias parsearg_show parsearg_no_options - alias parsearg_setup parsearg_no_options - alias parsearg_test parsearg_no_options - alias parsearg_clean parsearg_no_options - alias parsearg_distclean parsearg_no_options - - def parsearg_config - evalopt = [] - set = [] - @config.config_opt = [] - while i = ARGV.shift - if /\A--?\z/ =~ i - @config.config_opt = ARGV.dup - break - end - name, value = *@config.parse_opt(i) - if @config.value_config?(name) - @config[name] = value - else - evalopt.push [name, value] - end - set.push name - end - evalopt.each do |name, value| - @config.lookup(name).evaluate value, @config - end - # Check if configuration is valid - set.each do |n| - @config[n] if @config.value_config?(n) - end - end - - def parsearg_install - @config.no_harm = false - @config.install_prefix = '' - while a = ARGV.shift - case a - when '--no-harm' - @config.no_harm = true - when /\A--prefix=/ - path = a.split(/=/, 2)[1] - path = File.expand_path(path) unless path[0,1] == '/' - @config.install_prefix = path - else - setup_rb_error "install: unknown option #{a}" - end - end - end - - def print_usage(out) - out.puts 'Typical Installation Procedure:' - out.puts " $ ruby #{File.basename $0} config" - out.puts " $ ruby #{File.basename $0} setup" - out.puts " # ruby #{File.basename $0} install (may require root privilege)" - out.puts - out.puts 'Detailed Usage:' - out.puts " ruby #{File.basename $0} " - out.puts " ruby #{File.basename $0} [] []" - - fmt = " %-24s %s\n" - out.puts - out.puts 'Global options:' - out.printf fmt, '-q,--quiet', 'suppress message outputs' - out.printf fmt, ' --verbose', 'output messages verbosely' - out.printf fmt, ' --help', 'print this message' - out.printf fmt, ' --version', 'print version and quit' - out.printf fmt, ' --copyright', 'print copyright and quit' - out.puts - out.puts 'Tasks:' - TASKS.each do |name, desc| - out.printf fmt, name, desc - end - - fmt = " %-24s %s [%s]\n" - out.puts - out.puts 'Options for CONFIG or ALL:' - @config.each do |item| - out.printf fmt, item.help_opt, item.description, item.help_default - end - out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's" - out.puts - out.puts 'Options for INSTALL:' - out.printf fmt, '--no-harm', 'only display what to do if given', 'off' - out.printf fmt, '--prefix=path', 'install path prefix', '' - out.puts - end - - # - # Task Handlers - # - - def exec_config - @installer.exec_config - @config.save # must be final - end - - def exec_setup - @installer.exec_setup - end - - def exec_install - @installer.exec_install - end - - def exec_test - @installer.exec_test - end - - def exec_show - @config.each do |i| - printf "%-20s %s\n", i.name, i.value if i.value? - end - end - - def exec_clean - @installer.exec_clean - end - - def exec_distclean - @installer.exec_distclean - end - -end # class ToplevelInstaller - - -class ToplevelInstallerMulti < ToplevelInstaller - - include FileOperations - - def initialize(ardir_root, config) - super - @packages = directories_of("#{@ardir}/packages") - raise 'no package exists' if @packages.empty? - @root_installer = Installer.new(@config, @ardir, File.expand_path('.')) - end - - def run_metaconfigs - @config.load_script "#{@ardir}/metaconfig", self - @packages.each do |name| - @config.load_script "#{@ardir}/packages/#{name}/metaconfig" - end - end - - attr_reader :packages - - def packages=(list) - raise 'package list is empty' if list.empty? - list.each do |name| - raise "directory packages/#{name} does not exist"\ - unless File.dir?("#{@ardir}/packages/#{name}") - end - @packages = list - end - - def init_installers - @installers = {} - @packages.each do |pack| - @installers[pack] = Installer.new(@config, - "#{@ardir}/packages/#{pack}", - "packages/#{pack}") - end - with = extract_selection(config('with')) - without = extract_selection(config('without')) - @selected = @installers.keys.select {|name| - (with.empty? or with.include?(name)) \ - and not without.include?(name) - } - end - - def extract_selection(list) - a = list.split(/,/) - a.each do |name| - setup_rb_error "no such package: #{name}" unless @installers.key?(name) - end - a - end - - def print_usage(f) - super - f.puts 'Inluded packages:' - f.puts ' ' + @packages.sort.join(' ') - f.puts - end - - # - # Task Handlers - # - - def exec_config - run_hook 'pre-config' - each_selected_installers {|inst| inst.exec_config } - run_hook 'post-config' - @config.save # must be final - end - - def exec_setup - run_hook 'pre-setup' - each_selected_installers {|inst| inst.exec_setup } - run_hook 'post-setup' - end - - def exec_install - run_hook 'pre-install' - each_selected_installers {|inst| inst.exec_install } - run_hook 'post-install' - end - - def exec_test - run_hook 'pre-test' - each_selected_installers {|inst| inst.exec_test } - run_hook 'post-test' - end - - def exec_clean - rm_f @config.savefile - run_hook 'pre-clean' - each_selected_installers {|inst| inst.exec_clean } - run_hook 'post-clean' - end - - def exec_distclean - rm_f @config.savefile - run_hook 'pre-distclean' - each_selected_installers {|inst| inst.exec_distclean } - run_hook 'post-distclean' - end - - # - # lib - # - - def each_selected_installers - Dir.mkdir 'packages' unless File.dir?('packages') - @selected.each do |pack| - $stderr.puts "Processing the package `#{pack}' ..." if verbose? - Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}") - Dir.chdir "packages/#{pack}" - yield @installers[pack] - Dir.chdir '../..' - end - end - - def run_hook(id) - @root_installer.run_hook id - end - - # module FileOperations requires this - def verbose? - @config.verbose? - end - - # module FileOperations requires this - def no_harm? - @config.no_harm? - end - -end # class ToplevelInstallerMulti - - -class Installer - - FILETYPES = %w( bin lib ext data conf man ) - - include FileOperations - include HookScriptAPI - - def initialize(config, srcroot, objroot) - @config = config - @srcdir = File.expand_path(srcroot) - @objdir = File.expand_path(objroot) - @currdir = '.' - end - - def inspect - "#<#{self.class} #{File.basename(@srcdir)}>" - end - - def noop(rel) - end - - # - # Hook Script API base methods - # - - def srcdir_root - @srcdir - end - - def objdir_root - @objdir - end - - def relpath - @currdir - end - - # - # Config Access - # - - # module FileOperations requires this - def verbose? - @config.verbose? - end - - # module FileOperations requires this - def no_harm? - @config.no_harm? - end - - def verbose_off - begin - save, @config.verbose = @config.verbose?, false - yield - ensure - @config.verbose = save - end - end - - # - # TASK config - # - - def exec_config - exec_task_traverse 'config' - end - - alias config_dir_bin noop - alias config_dir_lib noop - - def config_dir_ext(rel) - extconf if extdir?(curr_srcdir()) - end - - alias config_dir_data noop - alias config_dir_conf noop - alias config_dir_man noop - - def extconf - ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt - end - - # - # TASK setup - # - - def exec_setup - exec_task_traverse 'setup' - end - - def setup_dir_bin(rel) - files_of(curr_srcdir()).each do |fname| - update_shebang_line "#{curr_srcdir()}/#{fname}" - end - end - - alias setup_dir_lib noop - - def setup_dir_ext(rel) - make if extdir?(curr_srcdir()) - end - - alias setup_dir_data noop - alias setup_dir_conf noop - alias setup_dir_man noop - - def update_shebang_line(path) - return if no_harm? - return if config('shebang') == 'never' - old = Shebang.load(path) - if old - $stderr.puts "warning: #{path}: Shebang line includes too many args. It is not portable and your program may not work." if old.args.size > 1 - new = new_shebang(old) - return if new.to_s == old.to_s - else - return unless config('shebang') == 'all' - new = Shebang.new(config('rubypath')) - end - $stderr.puts "updating shebang: #{File.basename(path)}" if verbose? - open_atomic_writer(path) {|output| - File.open(path, 'rb') {|f| - f.gets if old # discard - output.puts new.to_s - output.print f.read - } - } - end - - def new_shebang(old) - if /\Aruby/ =~ File.basename(old.cmd) - Shebang.new(config('rubypath'), old.args) - elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby' - Shebang.new(config('rubypath'), old.args[1..-1]) - else - return old unless config('shebang') == 'all' - Shebang.new(config('rubypath')) - end - end - - def open_atomic_writer(path, &block) - tmpfile = File.basename(path) + '.tmp' - begin - File.open(tmpfile, 'wb', &block) - File.rename tmpfile, File.basename(path) - ensure - File.unlink tmpfile if File.exist?(tmpfile) - end - end - - class Shebang - def Shebang.load(path) - line = nil - File.open(path) {|f| - line = f.gets - } - return nil unless /\A#!/ =~ line - parse(line) - end - - def Shebang.parse(line) - cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ') - new(cmd, args) - end - - def initialize(cmd, args = []) - @cmd = cmd - @args = args - end - - attr_reader :cmd - attr_reader :args - - def to_s - "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}") - end - end - - # - # TASK install - # - - def exec_install - rm_f 'InstalledFiles' - exec_task_traverse 'install' - end - - def install_dir_bin(rel) - install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755 - end - - def install_dir_lib(rel) - install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644 - end - - def install_dir_ext(rel) - return unless extdir?(curr_srcdir()) - install_files rubyextentions('.'), - "#{config('sodir')}/#{File.dirname(rel)}", - 0555 - end - - def install_dir_data(rel) - install_files targetfiles(), "#{config('datadir')}/#{rel}", 0644 - end - - def install_dir_conf(rel) - # FIXME: should not remove current config files - # (rename previous file to .old/.org) - install_files targetfiles(), "#{config('sysconfdir')}/#{rel}", 0644 - end - - def install_dir_man(rel) - install_files targetfiles(), "#{config('mandir')}/#{rel}", 0644 - end - - def install_files(list, dest, mode) - mkdir_p dest, @config.install_prefix - list.each do |fname| - install fname, dest, mode, @config.install_prefix - end - end - - def libfiles - glob_reject(%w(*.y *.output), targetfiles()) - end - - def rubyextentions(dir) - ents = glob_select("*.#{@config.dllext}", targetfiles()) - if ents.empty? - setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first" - end - ents - end - - def targetfiles - mapdir(existfiles() - hookfiles()) - end - - def mapdir(ents) - ents.map {|ent| - if File.exist?(ent) - then ent # objdir - else "#{curr_srcdir()}/#{ent}" # srcdir - end - } - end - - # picked up many entries from cvs-1.11.1/src/ignore.c - JUNK_FILES = %w( - core RCSLOG tags TAGS .make.state - .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb - *~ *.old *.bak *.BAK *.orig *.rej _$* *$ - - *.org *.in .* - ) - - def existfiles - glob_reject(JUNK_FILES, (files_of(curr_srcdir()) | files_of('.'))) - end - - def hookfiles - %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt| - %w( config setup install clean ).map {|t| sprintf(fmt, t) } - }.flatten - end - - def glob_select(pat, ents) - re = globs2re([pat]) - ents.select {|ent| re =~ ent } - end - - def glob_reject(pats, ents) - re = globs2re(pats) - ents.reject {|ent| re =~ ent } - end - - GLOB2REGEX = { - '.' => '\.', - '$' => '\$', - '#' => '\#', - '*' => '.*' - } - - def globs2re(pats) - /\A(?:#{ - pats.map {|pat| pat.gsub(/[\.\$\#\*]/) {|ch| GLOB2REGEX[ch] } }.join('|') - })\z/ - end - - # - # TASK test - # - - TESTDIR = 'test' - - def exec_test - unless File.directory?('test') - $stderr.puts 'no test in this package' if verbose? - return - end - $stderr.puts 'Running tests...' if verbose? - begin - require 'test/unit' - rescue LoadError - setup_rb_error 'test/unit cannot loaded. You need Ruby 1.8 or later to invoke this task.' - end - runner = Test::Unit::AutoRunner.new(true) - runner.to_run << TESTDIR - runner.run - end - - # - # TASK clean - # - - def exec_clean - exec_task_traverse 'clean' - rm_f @config.savefile - rm_f 'InstalledFiles' - end - - alias clean_dir_bin noop - alias clean_dir_lib noop - alias clean_dir_data noop - alias clean_dir_conf noop - alias clean_dir_man noop - - def clean_dir_ext(rel) - return unless extdir?(curr_srcdir()) - make 'clean' if File.file?('Makefile') - end - - # - # TASK distclean - # - - def exec_distclean - exec_task_traverse 'distclean' - rm_f @config.savefile - rm_f 'InstalledFiles' - end - - alias distclean_dir_bin noop - alias distclean_dir_lib noop - - def distclean_dir_ext(rel) - return unless extdir?(curr_srcdir()) - make 'distclean' if File.file?('Makefile') - end - - alias distclean_dir_data noop - alias distclean_dir_conf noop - alias distclean_dir_man noop - - # - # Traversing - # - - def exec_task_traverse(task) - run_hook "pre-#{task}" - FILETYPES.each do |type| - if type == 'ext' and config('without-ext') == 'yes' - $stderr.puts 'skipping ext/* by user option' if verbose? - next - end - traverse task, type, "#{task}_dir_#{type}" - end - run_hook "post-#{task}" - end - - def traverse(task, rel, mid) - dive_into(rel) { - run_hook "pre-#{task}" - __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '') - directories_of(curr_srcdir()).each do |d| - traverse task, "#{rel}/#{d}", mid - end - run_hook "post-#{task}" - } - end - - def dive_into(rel) - return unless File.dir?("#{@srcdir}/#{rel}") - - dir = File.basename(rel) - Dir.mkdir dir unless File.dir?(dir) - prevdir = Dir.pwd - Dir.chdir dir - $stderr.puts '---> ' + rel if verbose? - @currdir = rel - yield - Dir.chdir prevdir - $stderr.puts '<--- ' + rel if verbose? - @currdir = File.dirname(rel) - end - - def run_hook(id) - path = [ "#{curr_srcdir()}/#{id}", - "#{curr_srcdir()}/#{id}.rb" ].detect {|cand| File.file?(cand) } - return unless path - begin - instance_eval File.read(path), path, 1 - rescue - raise if $DEBUG - setup_rb_error "hook #{path} failed:\n" + $!.message - end - end - -end # class Installer - - -class SetupError < StandardError; end - -def setup_rb_error(msg) - raise SetupError, msg -end - -if $0 == __FILE__ - begin - ToplevelInstaller.invoke - rescue SetupError - raise if $DEBUG - $stderr.puts $!.message - $stderr.puts "Try 'ruby #{$0} --help' for detailed usage." - exit 1 - end -end diff --git a/pkg/git-rails-0.1.0/spec/commands/init_spec.rb b/pkg/git-rails-0.1.0/spec/commands/init_spec.rb deleted file mode 100644 index 2c7895e..0000000 --- a/pkg/git-rails-0.1.0/spec/commands/init_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -require File.dirname(__FILE__) + '/../spec_helper.rb' - -module GitRailsCommandsInitHelper -end - -describe "GitRails::Commands::Init" do - include GitRailsCommandsInitHelper - include GitRails::SpecHelpers - - before(:each) do - @init = GitRails::Commands::Init.new - @project = tmppath(:project) - @git = GitRails::Git.new - end - - after(:each) do - cleanup - end - - it "should create a .gitignore file in the current directory" do - in_tmp_directory(@project) do - create_file("testfile") - @init.run(nil, '', false) - File.exists?(".gitignore").should == true - @git.status.should match(/new file:/) - end - end - - it "should commit when commit option is provided" do - in_tmp_directory(@project) do - create_file("testfile") - @init.run(nil, 'commit message', true) - @git.status.should match(/nothing to commit/) - end - end - - it "should not overwrite an existing .gitignore file" do - in_tmp_directory(@project) do - create_file(".gitignore") - @init.run(nil, '', false) - File.size(".gitignore").should == 0 - end - end - - it "should create a tmp/.gitignore file and log/.gitignore" do - in_tmp_directory(@project) do - create_file("testfile") - @init.run(nil) - File.exists?("log/.gitignore").should == true - File.exists?("tmp/.gitignore").should == true - end - end - - it "should link to remote repository if provided" do - origin = in_tmp_directory(tmppath(:origin)) do - @git.init - end - in_tmp_directory(@project) do - create_file("testfile") - @init.run(origin, 'commit message', true) - @git.push("origin", "master") - end - in_tmp_directory(origin) do - @git.log.should match(/commit/) - end - end - -end diff --git a/pkg/git-rails-0.1.0/spec/commands/install_spec.rb b/pkg/git-rails-0.1.0/spec/commands/install_spec.rb deleted file mode 100644 index 91de88f..0000000 --- a/pkg/git-rails-0.1.0/spec/commands/install_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require File.dirname(__FILE__) + '/../spec_helper.rb' - -module GitRailsCommandsInstallHelper -end - -describe "GitRails::Commands::Install" do - include GitRailsCommandsInstallHelper - include GitRails::SpecHelpers - - before(:each) do - @init = GitRails::Commands::Init.new - @install = GitRails::Commands::Install.new - @project = tmppath(:project) - @git = GitRails::Git.new - end - - after(:each) do - cleanup - end - - it "should download remote url into vendor/plugins and add it as a submodule" do - plugin = in_tmp_directory(tmppath(:plugin)) do - create_file("pluginfile") - @init.run(nil, 'commit message', true) - end - project = in_tmp_directory(@project) do - create_file("testfile") - @init.run(nil, 'commit message', true) - @install.run(plugin, "plugin1") - File.exists?(File.join("vendor", "plugins", "plugin1")).should == true - File.exists?(File.join("vendor", "plugins", "plugin1", "pluginfile")).should == true - @git.status.should match(/Changes to be committed/) - end - - end - -end diff --git a/pkg/git-rails-0.1.0/spec/commands/update_spec.rb b/pkg/git-rails-0.1.0/spec/commands/update_spec.rb deleted file mode 100644 index fa84b8f..0000000 --- a/pkg/git-rails-0.1.0/spec/commands/update_spec.rb +++ /dev/null @@ -1,49 +0,0 @@ -require File.dirname(__FILE__) + '/../spec_helper.rb' - -module GitRailsCommandsUpdateHelper -end - -describe "GitRails::Commands::Update" do - include GitRailsCommandsUpdateHelper - include GitRails::SpecHelpers - - before(:each) do - @init = GitRails::Commands::Init.new - @install = GitRails::Commands::Install.new - @update = GitRails::Commands::Update.new - @project = tmppath(:project) - @git = GitRails::Git.new - end - - after(:each) do - cleanup - end - - it "should update changes to a plugin file" do - plugin = in_tmp_directory(tmppath(:plugin)) do - create_file("pluginfile") - @init.run(nil, 'commit message', true) - end - in_tmp_directory(@project) do - create_file("testfile") - @init.run(nil, 'commit message', true) - @install.run(plugin, "plugin1") - File.exists?(File.join("vendor", "plugins", "plugin1")).should == true - File.exists?(File.join("vendor", "plugins", "plugin1", "pluginfile")).should == true - @git.commit_all('', {"-m" => "commit message"}) - end - - in_tmp_directory(plugin) do - file = File.new("pluginfile", "w") - file<< "make some changes\n" - file.close - @git.commit_all('', {"-m" => "commit change to pluginfile"}) - end - - in_tmp_directory(@project) do - @update.run("plugin1") - IO.read(File.join("vendor", "plugins", "plugin1", "pluginfile")).should match(/changes/) - end - end - -end diff --git a/pkg/git-rails-0.1.0/spec/git_rails_commands_spec.rb b/pkg/git-rails-0.1.0/spec/git_rails_commands_spec.rb deleted file mode 100644 index f80170e..0000000 --- a/pkg/git-rails-0.1.0/spec/git_rails_commands_spec.rb +++ /dev/null @@ -1,11 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper.rb' - -describe "GitRails::Command" do - before(:each) do - end - - it "should exist" do - GitRails::Command.new - end - -end diff --git a/pkg/git-rails-0.1.0/spec/git_rails_git_spec.rb b/pkg/git-rails-0.1.0/spec/git_rails_git_spec.rb deleted file mode 100644 index 79b2e13..0000000 --- a/pkg/git-rails-0.1.0/spec/git_rails_git_spec.rb +++ /dev/null @@ -1,74 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper.rb' - -describe "GitRails::Git" do - include GitRails::SpecHelpers - - before(:each) do - @git = GitRails::Git.new - @project = tmppath(:project) - end - - after(:each) do - cleanup - end - - it "should create a .git directory when calling init" do - in_tmp_directory(@project) do - File.exists?(".git").should == false - @git.init - File.exists?(".git").should == true - end - end - - it "should add files in local project" do - in_tmp_directory(@project) do - create_file("test") - @git.init - @git.add(".") - @git.status.should match(/new file: test/) - end - end - - it "should commit" do - in_tmp_directory(@project) do - create_file("testfile") - @git.init - @git.add(".") - output = @git.commit_all('', {"-m" => "commit message"}) - output.should match(/Created initial commit/) - output.should match(/testfile/) - end - end - -end - -describe "GitRails::Git::SubModule" do - include GitRails::SpecHelpers - - before(:each) do - @git = GitRails::Git.new - @git_sub_module = GitRails::Git::SubModule.new - @project = tmppath(:project) - end - - after(:each) do - cleanup - end - - it "should add a module and initialize .gitmodules" do - sub_project = in_tmp_directory(tmppath(:sub_project)) do - create_file("testfile") - @git.init - @git.add(".") - @git.commit_all('', {"-m" => "commit message"}) - end - in_tmp_directory(@project) do - @git.init - @git_sub_module.add(sub_project, "./sub_project") - @git_sub_module.init - @git_sub_module.update - File.exists?(".gitmodules").should == true - File.exists?("sub_project/testfile").should == true - end - end -end \ No newline at end of file diff --git a/pkg/git-rails-0.1.0/spec/spec.opts b/pkg/git-rails-0.1.0/spec/spec.opts deleted file mode 100644 index db698b8..0000000 --- a/pkg/git-rails-0.1.0/spec/spec.opts +++ /dev/null @@ -1,3 +0,0 @@ ---colour ---format specdoc ---loadby mtime diff --git a/pkg/git-rails-0.1.0/spec/spec_helper.rb b/pkg/git-rails-0.1.0/spec/spec_helper.rb deleted file mode 100644 index 2d73e98..0000000 --- a/pkg/git-rails-0.1.0/spec/spec_helper.rb +++ /dev/null @@ -1,64 +0,0 @@ -begin - require 'spec' -rescue LoadError - require 'rubygems' - #gem 'rspec' - require 'spec' -end - -dir = File.dirname(__FILE__) -lib_path = File.expand_path("#{dir}/../lib") -$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path) - -require 'git_rails' - -require "logger" -require "fileutils" - -$logger = Logger.new($stderr) -$logger.level = Logger::INFO unless $DEBUG - -module GitRails - module SpecHelpers - def logger - $logger - end - - def create_file(path) - file = File.new(path, "w") - file.close - file - end - - def tmppath(*paths) - parts = [File.dirname(__FILE__), "tmp"] - parts << (@root_time ||= Time.now.to_i.to_s) - parts += paths - # parts << rand().to_s.split(".").last - parts.collect! {|path| path.to_s} - path = File.join(*parts) - attempts = 10 - while File.exists?(path) - path.succ! - attempts -= 1 - raise "Unable to find a good temp pathname: #{path.inspect}" if attempts.zero? - end - - File.expand_path(path) - end - - def cleanup - path = File.expand_path(File.join(File.dirname(__FILE__), "tmp")) - logger.debug {"Removing #{path.inspect}"} - FileUtils.rm_rf(path) - end - - def in_tmp_directory(path) - FileUtils.mkdir_p(path) - Dir.chdir(path) do - yield - end - path - end - end -end diff --git a/pkg/git-rails-0.1.0/tasks/rspec.rake b/pkg/git-rails-0.1.0/tasks/rspec.rake deleted file mode 100644 index e8b4518..0000000 --- a/pkg/git-rails-0.1.0/tasks/rspec.rake +++ /dev/null @@ -1,21 +0,0 @@ -begin - require 'spec' -rescue LoadError - require 'rubygems' - require 'spec' -end -begin - require 'spec/rake/spectask' -rescue LoadError - puts <<-EOS -To use rspec for testing you must install rspec gem: - gem install rspec -EOS - exit(0) -end - -desc "Run the specs under spec" -Spec::Rake::SpecTask.new do |t| - t.spec_opts = ['--options', "spec/spec.opts"] - t.spec_files = FileList['spec/*_spec.rb','spec/commands/*_spec.rb'] -end