You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildr.apache.org by as...@apache.org on 2008/10/17 21:20:15 UTC
svn commit: r705721 - in /incubator/buildr/trunk/lib/buildr: core/ groovy/
ide/ java/ packaging/
Author: assaf
Date: Fri Oct 17 12:20:14 2008
New Revision: 705721
URL: http://svn.apache.org/viewvc?rev=705721&view=rev
Log:
Using autoload to lazily load dependencies.
Added:
incubator/buildr/trunk/lib/buildr/packaging/version_requirement.rb
Modified:
incubator/buildr/trunk/lib/buildr/core/application.rb
incubator/buildr/trunk/lib/buildr/core/checks.rb
incubator/buildr/trunk/lib/buildr/core/common.rb
incubator/buildr/trunk/lib/buildr/core/environment.rb
incubator/buildr/trunk/lib/buildr/core/filter.rb
incubator/buildr/trunk/lib/buildr/core/progressbar.rb
incubator/buildr/trunk/lib/buildr/core/transports.rb
incubator/buildr/trunk/lib/buildr/core/util.rb
incubator/buildr/trunk/lib/buildr/groovy/bdd.rb
incubator/buildr/trunk/lib/buildr/ide/idea.rb
incubator/buildr/trunk/lib/buildr/ide/idea7x.rb
incubator/buildr/trunk/lib/buildr/java/ant.rb
incubator/buildr/trunk/lib/buildr/java/bdd.rb
incubator/buildr/trunk/lib/buildr/java/pom.rb
incubator/buildr/trunk/lib/buildr/java/test_result.rb
incubator/buildr/trunk/lib/buildr/packaging/artifact_namespace.rb
incubator/buildr/trunk/lib/buildr/packaging/gems.rb
incubator/buildr/trunk/lib/buildr/packaging/tar.rb
incubator/buildr/trunk/lib/buildr/packaging/zip.rb
Modified: incubator/buildr/trunk/lib/buildr/core/application.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/core/application.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/core/application.rb (original)
+++ incubator/buildr/trunk/lib/buildr/core/application.rb Fri Oct 17 12:20:14 2008
@@ -40,6 +40,7 @@
require 'highline/import'
require 'rubygems/source_info_cache'
require 'buildr/core/util'
+Gem.autoload :SourceInfoCache, 'rubygems/source_info_cache'
# Gem::user_home is nice, but ENV['HOME'] lets you override from the environment.
Modified: incubator/buildr/trunk/lib/buildr/core/checks.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/core/checks.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/core/checks.rb (original)
+++ incubator/buildr/trunk/lib/buildr/core/checks.rb Fri Oct 17 12:20:14 2008
@@ -17,8 +17,8 @@
require 'buildr/core/project'
require 'buildr/packaging/zip'
#require 'test/unit'
-require 'spec/matchers'
-require 'spec/expectations'
+#require 'spec/matchers'
+#require 'spec/expectations'
module Buildr
Modified: incubator/buildr/trunk/lib/buildr/core/common.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/core/common.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/core/common.rb (original)
+++ incubator/buildr/trunk/lib/buildr/core/common.rb Fri Oct 17 12:20:14 2008
@@ -15,11 +15,9 @@
require 'rake'
-require 'tempfile'
require 'open-uri'
$LOADED_FEATURES << 'rubygems/open-uri.rb' # avoid loading rubygems' open-uri
require 'buildr/core/util'
-require 'buildr/core/transports'
module Buildr
Modified: incubator/buildr/trunk/lib/buildr/core/environment.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/core/environment.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/core/environment.rb (original)
+++ incubator/buildr/trunk/lib/buildr/core/environment.rb Fri Oct 17 12:20:14 2008
@@ -14,9 +14,6 @@
# the License.
-require 'yaml'
-
-
module Buildr
# Collection of options for controlling Buildr.
Modified: incubator/buildr/trunk/lib/buildr/core/filter.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/core/filter.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/core/filter.rb (original)
+++ incubator/buildr/trunk/lib/buildr/core/filter.rb Fri Oct 17 12:20:14 2008
@@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations under
# the License.
+
module Buildr
# A filter knows how to copy files from one directory to another, applying mappings to the
@@ -359,4 +360,4 @@
Filter.new.from(*sources)
end
-end
+end
\ No newline at end of file
Modified: incubator/buildr/trunk/lib/buildr/core/progressbar.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/core/progressbar.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/core/progressbar.rb (original)
+++ incubator/buildr/trunk/lib/buildr/core/progressbar.rb Fri Oct 17 12:20:14 2008
@@ -153,4 +153,4 @@
@total == 0 ? ['%s %8s %s', :title, :count, :elapsed] : ['%s: %s |--| %8s/%s %s', :title, :percentage, :count, :total, :time]
end
-end
+end
\ No newline at end of file
Modified: incubator/buildr/trunk/lib/buildr/core/transports.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/core/transports.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/core/transports.rb (original)
+++ incubator/buildr/trunk/lib/buildr/core/transports.rb Fri Oct 17 12:20:14 2008
@@ -14,18 +14,16 @@
# the License.
-require 'cgi'
+require 'uri'
require 'net/http'
require 'net/https'
# PATCH: On Windows, Net::SSH 2.0.2 attempts to load the Pageant DLLs which break on JRuby.
$LOADED_FEATURES << 'net/ssh/authentication/pageant.rb' if RUBY_PLATFORM =~ /java/
require 'net/sftp'
-require 'uri'
-require 'digest/md5'
-require 'digest/sha1'
+autoload :CGI, 'cgi'
+autoload :Digest, 'digest'
require 'stringio'
-require 'tempfile'
-require 'buildr/core/progressbar'
+autoload :ProgressBar, 'buildr/core/progressbar'
# Not quite open-uri, but similar. Provides read and write methods for the resource represented by the URI.
Modified: incubator/buildr/trunk/lib/buildr/core/util.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/core/util.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/core/util.rb (original)
+++ incubator/buildr/trunk/lib/buildr/core/util.rb Fri Oct 17 12:20:14 2008
@@ -15,8 +15,11 @@
require 'rbconfig'
-require 'pathname'
-require 'builder' # A different kind of buildr, one we use to create XML.
+autoload :Pathname, 'pathname'
+autoload :YAML, 'yaml'
+autoload :REXML, 'rexml/document'
+gem 'xml-simple' ; autoload :XmlSimple, 'xmlsimple'
+gem 'builder' ; autoload :Builder, 'builder' # A different kind of buildr, one we use to create XML.
module Buildr
Modified: incubator/buildr/trunk/lib/buildr/groovy/bdd.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/groovy/bdd.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/groovy/bdd.rb (original)
+++ incubator/buildr/trunk/lib/buildr/groovy/bdd.rb Fri Oct 17 12:20:14 2008
@@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations under
# the License.
+
module Buildr::Groovy
# EasyB is a Groovy based BDD framework.
Modified: incubator/buildr/trunk/lib/buildr/ide/idea.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/ide/idea.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/ide/idea.rb (original)
+++ incubator/buildr/trunk/lib/buildr/ide/idea.rb Fri Oct 17 12:20:14 2008
@@ -17,7 +17,6 @@
require 'buildr/core/project'
require 'buildr/packaging'
require 'stringio'
-require 'rexml/document'
module Buildr
Modified: incubator/buildr/trunk/lib/buildr/ide/idea7x.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/ide/idea7x.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/ide/idea7x.rb (original)
+++ incubator/buildr/trunk/lib/buildr/ide/idea7x.rb Fri Oct 17 12:20:14 2008
@@ -17,7 +17,7 @@
require 'buildr/core/project'
require 'buildr/packaging'
require 'stringio'
-require 'rexml/document'
+
module Buildr
module Idea7x #:nodoc:
@@ -207,4 +207,4 @@
class Buildr::Project
include Buildr::Idea7x
-end
+end
\ No newline at end of file
Modified: incubator/buildr/trunk/lib/buildr/java/ant.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/java/ant.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/java/ant.rb (original)
+++ incubator/buildr/trunk/lib/buildr/java/ant.rb Fri Oct 17 12:20:14 2008
@@ -14,7 +14,7 @@
# the License.
-require 'antwrap'
+gem 'Antwrap' ; autoload :Antwrap, 'antwrap'
require 'buildr/core/project'
require 'buildr/core/help'
Modified: incubator/buildr/trunk/lib/buildr/java/bdd.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/java/bdd.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/java/bdd.rb (original)
+++ incubator/buildr/trunk/lib/buildr/java/bdd.rb Fri Oct 17 12:20:14 2008
@@ -13,9 +13,11 @@
# License for the specific language governing permissions and limitations under
# the License.
+
require 'buildr/java/tests'
require 'buildr/java/test_result'
+
module Buildr
# Mixin for test frameworks using src/spec/{lang}
Modified: incubator/buildr/trunk/lib/buildr/java/pom.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/java/pom.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/java/pom.rb (original)
+++ incubator/buildr/trunk/lib/buildr/java/pom.rb Fri Oct 17 12:20:14 2008
@@ -14,7 +14,6 @@
# the License.
-require 'xmlsimple'
require 'buildr/packaging'
Modified: incubator/buildr/trunk/lib/buildr/java/test_result.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/java/test_result.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/java/test_result.rb (original)
+++ incubator/buildr/trunk/lib/buildr/java/test_result.rb Fri Oct 17 12:20:14 2008
@@ -13,7 +13,6 @@
# License for the specific language governing permissions and limitations under
# the License.
-require 'yaml'
module Buildr #:nodoc:
module TestFramework
Modified: incubator/buildr/trunk/lib/buildr/packaging/artifact_namespace.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/packaging/artifact_namespace.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/packaging/artifact_namespace.rb (original)
+++ incubator/buildr/trunk/lib/buildr/packaging/artifact_namespace.rb Fri Oct 17 12:20:14 2008
@@ -14,7 +14,7 @@
# the License.
-require 'buildr/java/version_requirement'
+require 'buildr/packaging/version_requirement'
module Buildr
Modified: incubator/buildr/trunk/lib/buildr/packaging/gems.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/packaging/gems.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/packaging/gems.rb (original)
+++ incubator/buildr/trunk/lib/buildr/packaging/gems.rb Fri Oct 17 12:20:14 2008
@@ -16,8 +16,8 @@
require 'buildr/packaging/package'
require 'buildr/packaging/zip'
-require 'rubyforge'
-require 'rubygems/package'
+gem 'rubyforge' ; autoload :RubyForge, 'rubyforge'
+Gem.autoload :Package, 'rubygems/package'
module Buildr
Modified: incubator/buildr/trunk/lib/buildr/packaging/tar.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/packaging/tar.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/packaging/tar.rb (original)
+++ incubator/buildr/trunk/lib/buildr/packaging/tar.rb Fri Oct 17 12:20:14 2008
@@ -15,7 +15,7 @@
require 'buildr/packaging/zip'
-require 'archive/tar/minitar'
+gem 'archive-tar-minitar' ; autoload :Archive, 'archive/tar/minitar'
module Buildr
Added: incubator/buildr/trunk/lib/buildr/packaging/version_requirement.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/packaging/version_requirement.rb?rev=705721&view=auto
==============================================================================
--- incubator/buildr/trunk/lib/buildr/packaging/version_requirement.rb (added)
+++ incubator/buildr/trunk/lib/buildr/packaging/version_requirement.rb Fri Oct 17 12:20:14 2008
@@ -0,0 +1,172 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with this
+# work for additional information regarding copyright ownership. The ASF
+# licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+
+module Buildr
+
+ #
+ # See ArtifactNamespace#need
+ class VersionRequirement
+
+ CMP_PROCS = Gem::Requirement::OPS.dup
+ CMP_REGEX = Gem::Requirement::OP_RE.dup
+ CMP_CHARS = CMP_PROCS.keys.join
+ BOOL_CHARS = '\|\&\!'
+ VER_CHARS = '\w\.\-'
+
+ class << self
+ # is +str+ a version string?
+ def version?(str)
+ /^\s*[#{VER_CHARS}]+\s*$/ === str
+ end
+
+ # is +str+ a version requirement?
+ def requirement?(str)
+ /[#{BOOL_CHARS}#{CMP_CHARS}\(\)]/ === str
+ end
+
+ # :call-seq:
+ # VersionRequirement.create(" >1 <2 !(1.5) ") -> requirement
+ #
+ # parse the +str+ requirement
+ def create(str)
+ instance_eval normalize(str)
+ rescue StandardError => e
+ raise "Failed to parse #{str.inspect} due to: #{e}"
+ end
+
+ private
+ def requirement(req)
+ unless req =~ /^\s*(#{CMP_REGEX})?\s*([#{VER_CHARS}]+)\s*$/
+ raise "Invalid requirement string: #{req}"
+ end
+ comparator, version = $1, $2
+ version = Gem::Version.new(0).tap { |v| v.version = version }
+ VersionRequirement.new(nil, [$1, version])
+ end
+
+ def negate(vreq)
+ vreq.negative = !vreq.negative
+ vreq
+ end
+
+ def normalize(str)
+ str = str.strip
+ if str[/[^\s\(\)#{BOOL_CHARS + VER_CHARS + CMP_CHARS}]/]
+ raise "version string #{str.inspect} contains invalid characters"
+ end
+ str.gsub!(/\s+(and|\&\&)\s+/, ' & ')
+ str.gsub!(/\s+(or|\|\|)\s+/, ' | ')
+ str.gsub!(/(^|\s*)not\s+/, ' ! ')
+ pattern = /(#{CMP_REGEX})?\s*[#{VER_CHARS}]+/
+ left_pattern = /[#{VER_CHARS}\)]$/
+ right_pattern = /^(#{pattern}|\()/
+ str = str.split.inject([]) do |ary, i|
+ ary << '&' if ary.last =~ left_pattern && i =~ right_pattern
+ ary << i
+ end
+ str = str.join(' ')
+ str.gsub!(/!([^=])?/, ' negate \1')
+ str.gsub!(pattern) do |expr|
+ case expr.strip
+ when 'not', 'negate' then 'negate '
+ else 'requirement("' + expr + '")'
+ end
+ end
+ str.gsub!(/negate\s+\(/, 'negate(')
+ str
+ end
+ end
+
+ def initialize(op, *requirements) #:nodoc:
+ @op, @requirements = op, requirements
+ end
+
+ # Is this object a composed requirement?
+ # VersionRequirement.create('1').composed? -> false
+ # VersionRequirement.create('1 | 2').composed? -> true
+ # VersionRequirement.create('1 & 2').composed? -> true
+ def composed?
+ requirements.size > 1
+ end
+
+ # Return the last requirement on this object having an = operator.
+ def default
+ default = nil
+ requirements.reverse.find do |r|
+ if Array === r
+ if !negative && (r.first.nil? || r.first.include?('='))
+ default = r.last.to_s
+ end
+ else
+ default = r.default
+ end
+ end
+ default
+ end
+
+ # Test if this requirement can be satisfied by +version+
+ def satisfied_by?(version)
+ return false unless version
+ unless version.kind_of?(Gem::Version)
+ raise "Invalid version: #{version.inspect}" unless self.class.version?(version)
+ version = Gem::Version.new(0).tap { |v| v.version = version.strip }
+ end
+ message = op == :| ? :any? : :all?
+ result = requirements.send message do |req|
+ if Array === req
+ cmp, rv = *req
+ CMP_PROCS[cmp || '='].call(version, rv)
+ else
+ req.satisfied_by?(version)
+ end
+ end
+ negative ? !result : result
+ end
+
+ # Either modify the current requirement (if it's already an or operation)
+ # or create a new requirement
+ def |(other)
+ operation(:|, other)
+ end
+
+ # Either modify the current requirement (if it's already an and operation)
+ # or create a new requirement
+ def &(other)
+ operation(:&, other)
+ end
+
+ # return the parsed expression
+ def to_s
+ str = requirements.map(&:to_s).join(" " + @op.to_s + " ").to_s
+ str = "( " + str + " )" if negative || requirements.size > 1
+ str = "!" + str if negative
+ str
+ end
+
+ attr_accessor :negative
+ protected
+ attr_reader :requirements, :op
+ def operation(op, other)
+ @op ||= op
+ if negative == other.negative && @op == op && other.requirements.size == 1
+ @requirements << other.requirements.first
+ self
+ else
+ self.class.new(op, self, other)
+ end
+ end
+ end # VersionRequirement
+end
Modified: incubator/buildr/trunk/lib/buildr/packaging/zip.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/packaging/zip.rb?rev=705721&r1=705720&r2=705721&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/packaging/zip.rb (original)
+++ incubator/buildr/trunk/lib/buildr/packaging/zip.rb Fri Oct 17 12:20:14 2008
@@ -14,7 +14,7 @@
# the License.
-$LOADED_FEATURES.unshift 'ftools' if RUBY_VERSION >= '1.9.0'
+$LOADED_FEATURES.unshift 'ftools' if RUBY_VERSION >= '1.9.0' # Required to properly load RubyZip under Ruby 1.9
require 'zip/zip'
require 'zip/zipfilesystem'