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/01/05 11:07:08 UTC

svn commit: r609118 [1/2] - in /incubator/buildr/trunk: ./ lib/ lib/core/ lib/java/ spec/

Author: assaf
Date: Sat Jan  5 02:06:53 2008
New Revision: 609118

URL: http://svn.apache.org/viewvc?rev=609118&view=rev
Log:
Simplified the packaging API, and lets the compiler pick the default package type, if not, use :zip

Added:
    incubator/buildr/trunk/lib/core/package.rb
    incubator/buildr/trunk/spec/spec_helpers.rb
Modified:
    incubator/buildr/trunk/CHANGELOG
    incubator/buildr/trunk/lib/core.rb
    incubator/buildr/trunk/lib/core/build.rb
    incubator/buildr/trunk/lib/core/common.rb
    incubator/buildr/trunk/lib/core/compile.rb
    incubator/buildr/trunk/lib/core/project.rb
    incubator/buildr/trunk/lib/core/test.rb
    incubator/buildr/trunk/lib/java/compilers.rb
    incubator/buildr/trunk/lib/java/packaging.rb
    incubator/buildr/trunk/lib/java/test_frameworks.rb
    incubator/buildr/trunk/spec/archive_spec.rb
    incubator/buildr/trunk/spec/artifact_spec.rb
    incubator/buildr/trunk/spec/build_spec.rb
    incubator/buildr/trunk/spec/checks_spec.rb
    incubator/buildr/trunk/spec/common_spec.rb
    incubator/buildr/trunk/spec/compile_spec.rb
    incubator/buildr/trunk/spec/packaging_spec.rb
    incubator/buildr/trunk/spec/project_spec.rb
    incubator/buildr/trunk/spec/sandbox.rb
    incubator/buildr/trunk/spec/test_spec.rb
    incubator/buildr/trunk/spec/transport_spec.rb

Modified: incubator/buildr/trunk/CHANGELOG
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/CHANGELOG?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/CHANGELOG (original)
+++ incubator/buildr/trunk/CHANGELOG Sat Jan  5 02:06:53 2008
@@ -10,6 +10,8 @@
 * Changed: Test extension and TestTask are now separate from the Java module.  JUnit and TestNG are Java specific extensions picked using test.with(:name).
 * Changed: For compile and test, use dependencies instead of classpath (with works are before).
 * Changed: Test framework componentized along the same lines as the compilers.
+* Changed: The way packaging is handled: package_as_[type] is now called once for a given package with the exact file name.  If packaging requires a change to the specifiction (e.g. a different file type than the package type), add a package_as_[type]_spec method.
+* Changed: The default packaging type is inferred from the compiler, and without a compiler, defaults to :zip.
 * Removed: Prepare tasks removed.
 * Removed: All deprecated features since 1.1.  If you've seen warnings before, except the build to break.
 * Fixed: Artifact.pom resolves artifact without classifier, i.e org.testng:testng:jar:jdk15:5.1 uses org.testng:testng:pom:5.1 (Tommy).

Modified: incubator/buildr/trunk/lib/core.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/core.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/core.rb (original)
+++ incubator/buildr/trunk/lib/core.rb Sat Jan  5 02:06:53 2008
@@ -3,8 +3,10 @@
 require 'core/environment'
 require 'core/help'
 require 'core/build'
+require 'core/package'
 require 'core/compile'
 require 'core/test'
+require 'core/checks'
 require 'core/generate'
 
 class Buildr::Project
@@ -14,5 +16,6 @@
   include Buildr::Build
   include Buildr::Compile
   include Buildr::Test
+  include Buildr::Package
   include Buildr::Checks
 end

Modified: incubator/buildr/trunk/lib/core/build.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/core/build.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/core/build.rb (original)
+++ incubator/buildr/trunk/lib/core/build.rb Sat Jan  5 02:06:53 2008
@@ -23,8 +23,6 @@
 
   module Build
 
-    BUILD_TASKS = [ :build, :clean, :package, :install, :uninstall, :upload ]
-
     include Extension
 
     first_time do
@@ -32,21 +30,14 @@
       Project.local_task('build') { |name| "Building #{name}" }
       desc 'Clean files generated during a build'
       Project.local_task('clean') { |name| "Cleaning #{name}" }
-      desc 'Create packages'
-      Project.local_task('package'=>'build') { |name| "Packaging #{name}" }
-      desc 'Install packages created by the project'
-      Project.local_task('install'=>'package') { |name| "Installing packages from #{name}" }
-      desc 'Remove previously installed packages'
-      Project.local_task('uninstall') { |name| "Uninstalling packages from #{name}" }
-      desc 'Upload packages created by the project'
-      Project.local_task('upload'=>'package') { |name| "Deploying packages from #{name}" }
 
       desc 'The default task it build'
       task 'default'=>'build'
     end
 
     before_define do |project|
-      BUILD_TASKS.each { |name| project.recursive_task name }
+      project.recursive_task 'build'
+      project.recursive_task 'clean'
       project.clean do
         verbose(true) do
           rm_rf project.path_to(:target)

Modified: incubator/buildr/trunk/lib/core/common.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/core/common.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/core/common.rb (original)
+++ incubator/buildr/trunk/lib/core/common.rb Sat Jan  5 02:06:53 2008
@@ -244,7 +244,7 @@
     # For example:
     #   filter.from("src").into("target").using("build"=>Time.now)
     def from(*sources)
-      @sources |= sources.flatten.map { |dir| file(File.expand_path(dir.to_s)) }
+      @sources |= sources.flatten.map { |dir| file(dir.to_s) }
       self
     end
 
@@ -259,7 +259,7 @@
     # For example:
     #   filter.from("src").into("target").using("build"=>Time.now)
     def into(dir)
-      @target = file(File.expand_path(dir.to_s)) { |task| run if target == task && !sources.empty? }
+      @target = file(dir.to_s) { |task| run if target == task && !sources.empty? }
       self
     end
 

Modified: incubator/buildr/trunk/lib/core/compile.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/core/compile.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/core/compile.rb (original)
+++ incubator/buildr/trunk/lib/core/compile.rb Sat Jan  5 02:06:53 2008
@@ -1,14 +1,22 @@
 require "core/common"
 
 module Buildr
+
+  # The underlying compiler used by CompileTask.
+  # To add a new compiler, extend Compiler::Base and add your compiler using:
+  #   Buildr::Compiler.add MyCompiler
   module Compiler
 
     class << self
 
+      # Returns true if the specified compiler exists.
+      def has?(name)
+        @compilers.has_key?(name.to_sym)
+      end
+
       # Select a compiler by its name.
       def select(name)
-        raise ArgumentError, "No #{name} compiler available. Did you install it?" unless @compilers.has_key?(name.to_sym)
-        @compilers[name.to_sym]
+        @compilers[name.to_sym] or raise ArgumentError, "No #{name} compiler available. Did you install it?"
       end
 
       # Identify which compiler applies based on one of two arguments:
@@ -20,18 +28,23 @@
       end
 
       # Adds a compiler to the list of supported compiler.
+      #   
+      # For example:
+      #   Buildr::Compiler.add Buildr::Javac
       def add(compiler)
-        @compilers ||= {}
         compiler = compiler.new if Class === compiler
         @compilers[compiler.name.to_sym] = compiler
       end
 
-      def compilers #:nodoc:
+      # Returns a list of available compilers.
+      def compilers
         @compilers.values.clone
       end
 
     end
 
+    @compilers = {}
+
 
     # Base class for all compilers, with common functionality.  Extend and over-ride as you see fit
     # (see Javac as an example).
@@ -57,6 +70,8 @@
       attr_reader :target_path
       # Extension for target files (e.g. '.class').
       attr_reader :target_ext
+      # The default packaging type (e.g. :jar).
+      attr_reader :packaging
 
       # Used by Compiler.identify to determine if this compiler applies to the current project.
       # The default implementation looks for either the supplied source directories, or the
@@ -109,7 +124,7 @@
         parent = Project.task_in_parent_project(task.name)
         if parent.respond_to?(:options)
           missing = supported.flatten - task.options.to_hash.keys
-          task.options.merge( missing.inject({}) { |hash, key| hash.update(key=>parent.options[key]) } )
+          missing.each { |option| task.options[option] = parent.options[option] }
         end
       end
 
@@ -159,7 +174,7 @@
     def initialize(*args) #:nodoc:
       super
       parent = Project.task_in_parent_project(name)
-      @options = OpenObject.new#(parent.respond_to?(:options) && parent.options)
+      @options = OpenObject.new
       @sources = []
       @dependencies = []
 
@@ -238,8 +253,7 @@
     #   compile(src_dir).into(target_dir).with(artifacts)
     # Both compile.invoke and file(target_dir).invoke will compile the source files.
     def into(path)
-      path = File.expand_path(path.to_s)
-      @target = file(path).enhance([self]) unless @target && @target.to_s == path
+      @target = file(path.to_s).enhance([self]) unless @target.to_s == path.to_s
       self
     end
 
@@ -257,7 +271,7 @@
     #   compile.using(:scala)
     def using(*args)
       args.pop.each { |key, value| options.send "#{key}=", value } if Hash === args.last
-      select args.pop until args.empty?
+      self.compiler = args.pop until args.empty?
       self
     end
 
@@ -265,10 +279,7 @@
     # based on existing source directories (e.g. src/main/java), or by requesting
     # a specific compiler (see #using).
     def compiler
-      unless @compiler
-        compiler = Compiler.identify(:sources=>sources) unless sources.empty?
-        select(compiler) if compiler
-      end
+      self.compiler = Compiler.identify(:sources=>sources) unless sources.empty? || @compiler
       @compiler && @compiler.name
     end
 
@@ -277,6 +288,11 @@
       compiler && @compiler.language
     end
 
+    # Returns the default packaging type for this compiler, if known.
+    def packaging
+      compiler && @compiler.packaging
+    end
+
     def timestamp #:nodoc:
       # If we compiled successfully, then the target directory reflects that.
       # If we didn't, see needed?
@@ -286,7 +302,8 @@
   protected
 
     # Selects which compiler to use.
-    def select(compiler) #:nodoc:
+    def compiler=(compiler) #:nodoc:
+      return self unless compiler
       compiler = Compiler.select(compiler) unless Compiler::Base === compiler
       unless @compiler == compiler
         raise "#{@compiler} compiler already selected for this project" if @compiler
@@ -298,8 +315,7 @@
 
     def associate(source, target) #:nodoc:
       @associate = { :source=>source, :target=>target }
-      compiler = Compiler.identify(:source=>source)
-      select(compiler) if compiler
+      self.compiler = Compiler.identify(:source=>source)
     end
 
   private
@@ -314,7 +330,6 @@
       return true if compile_map.any? { |source, target| !File.exist?(target) || File.stat(source).mtime > File.stat(target).mtime }
       oldest = compile_map.map { |source, target| File.stat(target).mtime }.min
       return dependencies.any? { |path| application[path].timestamp > oldest }
-      return true
     end
 
     def invoke_prerequisites(args, chain) #:nodoc:
@@ -419,6 +434,7 @@
     end
 
     after_define do |project|
+      file(project.resources.target.to_s => project.resources) if project.resources.target
       if project.compile.target
         # This comes last because the target path is set inside the project definition.
         project.build project.compile.target

Added: incubator/buildr/trunk/lib/core/package.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/core/package.rb?rev=609118&view=auto
==============================================================================
--- incubator/buildr/trunk/lib/core/package.rb (added)
+++ incubator/buildr/trunk/lib/core/package.rb Sat Jan  5 02:06:53 2008
@@ -0,0 +1,213 @@
+require 'core/project'
+require 'core/compile'
+require 'java/artifact'
+
+module Buildr
+  # Methods added to Project to support packaging and tasks for packaging,
+  # installing and uploading packages.
+  module Package
+
+    include Extension
+
+    first_time do
+      desc 'Create packages'
+      Project.local_task('package'=>'build') { |name| "Packaging #{name}" }
+      desc 'Install packages created by the project'
+      Project.local_task('install'=>'package') { |name| "Installing packages from #{name}" }
+      desc 'Remove previously installed packages'
+      Project.local_task('uninstall') { |name| "Uninstalling packages from #{name}" }
+      desc 'Upload packages created by the project'
+      Project.local_task('upload'=>'package') { |name| "Deploying packages from #{name}" }
+      # Anything that comes after local packaging (install, deploy) executes the integration tests,
+      # which do not conflict with integration invoking the project's own packaging (package=>
+      # integration=>foo:package is not circular, just confusing to debug.)
+      task 'package' do
+        task('integration').invoke if Buildr.options.test && Rake.application.original_dir == Dir.pwd
+      end
+    end
+
+    before_define do |project|
+      [ :package, :install, :uninstall, :upload ].each { |name| project.recursive_task name }
+      # Need to run build before package, since package is often used as a dependency by tasks that
+      # expect build to happen.
+      project.task('package'=>project.task('build'))
+      project.group ||= project.parent && project.parent.group || project.name
+      project.version ||= project.parent && project.parent.version
+    end
+
+    # The project's identifier. Same as the project name, with colons replaced by dashes.
+    # The ID for project foo:bar is foo-bar.
+    def id
+      name.gsub(':', '-')
+    end
+
+    # Group used for packaging. Inherited from parent project. Defaults to the top-level project name.
+    attr_accessor :group
+
+    # Version used for packaging. Inherited from parent project.
+    attr_accessor :version
+
+    # :call-seq:
+    #   package(type, spec?) => task
+    #
+    # Defines and returns a package created by this project.
+    #
+    # The first argument declares the package type. For example, :jar to create a JAR file.
+    # The package is an artifact that takes its artifact specification from the project.
+    # You can override the artifact specification by passing various options in the second
+    # argument, for example:
+    #   package(:zip, :classifier=>'sources')
+    #
+    # Packages that are ZIP files provides various ways to include additional files, directories,
+    # and even merge ZIPs together. Have a look at ZipTask for more information. In case you're
+    # wondering, JAR and WAR packages are ZIP files.
+    #
+    # You can also enhance a JAR package using the ZipTask#with method that accepts the following options:
+    # * :manifest -- Specifies how to create the MANIFEST.MF. By default, uses the project's
+    #   #manifest property.
+    # * :meta_inf -- Specifies files to be included in the META-INF directory. By default,
+    #   uses the project's #meta-inf property.
+    #
+    # The WAR package supports the same options and adds a few more:
+    # * :classes -- Directories of class files to include in WEB-INF/classes. Includes the compile
+    #   target directory by default.
+    # * :libs -- Artifacts and files to include in WEB-INF/libs. Includes the compile classpath
+    #   dependencies by default.
+    #
+    # For example:
+    #   define 'project' do
+    #     define 'beans' do
+    #       package :jar
+    #     end
+    #     define 'webapp' do
+    #       compile.with project('beans')
+    #       package(:war).with :libs=>MYSQL_JDBC
+    #     end
+    #     package(:zip, :classifier=>'sources').include path_to('.')
+    #  end
+    #
+    # Two other packaging types are:
+    # * package :sources -- Creates a ZIP file with the source code and classifier 'sources', for use by IDEs.
+    # * package :javadoc -- Creates a ZIP file with the Javadocs and classifier 'javadoc'. You can use the
+    #   javadoc method to further customize it.
+    #
+    # A package is also an artifact. The following tasks operate on packages created by the project:
+    #   buildr upload     # Upload packages created by the project
+    #   buildr install    # Install packages created by the project
+    #   buildr package    # Create packages
+    #   buildr uninstall  # Remove previously installed packages
+    #
+    # If you want to add additional packaging types, implement a method with the name package_as_[type]
+    # that accepts a file name and returns an appropriate Rake task.  For example:
+    #   def package_as_zip(file_name) #:nodoc:
+    #     ZipTask.define_task(file_name)
+    #   end
+    #
+    # The file name is determined from the specification passed to the package method, however, some
+    # packagers need to override this.  For example, package(:sources) produces a file with the extension
+    # 'zip' and the classifier 'sources'.  If you need to overwrite the default implementation, you should
+    # also include a method named package_as_[type]_respec.  For example:
+    #   def package_as_sources_spec(spec) #:nodoc:
+    #     { :type=>:zip, :classifier=>'sources' }.merge(spec)
+    #   end
+    def package(type = nil, spec = nil)
+      spec = spec.nil? ? {} : spec.dup
+      type ||= compile.packaging || :zip
+      rake_check_options spec, *ActsAsArtifact::ARTIFACT_ATTRIBUTES
+      spec[:id] ||= self.id
+      spec[:group] ||= self.group
+      spec[:version] ||= self.version
+      spec[:type] ||= type
+
+      packager = method("package_as_#{type}") rescue
+        fail("Don't know how to create a package of type #{type}")
+      if packager.arity == 1
+        spec = send("package_as_#{type}_spec", spec) if respond_to?("package_as_#{type}_spec")
+        file_name = path_to(:target, Artifact.hash_to_file_name(spec))
+        package = Rake::Task[file_name] rescue packager.call(file_name)
+      else
+        warn_deprecated "We changed the way package_as methods are implemented.  See the package method documentation for more details."
+        file_name = path_to(:target, Artifact.hash_to_file_name(spec))
+        package = packager.call(file_name, spec)
+      end
+      unless packages.include?(package)
+        # Make it an artifact using the specifications, and tell it how to create a POM.
+        package.extend ActsAsArtifact
+        package.send :apply_spec, spec.only(*Artifact::ARTIFACT_ATTRIBUTES)
+        # Another task to create the POM file.
+        pom = package.pom
+        pom.enhance do
+          mkpath File.dirname(pom.name), :verbose=>false
+          File.open(pom.name, 'w') { |file| file.write pom.pom_xml }
+        end
+
+        # We already run build before package, but we also need to do so if the package itself is
+        # used as a dependency, before we get to run the package task.
+        task 'package'=>package
+        package.enhance [task('build')]
+
+        # Install the artifact along with its POM. Since the artifact (package task) is created
+        # in the target directory, we need to copy it into the local repository. However, the
+        # POM artifact (created by calling artifact on its spec) is already mapped to its right
+        # place in the local repository, so we only need to invoke it.
+        installed = file(Buildr.repositories.locate(package)=>package) { |task|
+          verbose(Rake.application.options.trace || false) do
+            mkpath File.dirname(task.name), :verbose=>false
+            cp package.name, task.name
+          end
+          puts "Installed #{task.name}" if verbose
+        }
+        task 'install'=>[installed, pom]
+        task 'uninstall' do |task|
+          verbose(Rake.application.options.trace || false) do
+            [ installed, pom ].map(&:to_s).each { |file| rm file if File.exist?(file) } 
+          end
+        end
+        task('upload') { package.pom.invoke ; package.pom.upload ; package.upload }
+
+        # Add the package to the list of packages created by this project, and
+        # register it as an artifact. The later is required so if we look up the spec
+        # we find the package in the project's target directory, instead of finding it
+        # in the local repository and attempting to install it.
+        packages << package
+        Artifact.register package, pom
+      end
+      package
+    end
+
+    # :call-seq:
+    #   packages => tasks
+    #
+    # Returns all packages created by this project. A project may create any number of packages.
+    #
+    # This method is used whenever you pass a project to Buildr#artifact or any other method
+    # that accepts artifact specifications and projects. You can use it to list all packages
+    # created by the project. If you want to return a specific package, it is often more
+    # convenient to call #package with the type.
+    def packages
+      @packages ||= []
+    end
+
+  protected
+
+    def package_as_zip(file_name) #:nodoc:
+      ZipTask.define_task(file_name)
+    end
+
+    def package_as_tar(file_name) #:nodoc:
+      TarTask.define_task(file_name)
+    end
+    alias :package_as_tgz :package_as_tar
+
+    def package_as_sources_spec(spec) #:nodoc:
+      spec.merge(:type=>:zip, :classifier=>'sources')
+    end
+
+    def package_as_sources(file_name) #:nodoc:
+      ZipTask.define_task(file_name).tap do |zip|
+        zip.include :from=>compile.sources
+      end
+    end
+
+  end
+end

Modified: incubator/buildr/trunk/lib/core/project.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/core/project.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/core/project.rb (original)
+++ incubator/buildr/trunk/lib/core/project.rb Sat Jan  5 02:06:53 2008
@@ -424,7 +424,7 @@
         if parent
           # For sub-project, a good default is a directory in the parent's base_dir,
           # using the same name as the project.
-          @base_dir = File.join(parent.base_dir, name.split(':').last)
+          @base_dir = File.expand_path(name.split(':').last, parent.base_dir)
         else
           # For top-level project, a good default is the directory where we found the Buildfile.
           @base_dir = Dir.pwd

Modified: incubator/buildr/trunk/lib/core/test.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/core/test.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/core/test.rb (original)
+++ incubator/buildr/trunk/lib/core/test.rb Sat Jan  5 02:06:53 2008
@@ -5,30 +5,48 @@
 
 module Buildr
 
+  # The underlying test framework used by TestTask.
+  # To add a new test framework, extend TestFramework::Base and add your framework using:
+  #   Buildr::TestFramework.add MyFramework
   class TestFramework
 
     class << self
+
+      # Returns true if the specified test framework exists.
       def has?(name)
-        frameworks.has_key?(name)
+        @frameworks.has_key?(name.to_sym)
       end
 
+      # Select a test framework by its name.
       def select(name)
-        raise ArgumentError, "No #{name} framework available. Did you install it?" unless frameworks.include?(name.to_sym)
-        frameworks[name.to_sym]
+        @frameworks[name.to_sym] or raise ArgumentError, "No #{name} framework available. Did you install it?"
+      end
+
+      # Identify which compiler applies for this project.
+      def identify_from(project)
+        @frameworks.values.detect { |framework| compiler.supports?(project) }
       end
 
       # Adds a test framework to the list of supported frameworks.
+      #   
+      # For example:
+      #   Buildr::TestFramework.add Buildr::JUnit
       def add(framework)
         framework = framework.new if Class === framework
-        frameworks[framework.name.to_sym] = framework
+        @frameworks[framework.name.to_sym] = framework
       end
 
-      def frameworks #:nodoc:
-        @frameworks ||= {}
+      # Returns a list of available test frameworks.
+      def frameworks
+        @frameworks.values.clone
       end
 
     end
 
+    @frameworks = {}
+
+    # Base class for all test frameworks, with common functionality.  Extend and over-ride as you see fit
+    # (see JUnit as an example).
     class Base
 
       def initialize(args = {})
@@ -46,6 +64,10 @@
         Dir[*Array(patterns).map { |pattern| "#{path}/**/#{pattern}" }]
       end
 
+      def supports?(project)
+        false
+      end
+
     end
   
   end
@@ -307,6 +329,7 @@
     #
     # Returns the test framework, e.g. :junit, :testng.
     def framework
+      @framework ||= TestFramework.identify_from(@project)
       @framework && @framework.name
     end
 
@@ -435,12 +458,6 @@
         end
       end
 
-      # Anything that comes after local packaging (install, deploy) executes the integration tests,
-      # which do not conflict with integration invoking the project's own packaging (package=>
-      # integration=>foo:package is not circular, just confusing to debug.)
-      task 'package' do
-        task('integration').invoke if Buildr.options.test && Rake.application.original_dir == Dir.pwd
-      end
     end
     
     before_define do |project|

Modified: incubator/buildr/trunk/lib/java/compilers.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/java/compilers.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/java/compilers.rb (original)
+++ incubator/buildr/trunk/lib/java/compilers.rb Sat Jan  5 02:06:53 2008
@@ -26,7 +26,7 @@
       OPTIONS = [:warnings, :debug, :deprecation, :source, :target, :lint, :other]
 
       def initialize #:nodoc:
-        super :language=>:java, :target_path=>'classes', :target_ext=>'.class'
+        super :language=>:java, :target_path=>'classes', :target_ext=>'.class', :packaging=>:jar
       end
 
       def configure(task, source, target) #:nodoc:
@@ -91,7 +91,8 @@
         @files = FileList[]
         enhance do |task|
           rm_rf target.to_s, :verbose=>false
-          Java.javadoc source_files, options.merge(:classpath=>classpath, :sourcepath=>sourcepath, :name=>name, :output=>target.to_s)
+          Java.javadoc source_files, options.merge(:classpath=>classpath, :sourcepath=>sourcepath,
+            :name=>name, :output=>File.expand_path(target.to_s))
           touch target.to_s, :verbose=>false
         end
       end
@@ -108,8 +109,7 @@
       # For example:
       #   package :zip, :classifier=>"docs", :include=>javadoc.target
       def into(path)
-        path = File.expand_path(path.to_s)
-        @target = file(path).enhance([self]) unless @target && @target.to_s == path
+        @target = file(path.to_s).enhance([self]) unless @target && @target.to_s == path.to_s
         self
       end
 
@@ -264,7 +264,7 @@
       sources = compile.sources if sources.empty?
       file(path_to(:target, "generated/apt")=>sources) do |task|
         Java.apt(sources.map(&:to_s) - [task.name], :output=>task.name,
-          :classpath=>compile.classpath, :source=>compile.options.source)
+          :classpath=>compile.dependencies, :source=>compile.options.source)
       end
     end
 

Modified: incubator/buildr/trunk/lib/java/packaging.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/java/packaging.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/java/packaging.rb (original)
+++ incubator/buildr/trunk/lib/java/packaging.rb Sat Jan  5 02:06:53 2008
@@ -1,16 +1,13 @@
-require "core/project"
-require "core/compile"
-require "core/test"
-require "java/artifact"
-require "java/java"
-require "tasks/zip"
-require "tasks/tar"
+require 'core/package'
+require 'java/java'
+require 'tasks/zip'
+require 'tasks/tar'
 
 
 module Buildr
   module Java
 
-    # Methods added to Project to support packaging.
+    # Adds packaging for Java projects: JAR, WAR, AAR, EAR, Javadoc.
     module Packaging
 
       # Adds support for MANIFEST.MF and other META-INF files.
@@ -20,7 +17,7 @@
           base.send :alias_method_chain, :initialize, :manifest
         end
 
-        MANIFEST_HEADER = ["Manifest-Version: 1.0", "Created-By: Buildr"]
+        MANIFEST_HEADER = ['Manifest-Version: 1.0', 'Created-By: Buildr']
 
         # Specifies how to create the manifest file.
         attr_accessor :manifest
@@ -35,19 +32,19 @@
 
           prepare do
             @prerequisites << manifest if String === manifest || Rake::Task === manifest
-            [meta_inf].flatten.map { |file| file.to_s }.uniq.each { |file| path("META-INF").include file }
+            [meta_inf].flatten.map { |file| file.to_s }.uniq.each { |file| path('META-INF').include file }
           end
 
           enhance do
             if manifest
               # Tempfiles gets deleted on garbage collection, so we're going to hold on to it
               # through instance variable not closure variable.
-              Tempfile.open "MANIFEST.MF" do |@manifest_tmp|
+              Tempfile.open 'MANIFEST.MF' do |@manifest_tmp|
                 lines = String === manifest || Rake::Task === manifest ? manifest_lines_from(File.read(manifest.to_s)) :
                   manifest_lines_from(manifest)
                 @manifest_tmp.write((MANIFEST_HEADER + lines).join("\n"))
                 @manifest_tmp.write "\n"
-                path("META-INF").include @manifest_tmp.path, :as=>"MANIFEST.MF"
+                path('META-INF').include @manifest_tmp.path, :as=>'MANIFEST.MF'
               end
             end
           end
@@ -62,22 +59,22 @@
               map { |line| manifest_wrap_at_72(line) }.flatten
           when Array
             arg.map { |section|
-              name = section.has_key?("Name") ? ["Name: #{section["Name"]}"] : []
-              name + section.except("Name").map { |name, value| "#{name}: #{value}" }.sort + [""]
+              name = section.has_key?('Name') ? ["Name: #{section['Name']}"] : []
+              name + section.except('Name').map { |name, value| "#{name}: #{value}" }.sort + ['']
             }.flatten.map { |line| manifest_wrap_at_72(line) }.flatten
           when Proc, Method
             manifest_lines_from(arg.call)
           when String
             arg.split("\n").map { |line| manifest_wrap_at_72(line) }.flatten
           else
-            fail "Invalid manifest, expecting Hash, Array, file name/task or proc/method."
+            fail 'Invalid manifest, expecting Hash, Array, file name/task or proc/method.'
           end
         end
 
         def manifest_wrap_at_72(arg)
           #return arg.map { |line| manifest_wrap_at_72(line) }.flatten.join("\n") if Array === arg
           return arg if arg.size < 72
-          [ arg[0..70], manifest_wrap_at_72(" " + arg[71..-1]) ]
+          [ arg[0..70], manifest_wrap_at_72(' ' + arg[71..-1]) ]
         end
 
       end
@@ -103,8 +100,8 @@
       # the META-INF directory.
       #
       # For example:
-      #   package(:jar).with(:manifest=>"src/MANIFEST.MF")
-      #   package(:jar).meta_inf << file("README")
+      #   package(:jar).with(:manifest=>'src/MANIFEST.MF')
+      #   package(:jar).meta_inf << file('README')
       class JarTask < ZipTask
 
         def initialize(*args) #:nodoc:
@@ -119,7 +116,7 @@
         # but other tasks (e.g. JarTask, WarTask) do.
         #
         # For example:
-        #   package(:jar).with(:manifest=>"MANIFEST_MF")
+        #   package(:jar).with(:manifest=>'MANIFEST_MF')
         def with(*args)
           super args.pop if Hash === args.last
           include :from=>args
@@ -137,7 +134,7 @@
       #   directory.
       #
       # For example:
-      #   package(:war).with(:libs=>"log4j:log4j:jar:1.1")
+      #   package(:war).with(:libs=>'log4j:log4j:jar:1.1')
       class WarTask < JarTask
 
         # Directories with class files to include under WEB-INF/classes.
@@ -151,8 +148,8 @@
           @classes = []
           @libs = []
           prepare do
-            @classes.to_a.flatten.each { |classes| path("WEB-INF/classes").include classes, :as=>"." }
-            path("WEB-INF/lib").include Buildr.artifacts(@libs) unless @libs.nil? || @libs.empty?
+            @classes.to_a.flatten.each { |classes| path('WEB-INF/classes').include classes, :as=>'.' }
+            path('WEB-INF/lib').include Buildr.artifacts(@libs) unless @libs.nil? || @libs.empty?
           end
         end
 
@@ -178,11 +175,11 @@
       # * :libs -- Array of files, tasks, artifact specifications, etc that will be added to the /lib directory.
       #
       # For example:
-      #   package(:aar).with(:libs=>"log4j:log4j:jar:1.1")
+      #   package(:aar).with(:libs=>'log4j:log4j:jar:1.1')
       #
-      #   filter.from("src/main/axis2").into("target").include("services.xml", "*.wsdl").using("http_port"=>"8080")
+      #   filter.from('src/main/axis2').into('target').include('services.xml', '*.wsdl').using('http_port'=>'8080')
       #   package(:aar).wsdls.clear
-      #   package(:aar).with(:services_xml=>_("target/services.xml"), :wsdls=>_("target/*.wsdl"))
+      #   package(:aar).with(:services_xml=>_('target/services.xml'), :wsdls=>_('target/*.wsdl'))
       class AarTask < JarTask
         # Artifacts to include under /lib.
         attr_accessor :libs
@@ -196,9 +193,9 @@
           @libs = []
           @wsdls = []
           prepare do
-            path("META-INF").include @wsdls
-            path("META-INF").include @services_xml, :as=>["services.xml"] if @services_xml
-            path("lib").include Buildr.artifacts(@libs) unless @libs.nil? || @libs.empty?
+            path('META-INF').include @wsdls
+            path('META-INF').include @services_xml, :as=>['services.xml'] if @services_xml
+            path('lib').include Buildr.artifacts(@libs) unless @libs.nil? || @libs.empty?
           end
         end
 
@@ -215,11 +212,6 @@
       include Extension
 
       before_define do |project|
-        # Need to run buildr before package, since package is often used as a dependency by tasks that
-        # expect build to happen.
-        project.task("package"=>project.task("build"))
-        project.group ||= project.parent && project.parent.group || project.name
-        project.version ||= project.parent && project.parent.version
         project.manifest ||= project.parent && project.parent.manifest ||
           { 'Build-By'=>ENV['USER'], 'Build-Jdk'=>Java.version,
             'Implementation-Title'=>project.comment || project.name,
@@ -229,22 +221,6 @@
       end
 
 
-      # Options accepted by #package method for all package types.
-      PACKAGE_OPTIONS = [:group, :id, :version, :type, :classifier] #:nodoc:
-
-      # The project's identifier. Same as the project name, with colons replaced by dashes.
-      # The ID for project foo:bar is foo-bar.
-      attr_reader :id
-      def id()
-        name.gsub(":", "-")
-      end
-
-      # Group used for packaging. Inherited from parent project. Defaults to the top-level project name.
-      attr_accessor :group
-
-      # Version used for packaging. Inherited from parent project.
-      attr_accessor :version
-
       # Manifest used for packaging. Inherited from parent project. The default value is a hash that includes
       # the Build-By, Build-Jdk, Implementation-Title and Implementation-Version values.
       # The later are taken from the project's comment (or name) and version number.
@@ -255,136 +231,12 @@
       attr_accessor :meta_inf
 
       # :call-seq:
-      #   package(type, spec?) => task
-      #
-      # Defines and returns a package created by this project.
-      #
-      # The first argument declares the package type. For example, :jar to create a JAR file.
-      # The package is an artifact that takes its artifact specification from the project.
-      # You can override the artifact specification by passing various options in the second
-      # argument, for example:
-      #   package(:zip, :classifier=>"sources")
-      #
-      # Packages that are ZIP files provides various ways to include additional files, directories,
-      # and even merge ZIPs together. Have a look at ZipTask for more information. In case you're
-      # wondering, JAR and WAR packages are ZIP files.
-      #
-      # You can also enhance a JAR package using the ZipTask#with method that accepts the following options:
-      # * :manifest -- Specifies how to create the MANIFEST.MF. By default, uses the project's
-      #   #manifest property.
-      # * :meta_inf -- Specifies files to be included in the META-INF directory. By default,
-      #   uses the project's #meta-inf property.
-      #
-      # The WAR package supports the same options and adds a few more:
-      # * :classes -- Directories of class files to include in WEB-INF/classes. Includes the compile
-      #   target directory by default.
-      # * :libs -- Artifacts and files to include in WEB-INF/libs. Includes the compile classpath
-      #   dependencies by default.
-      #
-      # For example:
-      #   define "project" do
-      #     define "beans" do
-      #       package :jar
-      #     end
-      #     define "webapp" do
-      #       compile.with project("beans")
-      #       package(:war).with :libs=>MYSQL_JDBC
-      #     end
-      #     package(:zip, :classifier=>"sources").include path_to(".")
-      #  end
-      #
-      # Two other packaging types are:
-      # * package :sources -- Creates a ZIP file with the source code and classifier "sources", for use by IDEs.
-      # * package :javadoc -- Creates a ZIP file with the Javadocs and classifier "javadoc". You can use the
-      #   javadoc method to further customize it.
-      #
-      # A package is also an artifact. The following tasks operate on packages created by the project:
-      #   buildr upload     # Upload packages created by the project
-      #   buildr install    # Install packages created by the project
-      #   buildr package    # Create packages
-      #   buildr uninstall  # Remove previously installed packages
-      #
-      # If you want to add additional packaging types, implement a method with the name package_as_[type]
-      # that accepts two arguments, the file name and a hash of options. You can change the options and
-      # file name, e.g. to add a classifier or change the file type. Your method may be called multiple times,
-      # and must return the same file task on each call.
-      def package(type = :jar, options = nil)
-        options = options.nil? ? {} : options.dup
-        rake_check_options options, *ActsAsArtifact::ARTIFACT_ATTRIBUTES
-        options[:id] ||= self.id
-        options[:group] ||= self.group
-        options[:version] ||= self.version
-        options[:type] = type
-        file_name = path_to(:target, Artifact.hash_to_file_name(options))
-
-        packager = method("package_as_#{type}") rescue
-          fail("Don't know how to create a package of type #{type}")
-        package = packager.call(file_name, options)
-        unless packages.include?(package)
-          # Make it an artifact using the specifications, and tell it how to create a POM.
-          package.extend ActsAsArtifact
-          package.send :apply_spec, options.only(*Artifact::ARTIFACT_ATTRIBUTES)
-          # Another task to create the POM file.
-          pom = package.pom
-          pom.enhance do
-            mkpath File.dirname(pom.name), :verbose=>false
-            File.open(pom.name, "w") { |file| file.write pom.pom_xml }
-          end
-
-          # We already run build before package, but we also need to do so if the package itself is
-          # used as a dependency, before we get to run the package task.
-          task "package"=>package
-          package.enhance [task("build")]
-
-          # Install the artifact along with its POM. Since the artifact (package task) is created
-          # in the target directory, we need to copy it into the local repository. However, the
-          # POM artifact (created by calling artifact on its spec) is already mapped to its right
-          # place in the local repository, so we only need to invoke it.
-          installed = file(Buildr.repositories.locate(package)=>package) { |task|
-            verbose(Rake.application.options.trace || false) do
-              mkpath File.dirname(task.name), :verbose=>false
-              cp package.name, task.name
-            end
-            puts "Installed #{task.name}" if verbose
-          }
-          task "install"=>[installed, pom]
-          task "uninstall" do |task|
-            verbose(Rake.application.options.trace || false) do
-              [ installed, pom ].map(&:to_s).each { |file| rm file if File.exist?(file) } 
-            end
-          end
-          task("upload") { package.pom.invoke ; package.pom.upload ; package.upload }
-
-          # Add the package to the list of packages created by this project, and
-          # register it as an artifact. The later is required so if we look up the spec
-          # we find the package in the project's target directory, instead of finding it
-          # in the local repository and attempting to install it.
-          packages << package
-          Artifact.register package, pom
-        end
-        package
-      end
-
-      # :call-seq:
-      #   packages() => tasks
-      #
-      # Returns all packages created by this project. A project may create any number of packages.
-      #
-      # This method is used whenever you pass a project to Buildr#artifact or any other method
-      # that accepts artifact specifications and projects. You can use it to list all packages
-      # created by the project. If you want to return a specific package, it is often more
-      # convenient to call #package with the type.
-      def packages()
-        @packages ||= []
-      end
-
-      # :call-seq:
       #   package_with_sources(options?)
       #
       # Call this when you want the project (and all its sub-projects) to create a source distribution.
       # You can use the source distribution in an IDE when debugging.
       #
-      # A source distribution is a ZIP package with the classifier "sources", which includes all the
+      # A source distribution is a ZIP package with the classifier 'sources', which includes all the
       # sources used by the compile task.
       #
       # Packages use the project's manifest and meta_inf properties, which you can override by passing
@@ -392,7 +244,7 @@
       #
       # To create source distributions only for specific projects, use the :only and :except options,
       # for example:
-      #   package_with_sources :only=>["foo:bar", "foo:baz"]
+      #   package_with_sources :only=>['foo:bar', 'foo:baz']
       #
       # (Same as calling package :sources on each project/sub-project that has source directories.)
       def package_with_sources(options = nil)
@@ -412,7 +264,7 @@
       # Call this when you want the project (and all its sub-projects) to create a JavaDoc distribution.
       # You can use the JavaDoc distribution in an IDE when coding against the API.
       #
-      # A JavaDoc distribution is a ZIP package with the classifier "javadoc", which includes all the
+      # A JavaDoc distribution is a ZIP package with the classifier 'javadoc', which includes all the
       # sources used by the compile task.
       #
       # Packages use the project's manifest and meta_inf properties, which you can override by passing
@@ -420,7 +272,7 @@
       #
       # To create JavaDoc distributions only for specific projects, use the :only and :except options,
       # for example:
-      #   package_with_javadoc :only=>["foo:bar", "foo:baz"]
+      #   package_with_javadoc :only=>['foo:bar', 'foo:baz']
       #
       # (Same as calling package :javadoc on each project/sub-project that has source directories.)
       def package_with_javadoc(options = nil)
@@ -436,80 +288,55 @@
 
     protected
 
-      def package_as_jar(file_name, spec) #:nodoc:
-        unless Rake::Task.task_defined?(file_name)
-          Java::Packaging::JarTask.define_task(file_name).tap do |jar|
-            jar.with :manifest=>manifest, :meta_inf=>meta_inf
-            jar.with compile.target unless compile.sources.empty?
-            jar.with resources.target unless resources.sources.empty?
-          end
+      def package_as_jar(file_name) #:nodoc:
+        Java::Packaging::JarTask.define_task(file_name).tap do |jar|
+          jar.with :manifest=>manifest, :meta_inf=>meta_inf
+          jar.with compile.target unless compile.sources.empty?
+          jar.with resources.target unless resources.sources.empty?
         end
-        file(file_name)
       end
 
-      def package_as_war(file_name, spec) #:nodoc:
-        unless Rake::Task.task_defined?(file_name)
-          Java::Packaging::WarTask.define_task(file_name).tap do |war|
-            war.with :manifest=>manifest, :meta_inf=>meta_inf
-            # Add libraries in WEB-INF lib, and classes in WEB-INF classes
-            war.with :classes=>compile.target unless compile.sources.empty?
-            war.with :classes=>resources.target unless resources.sources.empty?
-            war.with :libs=>compile.dependencies
-            # Add included files, or the webapp directory.
-            webapp = path_to(:source, :main, :webapp)
-            war.with webapp if File.exist?(webapp)
-          end
+      def package_as_war(file_name) #:nodoc:
+        Java::Packaging::WarTask.define_task(file_name).tap do |war|
+          war.with :manifest=>manifest, :meta_inf=>meta_inf
+          # Add libraries in WEB-INF lib, and classes in WEB-INF classes
+          war.with :classes=>compile.target unless compile.sources.empty?
+          war.with :classes=>resources.target unless resources.sources.empty?
+          war.with :libs=>compile.dependencies
+          # Add included files, or the webapp directory.
+          webapp = path_to(:source, :main, :webapp)
+          war.with webapp if File.exist?(webapp)
         end
-        file(file_name)
       end
 
-      def package_as_aar(file_name, spec) #:nodoc:
-        unless Rake::Task.task_defined?(file_name)
-          Java::Packaging::AarTask.define_task(file_name).tap do |aar|
-            aar.with :manifest=>manifest, :meta_inf=>meta_inf
-            aar.with :wsdls=>path_to(:source, :main, :axis2, '*.wsdl')
-            aar.with :services_xml=>path_to(:source, :main, :axis2, 'services.xml') 
-            aar.with compile.target unless compile.sources.empty?
-            aar.with resources.target unless resources.sources.empty?
-            aar.with :libs=>compile.dependencies
-          end
+      def package_as_aar(file_name) #:nodoc:
+        Java::Packaging::AarTask.define_task(file_name).tap do |aar|
+          aar.with :manifest=>manifest, :meta_inf=>meta_inf
+          aar.with :wsdls=>path_to(:source, :main, :axis2, '*.wsdl')
+          aar.with :services_xml=>path_to(:source, :main, :axis2, 'services.xml') 
+          aar.with compile.target unless compile.sources.empty?
+          aar.with resources.target unless resources.sources.empty?
+          aar.with :libs=>compile.dependencies
         end
-        file(file_name)
       end
 
-      def package_as_zip(file_name, spec) #:nodoc:
-        ZipTask.define_task(file_name)
+      def package_as_javadoc_spec(spec) #:nodoc:
+        spec.merge(:type=>:zip, :classifier=>'javadoc')
       end
 
-      def package_as_tar(file_name, spec) #:nodoc:
-        TarTask.define_task(file_name)
-      end
-      alias :package_as_tgz :package_as_tar
-
-      def package_as_sources(file_name, spec) #:nodoc:
-        spec.merge!(:type=>:zip, :classifier=>"sources")
-        file_name = path_to(:target, Artifact.hash_to_file_name(spec))
-        unless Rake::Task.task_defined?(file_name)
-          ZipTask.define_task(file_name).tap do |zip|
-            zip.include :from=>compile.sources
-          end
-        end
-        file(file_name)
-      end
-
-      def package_as_javadoc(file_name, spec) #:nodoc:
-        spec.merge!(:type=>:zip, :classifier=>"javadoc")
-        file_name = path_to(:target, Artifact.hash_to_file_name(spec))
-        unless Rake::Task.task_defined?(file_name)
-          ZipTask.define_task(file_name).tap do |zip|
-            zip.include :from=>javadoc.target
-          end
+      def package_as_javadoc(file_name) #:nodoc:
+        ZipTask.define_task(file_name).tap do |zip|
+          zip.include :from=>javadoc.target
           javadoc.options[:windowtitle] ||= project.comment || project.name
         end
-        file(file_name)
       end
 
     end
 
   end
+end
+
+
+class Buildr::Project
+  include Buildr::Java::Packaging
 end

Modified: incubator/buildr/trunk/lib/java/test_frameworks.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/java/test_frameworks.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/java/test_frameworks.rb (original)
+++ incubator/buildr/trunk/lib/java/test_frameworks.rb Sat Jan  5 02:06:53 2008
@@ -112,6 +112,10 @@
       super(path).reject { |name| name =~ /\$/ }
     end
 
+    def supports?(project) #:nodoc:
+      project.test.compile.language == :java
+    end
+
     def run(files, task, dependencies) #:nodoc:
       # Use Ant to execute the Junit tasks, gives us performance and reporting.
       Buildr.ant('junit') do |ant|
@@ -192,6 +196,10 @@
       super :requires=>REQUIRES, :patterns=>TESTS_PATTERN
     end
 
+    def supports?(project) #:nodoc:
+      project.test.compile.language == :java
+    end
+
     def files(path) #:nodoc:
       # Ignore anonymous classes.
       super(path).reject { |name| name =~ /\$/ }
@@ -217,5 +225,5 @@
 end
 
 
-Buildr::TestFramework.add Buildr::TestNG
 Buildr::TestFramework.add Buildr::JUnit
+Buildr::TestFramework.add Buildr::TestNG

Modified: incubator/buildr/trunk/spec/archive_spec.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/spec/archive_spec.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/spec/archive_spec.rb (original)
+++ incubator/buildr/trunk/spec/archive_spec.rb Sat Jan  5 02:06:53 2008
@@ -1,4 +1,4 @@
-require File.join(File.dirname(__FILE__), 'sandbox')
+require File.join(File.dirname(__FILE__), 'spec_helpers')
 
 
 describe "ArchiveTask", :shared=>true do

Modified: incubator/buildr/trunk/spec/artifact_spec.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/spec/artifact_spec.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/spec/artifact_spec.rb (original)
+++ incubator/buildr/trunk/spec/artifact_spec.rb Sat Jan  5 02:06:53 2008
@@ -1,4 +1,4 @@
-require File.join(File.dirname(__FILE__), 'sandbox')
+require File.join(File.dirname(__FILE__), 'spec_helpers')
 
 
 describe Artifact do

Modified: incubator/buildr/trunk/spec/build_spec.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/spec/build_spec.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/spec/build_spec.rb (original)
+++ incubator/buildr/trunk/spec/build_spec.rb Sat Jan  5 02:06:53 2008
@@ -1,4 +1,5 @@
-require File.join(File.dirname(__FILE__), 'sandbox')
+require File.join(File.dirname(__FILE__), 'spec_helpers')
+
 
 describe 'local task', :shared=>true do
   it "should execute task for project in current directory" do
@@ -145,7 +146,7 @@
 
   it 'should set layout :target' do
     @project.target = 'bar'
-    @project.layout.expand(:target).should eql(File.expand_path('bar'))
+    @project.layout.expand(:target).should point_to_path('bar')
   end
 
   it 'should come from layout :target' do
@@ -166,7 +167,7 @@
 
   it 'should set layout :reports' do
     @project.reports = 'bar'
-    @project.layout.expand(:reports).should eql(File.expand_path('bar'))
+    @project.layout.expand(:reports).should point_to_path('bar')
   end
 
   it 'should come from layout :reports' do

Modified: incubator/buildr/trunk/spec/checks_spec.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/spec/checks_spec.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/spec/checks_spec.rb (original)
+++ incubator/buildr/trunk/spec/checks_spec.rb Sat Jan  5 02:06:53 2008
@@ -1,4 +1,4 @@
-require File.join(File.dirname(__FILE__), 'sandbox')
+require File.join(File.dirname(__FILE__), 'spec_helpers')
 
 
 describe Project, " check task" do

Modified: incubator/buildr/trunk/spec/common_spec.rb
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/spec/common_spec.rb?rev=609118&r1=609117&r2=609118&view=diff
==============================================================================
--- incubator/buildr/trunk/spec/common_spec.rb (original)
+++ incubator/buildr/trunk/spec/common_spec.rb Sat Jan  5 02:06:53 2008
@@ -1,4 +1,4 @@
-require File.join(File.dirname(__FILE__), 'sandbox')
+require File.join(File.dirname(__FILE__), 'spec_helpers')
 
 
 describe Buildr.method(:struct) do
@@ -178,25 +178,25 @@
 
 
 describe Buildr.method(:filter) do
-  before do
-    @src = File.expand_path("src") 
+  def source
+    File.expand_path("src")
   end
   
   it "should return a Filter for the source" do
-    filter(@src).should be_kind_of(Filter)
+    filter(source).should be_kind_of(Filter)
   end
 
   it "should use the source directory" do
-    filter(@src).sources.should include(file(@src))
+    filter(source).sources.should include(file(source))
   end
 
   it "should use the source directories" do
     dirs = ["first", "second"]
-    filter("first", "second").sources.should include(*dirs.map { |dir| file(File.expand_path(dir)) })
+    filter("first", "second").sources.should include(*dirs.map { |dir| file(dir) })
   end
 
   it "should accept a file task" do
-    task = file(@src)
+    task = file(source)
     filter(task).sources.each { |source| source.should be(task) }
   end
 end
@@ -220,7 +220,7 @@
   it "should respond to :from and add source directories" do
     dirs = ["first", "second"]
     @filter.from(*dirs)
-    @filter.sources.should include(*dirs.map { |dir| file(File.expand_path(dir)) })
+    @filter.sources.should include(*dirs.map { |dir| file(dir) })
   end
 
   it "should return source directories as file task" do
@@ -228,7 +228,7 @@
   end
 
   it "should return source directories as expanded path" do
-    @filter.from("src").sources.each { |source| source.to_s.should eql(File.expand_path("src")) }
+    @filter.from("src").sources.each { |source| source.to_s.should eql("src") }
   end
 
   it "should respond to :into and return self" do
@@ -237,7 +237,7 @@
 
   it "should respond to :into and set target directory" do
     lambda { @filter.into("src") }.should change { @filter.target }
-    @filter.into("target").target.should be(file(File.expand_path("target")))
+    @filter.into("target").target.should be(file('target'))
   end
 
   it "should return target directory as file task" do
@@ -245,7 +245,7 @@
   end
 
   it "should return target directory as expanded path" do
-    @filter.into("target").target.to_s.should eql(File.expand_path("target"))
+    @filter.into("target").target.to_s.should eql('target')
   end
 
   it "should respond to :using and return self" do
@@ -541,10 +541,6 @@
 
 
 describe Buildr, 'profiles' do
-  before :each do
-    Rake.application.instance_eval { @rakefile = File.expand_path('buildfile') }
-  end
-
   it 'should return empty hash if no profiles file' do
     Buildr.profiles.should == {}
   end
@@ -562,10 +558,6 @@
 
 
 describe Buildr, 'profile' do
-  before :each do
-    Rake.application.instance_eval { @rakefile = File.expand_path('buildfile') }
-  end
-
   it 'should return profile for current environment' do
     Buildr.environment = 'qa'
     Buildr.profiles['qa'] = { 'foo'=>'bar' }