mercurial/localrepo.py
changeset 15183 59e8bc22506e
parent 15131 7c26ce9edbd2
child 15187 0292f88d3b86
--- a/mercurial/localrepo.py	Fri Sep 30 15:11:19 2011 -0500
+++ b/mercurial/localrepo.py	Fri Sep 30 21:58:54 2011 -0400
@@ -754,20 +754,20 @@
         finally:
             lock.release()
 
-    def rollback(self, dryrun=False):
+    def rollback(self, dryrun=False, force=False):
         wlock = lock = None
         try:
             wlock = self.wlock()
             lock = self.lock()
             if os.path.exists(self.sjoin("undo")):
-                return self._rollback(dryrun)
+                return self._rollback(dryrun, force)
             else:
                 self.ui.warn(_("no rollback information available\n"))
                 return 1
         finally:
             release(lock, wlock)
 
-    def _rollback(self, dryrun):
+    def _rollback(self, dryrun, force):
         ui = self.ui
         try:
             args = self.opener.read('undo.desc').splitlines()
@@ -786,6 +786,13 @@
                        % (oldtip, desc))
         except IOError:
             msg = _('rolling back unknown transaction\n')
+            desc = None
+
+        if not force and self['.'] != self['tip'] and desc == 'commit':
+            raise util.Abort(
+                _('rollback of last commit while not checked out '
+                  'may lose data (use -f to force)'))
+
         ui.status(msg)
         if dryrun:
             return 0