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'