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

svn commit: r927147 - in /buildr/trunk: CHANGELOG lib/buildr/core/filter.rb spec/core/common_spec.rb

Author: toulmean
Date: Wed Mar 24 18:44:31 2010
New Revision: 927147

URL: http://svn.apache.org/viewvc?rev=927147&view=rev
Log:
fix for BUILDR-406: Support for regexps in include and exclude patterns

Modified:
    buildr/trunk/CHANGELOG
    buildr/trunk/lib/buildr/core/filter.rb
    buildr/trunk/spec/core/common_spec.rb

Modified: buildr/trunk/CHANGELOG
URL: http://svn.apache.org/viewvc/buildr/trunk/CHANGELOG?rev=927147&r1=927146&r2=927147&view=diff
==============================================================================
--- buildr/trunk/CHANGELOG (original)
+++ buildr/trunk/CHANGELOG Wed Mar 24 18:44:31 2010
@@ -1,4 +1,5 @@
 1.4.0 (Pending)
+* Added:  Support for regexps in include and exclude patterns (BUILDR-406)
 * Added:  Support for Scala 2.8 compiler-level change detection and dependency
           tracking
 * Added:  Continuous compilation

Modified: buildr/trunk/lib/buildr/core/filter.rb
URL: http://svn.apache.org/viewvc/buildr/trunk/lib/buildr/core/filter.rb?rev=927147&r1=927146&r2=927147&view=diff
==============================================================================
--- buildr/trunk/lib/buildr/core/filter.rb (original)
+++ buildr/trunk/lib/buildr/core/filter.rb Wed Mar 24 18:44:31 2010
@@ -41,6 +41,9 @@ module Buildr
   # relative to the source directories, so:
   #   filter.include '*.png'
   # will only include PNG files from any of the source directories.
+  # In the same way, you can use regular expressions, so:
+  #   filter.include /picture_.*\.png/
+  # will only include PNG files starting with picture_ from any of the sources directories.
   #
   # See Buildr#filter.
   class Filter
@@ -204,8 +207,8 @@ module Buildr
       sources.flatten.map(&:to_s).inject({}) do |map, source|
         files = Util.recursive_with_dot_files(source).
           map { |file| Util.relative_path(file, source) }.
-          select { |file| @include.empty? || @include.any? { |pattern| File.fnmatch(pattern, file) } }.
-          reject { |file| @exclude.any? { |pattern| File.fnmatch(pattern, file) } }
+          select { |file| @include.empty? || @include.any? { |pattern| pattern.is_a?(Regexp) ? file.match(pattern) : File.fnmatch(pattern, file) } }.
+          reject { |file| @exclude.any? { |pattern| pattern.is_a?(Regexp) ? file.match(pattern) : File.fnmatch(pattern, file) } }
         files.each do |file|
           src, dest = File.expand_path(file, source), File.expand_path(file, target.to_s)
           map[file] = src if !File.exist?(dest) || File.stat(src).mtime >= File.stat(dest).mtime

Modified: buildr/trunk/spec/core/common_spec.rb
URL: http://svn.apache.org/viewvc/buildr/trunk/spec/core/common_spec.rb?rev=927147&r1=927146&r2=927147&view=diff
==============================================================================
--- buildr/trunk/spec/core/common_spec.rb (original)
+++ buildr/trunk/spec/core/common_spec.rb Wed Mar 24 18:44:31 2010
@@ -308,6 +308,11 @@ describe Buildr::Filter do
     @filter.from('src').into('target').include('file2', 'file3').run
     Dir['target/*'].sort.should eql(['target/file2', 'target/file3'])
   end
+  
+  it 'should respond to :include with regular expressions and use these inclusion patterns' do
+    @filter.from('src').into('target').include(/file[2|3]/).run
+    Dir['target/*'].sort.should eql(['target/file2', 'target/file3'])
+  end
 
   it 'should respond to :exclude and return self' do
     @filter.exclude('file').should be(@filter)
@@ -317,6 +322,11 @@ describe Buildr::Filter do
     @filter.from('src').into('target').exclude('file2', 'file3').run
     Dir['target/*'].sort.should eql(['target/file1', 'target/file4'])
   end
+  
+  it 'should respond to :exclude  with regular expressions and use these exclusion patterns' do
+    @filter.from('src').into('target').exclude(/file[2|3]/).run
+    Dir['target/*'].sort.should eql(['target/file1', 'target/file4'])
+  end
 
   it 'should copy files over' do
     @filter.from('src').into('target').run