Index: vcpx/changes.py
===================================================================
--- vcpx/changes.py	(revision 1637)
+++ vcpx/changes.py	(revision 1648)
@@ -208,5 +208,5 @@
         s.append('Date: %s' % str(self.date))
         s.append('Author: %s' % self.author)
-        s.append('Entries: %s' % ', '.join([str(x) for x in self.entries]))
+        s.append('Entries: %s' % '\n\t '.join([str(x) for x in self.entries]))
         s.append('Log: %s' % self.log)
         s = '\n'.join(s)
Index: vcpx/repository/svn.py
===================================================================
--- vcpx/repository/svn.py	(revision 1620)
+++ vcpx/repository/svn.py	(revision 1649)
@@ -294,9 +294,15 @@
                 # outside of this module:
                 #  D -> Remove entry completely (it's not going to be in here)
-                #  (M,A,R) -> A
+                #  (M,A) -> A
+
+                # Finally, take care of the 'R' entries: if the entry
+                # is a target of a rename, just discard it (hopefully
+                # the target VC will do the right thing), otherwise
+                # change those to 'A'.
 
                 mv_or_cp = {}
                 for e in self.current['entries']:
-                    if e.action_kind == e.ADDED and e.old_name is not None:
+                    if (e.action_kind == e.ADDED or
+                        e.action_kind == 'R') and e.old_name is not None:
                         mv_or_cp[e.old_name] = e
 
@@ -334,5 +340,14 @@
                         else:
                             check_renames_from_dir(e.name)
-                        e.action_kind = e.ADDED
+
+                        # Another scenario is
+                        #   $ svn mv dir otherdir
+                        #   $ svn rm otherdir/subdir
+                        #   $ svn mv olddir/subdir otherdir
+                        #   $ svn rm olddir
+                        if e.old_name is not None:
+                            e.action_kind = e.RENAMED
+                        else:
+                            e.action_kind = e.ADDED
                         entries2.append(e)
                     elif parent_was_copied(e.name):
Index: vcpx/tests/svn.py
===================================================================
--- vcpx/tests/svn.py	(revision 1539)
+++ vcpx/tests/svn.py	(revision 1649)
@@ -164,4 +164,30 @@
         self.assertRaises(StopIteration, csets.next)
 
+    def testRenameReplace(self):
+        """Verify how tailor handle svn "R" event on renames"""
+
+        log = self.getSvnLog('svn-rename_replace')
+        csets = changesets_from_svnlog(log, FR('file:///tmp/rep',
+                                               '/cedar-backup2/trunk'))
+
+        cset = csets.next()
+        self.assertEqual(len(cset.entries), 7)
+        for entry, expected in map(None, cset.entries,
+                                   (('Makefile', 'UPD'),
+                                    ('test', 'REN', 'unittest'),
+                                    ('test/__init__.py', 'ADD'),
+                                    ('test/filesystemtests.py', 'ADD'),
+                                    ('test/knapsacktests.py', 'ADD'),
+                                    ('util/createtree.py', 'UPD'),
+                                    ('test/data', 'REN', 'unittest/data'))):
+            self.assertEqual(entry.name, expected[0])
+            self.assertEqual(entry.action_kind, expected[1],
+                             msg=entry.name+': got %r, expected %r' %
+                             (entry.action_kind, expected[1]))
+            if expected[1]=='REN':
+                self.assertEqual(entry.old_name, expected[2],
+                                 msg=entry.name+': got %r, expected %r' %
+                                 (entry.old_name, expected[2]))
+
     def testTrackingRoot(self):
         """Verify we are able to track the root of the repository"""
@@ -207,5 +233,6 @@
         entry = cset.entries[2]
         self.assertEqual(entry.name, 'py/documentation/example/test')
-        self.assertEqual(entry.action_kind, entry.ADDED)
+        self.assertEqual(entry.action_kind, entry.RENAMED)
+        self.assertEqual(entry.old_name, 'example/test')
 
         self.assertRaises(StopIteration, csets.next)
Index: vcpx/tests/data/svn-rename_replace.log
===================================================================
--- vcpx/tests/data/svn-rename_replace.log	(revision 1649)
+++ vcpx/tests/data/svn-rename_replace.log	(revision 1649)
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<log>
+<logentry
+   revision="119">
+<author>pronovic</author>
+<date>2004-08-10T22:52:25.658089Z</date>
+<paths>
+<path
+   action="M">/cedar-backup2/trunk/Makefile</path>
+<path
+   copyfrom-path="/cedar-backup2/trunk/unittest/filesystemtests.py"
+   copyfrom-rev="118"
+   action="A">/cedar-backup2/trunk/test/filesystemtests.py</path>
+<path
+   copyfrom-path="/cedar-backup2/trunk/unittest"
+   copyfrom-rev="115"
+   action="A">/cedar-backup2/trunk/test</path>
+<path
+   action="D">/cedar-backup2/trunk/unittest</path>
+<path
+   copyfrom-path="/cedar-backup2/trunk/unittest/knapsacktests.py"
+   copyfrom-rev="118"
+   action="A">/cedar-backup2/trunk/test/knapsacktests.py</path>
+<path
+   action="A">/cedar-backup2/trunk/test/__init__.py</path>
+<path
+   action="M">/cedar-backup2/trunk/util/createtree.py</path>
+<path
+   copyfrom-path="/cedar-backup2/trunk/unittest/data"
+   copyfrom-rev="118"
+   action="R">/cedar-backup2/trunk/test/data</path>
+</paths>
+<msg>Checkpoint</msg>
+</logentry>
+</log>
