--- 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