diff --git a/scm.py b/scm.py index 471b9d7475..aaab02c088 100644 --- a/scm.py +++ b/scm.py @@ -878,7 +878,7 @@ class SVN(object): # svn revert is really stupid. It fails on inconsistent line-endings, # on switched directories, etc. So take no chance and delete everything! - if file_status[0][0] in ('D', 'A') or file_status[0][2] != ' ': + if file_status[0][0] in ('D', 'A', '!') or file_status[0][2] != ' ': # Added, deleted file requires manual intervention and require calling # revert, like for properties. try: diff --git a/tests/scm_unittest.py b/tests/scm_unittest.py index 6fd1ecc893..31d0a7c46e 100755 --- a/tests/scm_unittest.py +++ b/tests/scm_unittest.py @@ -282,11 +282,18 @@ class RealSvnTest(fake_repos.FakeReposTestBase): with open(scm.os.path.join(self.svn_root, 'faala'), 'w') as f: f.write('oh') self._capture(['add', scm.os.path.join(self.svn_root, 'faala')]) + added_and_removed = scm.os.path.join(self.svn_root, 'added_and_removed') + with open(added_and_removed, 'w') as f: + f.write('oh') + self._capture(['add', added_and_removed]) + scm.os.remove(added_and_removed) scm.SVN.Revert(self.svn_root) self._capture(['update', '--revision', 'base']) self.assertTree(self.tree, self.svn_root) + # Asserting the tree is not sufficient, svn status must come out clear too. + self.assertEquals('', self._capture(['status'])) if __name__ == '__main__':