diff --git a/contrib/shrink-revlog.py b/contrib/shrink-revlog.py
--- a/contrib/shrink-revlog.py
+++ b/contrib/shrink-revlog.py
@@ -189,25 +189,32 @@ def shrink(ui, repo, **opts):
             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)
+        if not opts.get('dry_run'):
+            # 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)
+        else:
+            os.unlink(tmpindexfn)
+            os.unlink(tmpdatafn)
     finally:
         lock.release()
 
-    ui.write('note: old revlog saved in:\n'
-          '  %s\n'
-          '  %s\n'
-          '(You can delete those files when you are satisfied that your\n'
-          'repository is still sane.  '
-          'Running \'hg verify\' is strongly recommended.)\n'
-          % (oldindexfn, olddatafn))
+    if not opts.get('dry_run'):
+        ui.write('note: old revlog saved in:\n'
+                 '  %s\n'
+                 '  %s\n'
+                 '(You can delete those files when you are satisfied that your\n'
+                 'repository is still sane.  '
+                 'Running \'hg verify\' is strongly recommended.)\n'
+                 % (oldindexfn, olddatafn))
 
 cmdtable = {
     'shrink': (shrink,
-               [('', 'revlog', '', 'index (.i) file of the revlog to shrink')],
+               [('', 'revlog', '', 'index (.i) file of the revlog to shrink'),
+                ('n', 'dry-run', None, 'do not shrink, simulate only'),
+                ],
                'hg shrink [--revlog PATH]')
 }