--- a/mercurial/commands.py Mon Aug 27 14:21:04 2007 -0300
+++ b/mercurial/commands.py Wed Aug 29 16:15:23 2007 -0700
@@ -2338,6 +2338,14 @@
changes = repo.status(match=names.has_key, wlock=wlock)[:5]
modified, added, removed, deleted, unknown = map(dict.fromkeys, changes)
+ # if f is a rename, also revert the source
+ cwd = repo.getcwd()
+ for f in added:
+ src = repo.dirstate.copied(f)
+ if src and src not in names and repo.dirstate[src][0] == 'r':
+ removed[src] = None
+ names[src] = (repo.pathto(src, cwd), True)
+
revert = ([], _('reverting %s\n'))
add = ([], _('adding %s\n'))
remove = ([], _('removing %s\n'))
--- a/tests/test-revert Mon Aug 27 14:21:04 2007 -0300
+++ b/tests/test-revert Wed Aug 29 16:15:23 2007 -0700
@@ -94,4 +94,9 @@
hg revert b newdir
echo foobar > b/b
hg revert .
-true
+
+echo % reverting a rename target should revert the source
+hg mv a newa
+hg revert newa
+hg st a newa
+
--- a/tests/test-revert.out Mon Aug 27 14:21:04 2007 -0300
+++ b/tests/test-revert.out Wed Aug 29 16:15:23 2007 -0700
@@ -63,3 +63,5 @@
reverting b/b
forgetting newdir/newfile
reverting b/b
+% reverting a rename target should revert the source
+? newa