<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -3,5 +3,6 @@ duplikate changes
 
 trunk
 -----
-add report method, to display lists of files by category
-add dry_run method, to display commands
+add Duplikate#ignore method
+add Duplikate#report and Duplikate.report, to display lists of files by kategory
+add Duplikate#dry_run and Duplikate.dry_run, to print commands that would execute</diff>
      <filename>CHANGES</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ require 'pathname'
 require 'fileutils'
 class Duplikate
   attr_accessor :source, :destination
-  attr_reader :deleted_files, :deleted_directories, :added_files, :added_directories, :existing_files, :commands
+  attr_reader :deleted_files, :deleted_directories, :added_files, :added_directories, :existing_files, :commands, :ignore_patterns
 
   # Processes the differences between the given source and destination
   # paths.  The returned Duplikate object has the *_directories and *_files
@@ -52,6 +52,13 @@ class Duplikate
     @debug   = @options[:debug]
     @source, @destination = Pathname.new(source), Pathname.new(dest)
     @inverse = self.class.new(dest, source, @options.merge(:is_inverse =&gt; true)) unless @options[:is_inverse]
+    @ignore_patterns = [/^\.(git|svn)?\.?$/]
+  end
+  
+  # Ignores paths that match one of the +patterns+, where each pattern
+  # is either a String or Regexp
+  def ignore(*patterns)
+    @ignore_patterns += patterns
   end
   
   def process
@@ -128,6 +135,7 @@ protected
     unless path.nil?
       dest_entry = @destination + path
       unless dest_entry.directory?
+        return if ignore?(path.to_s)
         puts &quot;ADDING DIR: #{path.inspect}&quot; if @debug
         @added_directories &lt;&lt; path.to_s
         return
@@ -135,8 +143,9 @@ protected
     end
 
     (path.nil? ? @source : @source + path).each_entry do |entry|
-      next if entry.to_s =~ /^\.(git|svn)?\.?$/
+      next if entry.to_s =~ /^\.{1,2}$/
       full_entry   = path.nil? ? entry : path + entry
+      next if ignore?(full_entry.to_s)
       source_entry = @source + full_entry
       if source_entry.directory?
         process_path(full_entry)
@@ -155,4 +164,8 @@ protected
       @added_files &lt;&lt; file.to_s
     end
   end
+  
+  def ignore?(pathname)
+    ignore_patterns.find { |p| p === pathname }
+  end
 end</diff>
      <filename>lib/duplikate.rb</filename>
    </modified>
    <modified>
      <diff>@@ -79,6 +79,33 @@ describe Duplikate do
   end
 end
 
+describe Duplikate, &quot;ignore&quot; do
+  before do
+    @source    = File.join(File.dirname(__FILE__), 'source')
+    @dest      = File.join(File.dirname(__FILE__), 'dest')
+    @duplikate = Duplikate.new @source, @dest
+  end
+
+  it &quot;omits ignored files&quot; do
+    @duplikate.ignore 'addme.txt'
+    @duplikate.process
+    @duplikate.added_files.should_not include(&quot;addme.txt&quot;)
+  end
+  
+  it &quot;omits ignored directories&quot; do
+    @duplikate.ignore 'foo/addme'
+    @duplikate.process
+    @duplikate.added_directories.should_not include(&quot;foo/addme&quot;)
+  end
+  
+  it &quot;omits ignored file patterns&quot; do
+    @duplikate.ignore /ad*me/
+    @duplikate.process
+    @duplikate.added_directories.should_not include(&quot;foo/addme&quot;)
+    @duplikate.added_files.should_not include(&quot;addme.txt&quot;)
+  end
+end
+
 describe Duplikate, &quot;syncing two directories&quot; do
   before do
     @source    = File.join(File.dirname(__FILE__), 'source')</diff>
      <filename>spec/duplikate_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>17034859650054beec134a5e04d8c51de259cfe8</id>
    </parent>
  </parents>
  <author>
    <name>Oliver Steele</name>
    <email>steele@osteele.com</email>
  </author>
  <url>http://github.com/technoweenie/duplikate/commit/dc4c73182bd56c9e765e983e5fa8ce2810131450</url>
  <id>dc4c73182bd56c9e765e983e5fa8ce2810131450</id>
  <committed-date>2008-04-06T08:11:54-07:00</committed-date>
  <authored-date>2008-04-06T08:11:54-07:00</authored-date>
  <message>add Duplikate#ignore</message>
  <tree>ac690f8709df384db4baf167abf646ff19fef7d9</tree>
  <committer>
    <name>Oliver Steele</name>
    <email>steele@osteele.com</email>
  </committer>
</commit>
