diff contrib/shrink-revlog.py @ 10234:c8d6f339bbd7

shrink-revlog: make it work on windows (issue1976)
author Patrick Mezard <pmezard@gmail.com>
date Mon, 11 Jan 2010 21:15:53 +0100
parents 9f0c7be7c46c
children 49a8625b8cac
line wrap: on
line diff
--- a/contrib/shrink-revlog.py	Mon Jan 11 22:41:49 2010 +0100
+++ b/contrib/shrink-revlog.py	Mon Jan 11 21:15:53 2010 +0100
@@ -169,7 +169,7 @@
     # absolute. Doing it this way keeps things simple: everything is an
     # absolute path.
     lock = repo.lock(wait=False)
-    tr = transaction.transaction(sys.stderr.write,
+    tr = transaction.transaction(ui.warn,
                                  open,
                                  repo.sjoin('journal'))
 
@@ -188,13 +188,14 @@
             if os.path.exists(tmpdatafn):
                 os.unlink(tmpdatafn)
             raise
+        # Racy since both files cannot be renamed atomically
+        util.os_link(indexfn, oldindexfn)
+        util.os_link(datafn, olddatafn)
+        util.rename(tmpindexfn, indexfn)
+        util.rename(tmpdatafn, datafn)
     finally:
         lock.release()
 
-    os.link(indexfn, oldindexfn)
-    os.link(datafn, olddatafn)
-    os.rename(tmpindexfn, indexfn)
-    os.rename(tmpdatafn, datafn)
     ui.write('note: old revlog saved in:\n'
           '  %s\n'
           '  %s\n'