You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildr.apache.org by bo...@apache.org on 2010/03/05 06:21:24 UTC

svn commit: r919291 - in /buildr/trunk: CHANGELOG lib/buildr/java/cobertura.rb

Author: boisvert
Date: Fri Mar  5 05:21:24 2010
New Revision: 919291

URL: http://svn.apache.org/viewvc?rev=919291&view=rev
Log:
BUILDR-306 Cobertura extension does not handle dependencies correctly
(Pepijn Van Eeckhoudt)


Modified:
    buildr/trunk/CHANGELOG
    buildr/trunk/lib/buildr/java/cobertura.rb

Modified: buildr/trunk/CHANGELOG
URL: http://svn.apache.org/viewvc/buildr/trunk/CHANGELOG?rev=919291&r1=919290&r2=919291&view=diff
==============================================================================
--- buildr/trunk/CHANGELOG (original)
+++ buildr/trunk/CHANGELOG Fri Mar  5 05:21:24 2010
@@ -80,6 +80,8 @@
 * Fixed:  BUILDR-384 Buildr fails with rubygems 1.3.6
 * Fixed:  BUILDR-386 Display JRuby version in buildr -V (Antoine Toulme)
 * Fixed:  BUILDR-391 resources task does not detect changes
+* Fixed:  BUILDR-306 Cobertura extension does not handle dependencies
+          correctly (Pepijn Van Eeckhoudt)
 * Fixed:  buildr test=all didn't run all tests as expected
 * Fixed:  Fail-fast if package.with() or include() called with nil values
 * Fixed:  Failures not reported correctly for ScalaTest (Alex Eagle)

Modified: buildr/trunk/lib/buildr/java/cobertura.rb
URL: http://svn.apache.org/viewvc/buildr/trunk/lib/buildr/java/cobertura.rb?rev=919291&r1=919290&r2=919291&view=diff
==============================================================================
--- buildr/trunk/lib/buildr/java/cobertura.rb (original)
+++ buildr/trunk/lib/buildr/java/cobertura.rb Fri Mar  5 05:21:24 2010
@@ -22,16 +22,16 @@
   # Provides the <code>cobertura:html</code>, <code>cobertura:xml</code> and <code>cobertura:check</code> tasks.
   # Require explicitly using <code>require "buildr/cobertura"</code>.
   #
-  # You can generate cobertura reports for a single project 
+  # You can generate cobertura reports for a single project
   # using the project name as prefix:
   #
   #   project_name:cobertura:html
   #
-  # You can also specify which classes to include/exclude from instrumentation by 
-  # passing a class name regexp to the <code>cobertura.include</code> or 
-  # <code>cobertura.exclude</code> methods. 
-  # 
-  #   define 'someModule' do 
+  # You can also specify which classes to include/exclude from instrumentation by
+  # passing a class name regexp to the <code>cobertura.include</code> or
+  # <code>cobertura.exclude</code> methods.
+  #
+  #   define 'someModule' do
   #      cobertura.include 'some.package.*'
   #      cobertura.include /some.(foo|bar).*/
   #      cobertura.exclude 'some.foo.util.SimpleUtil'
@@ -43,14 +43,27 @@
     VERSION = '1.9'
 
     class << self
-
       def version
         Buildr.settings.build['cobertura'] || VERSION
       end
+    end
+
+    REQUIRES = ArtifactNamespace.for(self).tap do |ns|
+      ns.cobertura! "net.sourceforge.cobertura:cobertura:jar:#{version}", '>=1.9'
+      ns.log4j! 'log4j:log4j:jar:1.2.9', ">=1.2.9"
+      ns.asm! 'asm:asm:jar:2.2.1', '>=2.2.1'
+      ns.asm_tree! 'asm:asm-tree:jar:2.2.1', '>=2.2.1'
+      ns.oro! 'oro:oro:jar:2.0.8', '>=2.0.8'
+    end
 
+    class << self
       def dependencies
-        @dependencies ||= [ "net.sourceforge.cobertura:cobertura:jar:#{version}", "log4j:log4j:jar:1.2.9",
-                            "asm:asm:jar:2.2.1", "asm:asm-tree:jar:2.2.1", "oro:oro:jar:2.0.8"]
+        if (VersionRequirement.create('>=1.9.1').satisfied_by?(REQUIRES.cobertura.version))
+          REQUIRES.asm = '3.0' unless REQUIRES.asm.selected?
+          REQUIRES.asm_tree = '3.0' unless REQUIRES.asm.selected?
+        end
+
+        REQUIRES.artifacts
       end
 
       def report_to(file = nil)
@@ -62,18 +75,18 @@
       end
 
     end
-    
+
     class CoberturaConfig # :nodoc:
-      
+
       def initialize(project)
         @project = project
       end
-      
+
       attr_reader :project
       private :project
-      
+
       attr_writer :data_file, :instrumented_dir, :report_dir
-      
+
       def data_file
         @data_file ||= project.path_to(:reports, 'cobertura.ser')
       end
@@ -97,7 +110,7 @@
         includes.push(*classPatterns.map { |p| String === p ? Regexp.new(p) : p })
         self
       end
-      
+
       def includes
         @includeClasses ||= []
       end
@@ -114,15 +127,23 @@
         @excludeClasses ||= []
       end
 
+      def ignore(*regexps)
+        ignores.push(*regexps)
+      end
+
+      def ignores
+        @ignores ||= []
+      end
+
       def sources
         project.compile.sources
       end
-      
+
       def check
         @check ||= CoberturaCheck.new
       end
     end
-    
+
     class CoberturaCheck
       attr_writer :branch_rate, :line_rate, :total_branch_rate, :total_line_rate, :package_line_rate, :package_branch_rate
       attr_reader :branch_rate, :line_rate, :total_branch_rate, :total_line_rate, :package_line_rate, :package_branch_rate
@@ -137,7 +158,7 @@
 
       after_define do |project|
         cobertura = project.cobertura
-        
+
         namespace 'cobertura' do
           unless project.compile.target.nil?
             # Instrumented bytecode goes in a different directory. This task creates before running the test
@@ -151,10 +172,10 @@
                     :classpath=>Buildr.artifacts(Cobertura.dependencies).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR)
                   ant.send "cobertura-instrument", :todir=>task.to_s, :datafile=>cobertura.data_file do
                     includes, excludes = cobertura.includes, cobertura.excludes
-                    
+
                     classes_dir = project.compile.target.to_s
-                    if includes.empty? && excludes.empty? 
-                      ant.fileset :dir => classes_dir do 
+                    if includes.empty? && excludes.empty?
+                      ant.fileset :dir => classes_dir do
                         ant.include :name => "**/*.class"
                       end
                     else
@@ -166,29 +187,31 @@
                         end
                       end
                     end
+
+                    cobertura.ignores.each { |r| ant.ignore :regex => r }
                   end
                 end
               end
               touch task.to_s
             end
-            
+
             task 'instrument' => instrumented
-            
+
             # We now have two target directories with bytecode. It would make sense to remove compile.target
             # and add instrumented instead, but apparently Cobertura only creates some of the classes, so
             # we need both directories and instrumented must come first.
             project.test.dependencies.unshift cobertura.instrumented_dir
             project.test.with Cobertura.dependencies
             project.test.options[:properties]["net.sourceforge.cobertura.datafile"] = cobertura.data_file
-            
+
             unless project.compile.sources.empty?
               [:xml, :html].each do |format|
-                task format => ['instrument', 'test'] do 
+                task format => ['instrument', 'test'] do
                   info "Creating test coverage reports in #{cobertura.report_to(format)}"
                   Buildr.ant "cobertura" do |ant|
                     ant.taskdef :resource=>"tasks.properties",
                       :classpath=>Buildr.artifacts(Cobertura.dependencies).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR)
-                    ant.send "cobertura-report", :format=>format, 
+                    ant.send "cobertura-report", :format=>format,
                       :destdir=>cobertura.report_to(format), :datafile=>cobertura.data_file do
                       cobertura.sources.flatten.each do |src|
                         ant.fileset(:dir=>src.to_s) if File.exist?(src.to_s)
@@ -202,9 +225,9 @@
             task :check => [:instrument, :test] do
               Buildr.ant "cobertura" do |ant|
                 ant.taskdef :classpath=>Cobertura.requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties"
-                
+
                 params = { :datafile => Cobertura.data_file }
-                
+
                 # oh so ugly...
                 params[:branchrate] = cobertura.check.branch_rate if cobertura.check.branch_rate
                 params[:linerate] = cobertura.check.line_rate if cobertura.check.line_rate
@@ -212,21 +235,21 @@
                 params[:totallinerate] = cobertura.check.total_line_rate if cobertura.check.total_line_rate
                 params[:packagebranchrate] = cobertura.check.package_branch_rate if cobertura.check.package_branch_rate
                 params[:packagelinerate] = cobertura.check.package_line_rate if cobertura.check.package_line_rate
-                
+
                 ant.send("cobertura-check", params) do
                 end
               end
             end
-            
+
           end
         end
 
         project.clean do
           rm_rf [cobertura.report_to, cobertura.data_file, cobertura.instrumented_dir]
         end
-        
+
       end
-      
+
     end
 
     class Buildr::Project
@@ -243,7 +266,7 @@
           task(instrument_task).invoke if Rake::Task.task_defined?(instrument_task)
         end
       end
-      
+
       [:xml, :html].each do |format|
         report_target = report_to(format)
         desc "Run the test cases and produce code coverage reports in #{report_target}"
@@ -260,7 +283,7 @@
           end
         end
       end
-      
+
       task "clean" do
         rm_rf [report_to, data_file]
       end