<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1 +1,3 @@
 .DS_Store
+spec/dest-copy
+spec/source-copy</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -48,6 +48,12 @@ class Duplikate
   
   def execute(message, test_mode = false)
     process if @existing_files.nil?
+    unless test_mode
+      (@added_files + @added_directories + @existing_files).each do |file|
+        FileUtils.cp_r(@source + file, @destination + File.dirname(file))
+      end
+      FileUtils.rm_rf((@deleted_files + @deleted_directories).collect! { |f| @destination + f })
+    end
     @commands = []
     (@added_files + @added_directories).each do |added|
       @commands &lt;&lt; &quot;add #{added}&quot;
@@ -56,14 +62,14 @@ class Duplikate
       @commands &lt;&lt; &quot;rm #{deleted}&quot;
     end
     @commands &lt;&lt; &quot;ci -m '#{message}'&quot;
-    if test_mode
-      true
-    else
-      @commands.each { |c| %x[svn #{c}] }
-    end
+    test_mode || execute_commands
   end
 
 protected
+  def execute_commands
+    @commands.each { |c| %x[svn #{c}] }
+  end
+  
   def process_path(path = nil)
     unless path.nil?
       dest_entry = @destination + path</diff>
      <filename>lib/duplikate.rb</filename>
    </modified>
    <modified>
      <diff>@@ -54,4 +54,42 @@ describe Duplikate do
     @duplikate.commands.should include(&quot;rm foo/deleteme&quot;)
     @duplikate.commands.should include(&quot;ci -m 'running spec'&quot;)
   end
+end
+
+describe Duplikate, &quot;syncing two directories&quot; do
+  before do
+    @source    = File.join(File.dirname(__FILE__), 'source')
+    @dest      = File.join(File.dirname(__FILE__), 'dest')
+    FileUtils.rm_rf @source + '-copy'
+    FileUtils.rm_rf @dest   + '-copy'
+    FileUtils.cp_r @source, @source + '-copy'
+    FileUtils.cp_r @dest,   @dest   + '-copy'
+    @source = Pathname.new(@source + '-copy')
+    @dest   = Pathname.new(@dest   + '-copy')
+    @duplikate = Duplikate.new @source, @dest
+    def @duplikate.execute_commands() end
+    @duplikate.execute(&quot;running spec&quot;)
+  end
+  
+  it &quot;creates added directories&quot; do
+    (@dest + 'foo/addme').should be_directory
+  end
+  
+  it &quot;creates added files&quot; do
+    (@dest + 'addme.txt').should be_file
+  end
+  
+  it &quot;deletes deleted directories&quot; do
+    (@dest + 'deleteme').should_not be_directory
+    (@dest + 'foo/deleteme').should_not be_directory
+  end
+  
+  it &quot;deletes deleted files&quot; do
+    (@dest + 'deleteme.txt').should_not be_file
+  end
+  
+  it &quot;updates changed files&quot; do
+    file = 'foo/same/changed.txt'
+    IO.read(@source + file).should == IO.read(@dest + file)
+  end
 end
\ No newline at end of file</diff>
      <filename>spec/duplikate_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e43118fe92a4ee45605cdc25507b1adaf1306a5b</id>
    </parent>
  </parents>
  <author>
    <name>rick</name>
    <email>technoweenie@gmail.com</email>
  </author>
  <url>http://github.com/technoweenie/duplikate/commit/caa75cbdd91a21a71f19ecbdb74c75e1bf88294d</url>
  <id>caa75cbdd91a21a71f19ecbdb74c75e1bf88294d</id>
  <committed-date>2008-01-25T14:34:46-08:00</committed-date>
  <authored-date>2008-01-25T14:34:46-08:00</authored-date>
  <message>actually copy files...</message>
  <tree>51fc355c849e005e2d565b78d95112f009af60ff</tree>
  <committer>
    <name>rick</name>
    <email>technoweenie@gmail.com</email>
  </committer>
</commit>
