diff --git a/tests/run-tests.py b/tests/run-tests.py
index 4b82d1a84db879829089d1273af978057a473ac3_dGVzdHMvcnVuLXRlc3RzLnB5..2f597243e1d7f67c9993c23800fb63f5658f44e7_dGVzdHMvcnVuLXRlc3RzLnB5 100755
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -67,6 +67,13 @@
     print >> sys.stderr, 'ERROR: cannot mix -interactive and --jobs > 1'
     sys.exit(1)
 
+def rename(src, dst):
+    """Like os.rename(), trade atomicity and opened files friendliness
+    for existing destination support.
+    """
+    shutil.copy(src, dst)
+    os.remove(src)
+
 def vlog(*msg):
     if verbose:
         for m in msg:
@@ -528,7 +535,7 @@
                     print "Accept this change? [n] ",
                     answer = sys.stdin.readline().strip()
                     if answer.lower() in "y yes".split():
-                        os.rename(test + ".err", test + ".out")
+                        rename(test + ".err", test + ".out")
                         tested += 1
                         continue
                 failed += 1