# HG changeset patch # User Steve Borho # Date 2010-04-09 22:23:37 # Node ID f0bfe42c7b1f007757dd606bcbc3a3a238910750 # Parent a685011ed38ee101caaf9c5c06e1ef241c989999 rollback: add dry-run argument, emit transaction description diff --git a/hgext/bookmarks.py b/hgext/bookmarks.py --- a/hgext/bookmarks.py +++ b/hgext/bookmarks.py @@ -241,10 +241,10 @@ def reposetup(ui, repo): file.close() return mark - def rollback(self): + def rollback(self, *args): if os.path.exists(self.join('undo.bookmarks')): util.rename(self.join('undo.bookmarks'), self.join('bookmarks')) - return super(bookmark_repo, self).rollback() + return super(bookmark_repo, self).rollback(*args) def lookup(self, key): if key in self._bookmarks: diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2854,7 +2854,7 @@ def revert(ui, repo, *pats, **opts): finally: wlock.release() -def rollback(ui, repo): +def rollback(ui, repo, **opts): """roll back the last transaction This command should be used with care. There is only one level of @@ -2881,7 +2881,7 @@ def rollback(ui, repo): repository; for example an in-progress pull from the repository may fail if a rollback is performed. """ - repo.rollback() + repo.rollback(opts.get('dry_run')) def root(ui, repo): """print the root (top) of the current working directory @@ -3821,7 +3821,7 @@ table = { ('', 'no-backup', None, _('do not save backup copies of files')), ] + walkopts + dryrunopts, _('[OPTION]... [-r REV] [NAME]...')), - "rollback": (rollback, []), + "rollback": (rollback, dryrunopts), "root": (root, []), "^serve": (serve, diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -599,13 +599,25 @@ class localrepository(repo.repository): finally: lock.release() - def rollback(self): + def rollback(self, dryrun=False): wlock = lock = None try: wlock = self.wlock() lock = self.lock() if os.path.exists(self.sjoin("undo")): - self.ui.status(_("rolling back last transaction\n")) + try: + args = self.opener("undo.desc", "r").read().split(",") + if len(args) == 3 and self.ui.verbose: + desc = _("rolling back %s (%s) to revision %s\n") % ( + args[1], args[2], args[0]) + else: + desc = _("rolling back %s to revision %s\n") % ( + args[1], args[0]) + except (IOError, IndexError): + desc = _("rolling back unknown transaction\n") + self.ui.status(desc) + if dryrun: + return transaction.rollback(self.sopener, self.sjoin("undo"), self.ui.warn) util.rename(self.join("undo.dirstate"), self.join("dirstate")) diff --git a/tests/test-acl.out b/tests/test-acl.out --- a/tests/test-acl.out +++ b/tests/test-acl.out @@ -71,7 +71,7 @@ adding quux/file.py revisions files: 3 chunks added 3 changesets with 3 changes to 3 files updating the branch cache -rolling back last transaction +rolling back push to revision 1 0:6675d58eff77 Extension disabled for lack of acl.sources @@ -143,7 +143,7 @@ added 3 changesets with 3 changes to 3 f calling hook pretxnchangegroup.acl: hgext.acl.hook acl: changes have source "push" - skipping updating the branch cache -rolling back last transaction +rolling back push to revision 1 0:6675d58eff77 No [acl.allow]/[acl.deny] @@ -221,7 +221,7 @@ acl: allowing changeset ef1ea85a6374 acl: allowing changeset f9cafe1212c8 acl: allowing changeset 911600dab2ae updating the branch cache -rolling back last transaction +rolling back push to revision 1 0:6675d58eff77 Empty [acl.allow] @@ -799,7 +799,7 @@ acl: allowing changeset ef1ea85a6374 acl: allowing changeset f9cafe1212c8 acl: allowing changeset 911600dab2ae updating the branch cache -rolling back last transaction +rolling back push to revision 1 0:6675d58eff77 wilma can change files with a .txt extension @@ -1160,6 +1160,6 @@ acl: allowing changeset ef1ea85a6374 acl: allowing changeset f9cafe1212c8 acl: allowing changeset 911600dab2ae updating the branch cache -rolling back last transaction +rolling back push to revision 1 0:6675d58eff77 diff --git a/tests/test-backout.out b/tests/test-backout.out --- a/tests/test-backout.out +++ b/tests/test-backout.out @@ -62,7 +62,7 @@ abort: cannot use --parent on non-merge # backout with valid parent should be ok removing d changeset 5:10e5328c8435 backs out changeset 4:b2f3bb92043e -rolling back last transaction +rolling back commit to revision 5 1 files updated, 0 files merged, 0 files removed, 0 files unresolved removing c changeset 5:033590168430 backs out changeset 4:b2f3bb92043e diff --git a/tests/test-bundle-r.out b/tests/test-bundle-r.out --- a/tests/test-bundle-r.out +++ b/tests/test-bundle-r.out @@ -154,7 +154,7 @@ checking manifests crosschecking files in changesets and manifests checking files 4 files, 9 changesets, 7 total revisions -rolling back last transaction +rolling back pull to revision 5 % should fail abort: --base is incompatible with specifying a destination abort: repository default-push not found! @@ -187,7 +187,7 @@ checking manifests crosschecking files in changesets and manifests checking files 4 files, 9 changesets, 7 total revisions -rolling back last transaction +rolling back unbundle to revision 3 % 2 2:d62976ca1e50 adding changesets @@ -202,7 +202,7 @@ checking manifests crosschecking files in changesets and manifests checking files 2 files, 5 changesets, 5 total revisions -rolling back last transaction +rolling back unbundle to revision 3 adding changesets adding manifests adding file changes @@ -215,7 +215,7 @@ checking manifests crosschecking files in changesets and manifests checking files 3 files, 7 changesets, 6 total revisions -rolling back last transaction +rolling back unbundle to revision 3 adding changesets adding manifests adding file changes diff --git a/tests/test-bundle.out b/tests/test-bundle.out --- a/tests/test-bundle.out +++ b/tests/test-bundle.out @@ -37,7 +37,7 @@ adding file changes added 9 changesets with 7 changes to 4 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) ====== Rollback empty -rolling back last transaction +rolling back pull to revision 0 ====== Pull full.hg into empty again (using --cwd) pulling from ../full.hg requesting all changes @@ -55,7 +55,7 @@ pulling from full.hg searching for changes no changes found ====== Rollback empty -rolling back last transaction +rolling back pull to revision 0 ====== Pull full.hg into empty again (using -R) pulling from full.hg requesting all changes @@ -123,7 +123,7 @@ adding file changes added 9 changesets with 7 changes to 4 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) ====== Rollback empty -rolling back last transaction +rolling back pull to revision 0 ====== Log -R bundle:empty+full.hg 8 7 6 5 4 3 2 1 0 ====== Pull full.hg into empty again (using -R; with hook) diff --git a/tests/test-convert-cvs.out b/tests/test-convert-cvs.out --- a/tests/test-convert-cvs.out +++ b/tests/test-convert-cvs.out @@ -45,7 +45,7 @@ converting... 2 Initial revision 1 import filtering out empty revision -rolling back last transaction +rolling back commit to revision 1 0 ci0 updating tags c diff --git a/tests/test-debugcomplete.out b/tests/test-debugcomplete.out --- a/tests/test-debugcomplete.out +++ b/tests/test-debugcomplete.out @@ -220,7 +220,7 @@ recover: rename: after, force, include, exclude, dry-run resolve: all, list, mark, unmark, no-status, include, exclude revert: all, date, rev, no-backup, include, exclude, dry-run -rollback: +rollback: dry-run root: showconfig: untrusted tag: force, local, rev, remove, message, date, user diff --git a/tests/test-diff-color.out b/tests/test-diff-color.out --- a/tests/test-diff-color.out +++ b/tests/test-diff-color.out @@ -43,7 +43,7 @@ examine changes to 'a'? [Ynsfdaq?] c record this change to 'a'? [Ynsfdaq?] -rolling back last transaction +rolling back commit to revision 1 % qrecord diff --git a/a b/a old mode 100644 diff --git a/tests/test-hook.out b/tests/test-hook.out --- a/tests/test-hook.out +++ b/tests/test-hook.out @@ -101,7 +101,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (run 'hg update' to get a working copy) -rolling back last transaction +rolling back pull to revision 4 preoutgoing hook: HG_SOURCE=pull preoutgoing.forbid hook: HG_SOURCE=pull pulling from ../a diff --git a/tests/test-import.out b/tests/test-import.out --- a/tests/test-import.out +++ b/tests/test-import.out @@ -182,7 +182,7 @@ parent: 0 applying ../patch1 applying ../patch2 applied 1d4bd90af0e4 -rolling back last transaction +rolling back commit to revision 2 parent: 1 % hg import in a subdirectory requesting all changes diff --git a/tests/test-keyword.out b/tests/test-keyword.out --- a/tests/test-keyword.out +++ b/tests/test-keyword.out @@ -198,7 +198,7 @@ diff -r ef63ca68695b c +do not process $Id: +xxx $ % rollback -rolling back last transaction +rolling back commit to revision 2 % status A c % update -C @@ -266,7 +266,7 @@ committed changeset 3:d14c712653769de926 % status ? c % rollback -rolling back last transaction +rolling back commit to revision 3 % status R a ? c @@ -308,7 +308,7 @@ xxx $ ignore $Id$ % rollback -rolling back last transaction +rolling back commit to revision 3 % clean update 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % kwexpand/kwshrink on selected files diff --git a/tests/test-newbranch.out b/tests/test-newbranch.out --- a/tests/test-newbranch.out +++ b/tests/test-newbranch.out @@ -62,7 +62,7 @@ foo default bar % test for invalid branch cache -rolling back last transaction +rolling back commit to revision 5 changeset: 4:4909a3732169 branch: foo tag: tip diff --git a/tests/test-notify.out b/tests/test-notify.out --- a/tests/test-notify.out +++ b/tests/test-notify.out @@ -95,10 +95,10 @@ diff -r cb9a9f314b8b -r 0647d048b600 a +a (run 'hg update' to get a working copy) % fail for config file is missing -rolling back last transaction +rolling back pull to revision 1 pull failed % pull -rolling back last transaction +rolling back pull to revision 1 pulling from ../a searching for changes adding changesets @@ -129,7 +129,7 @@ diff -r cb9a9f314b8b -r 0647d048b600 a +a (run 'hg update' to get a working copy) % pull -rolling back last transaction +rolling back pull to revision 1 pulling from ../a searching for changes adding changesets diff --git a/tests/test-pull-r.out b/tests/test-pull-r.out --- a/tests/test-pull-r.out +++ b/tests/test-pull-r.out @@ -19,7 +19,7 @@ summary: add foo abort: unknown revision 'missing'! % pull multiple revisions with update 0:bbd179dfa0a7 -rolling back last transaction +rolling back pull to revision 0 % pull -r 0 changeset: 0:bbd179dfa0a7 tag: tip diff --git a/tests/test-push-http.out b/tests/test-push-http.out --- a/tests/test-push-http.out +++ b/tests/test-push-http.out @@ -25,7 +25,7 @@ remote: adding file changes remote: added 1 changesets with 1 changes to 1 files % serve errors changegroup hook: HG_NODE=ba677d0156c1196c1a699fa53f390dcfc3ce3872 HG_SOURCE=serve HG_URL=remote:http -rolling back last transaction +rolling back serve to revision 1 % expect authorization error: all users denied abort: authorization failed pushing to http://localhost:$HGPORT/ diff --git a/tests/test-rename-after-merge.out b/tests/test-rename-after-merge.out --- a/tests/test-rename-after-merge.out +++ b/tests/test-rename-after-merge.out @@ -34,7 +34,7 @@ 2 files updated, 0 files merged, 0 files (branch merge, don't forget to commit) % commit issue 1476 copies: c2 (c1) -rolling back last transaction +rolling back commit to revision 3 2 files updated, 0 files merged, 2 files removed, 0 files unresolved % merge heads again 2 files updated, 0 files merged, 0 files removed, 0 files unresolved diff --git a/tests/test-rollback.out b/tests/test-rollback.out --- a/tests/test-rollback.out +++ b/tests/test-rollback.out @@ -9,7 +9,7 @@ user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: test -rolling back last transaction +rolling back commit to revision 0 checking changesets checking manifests crosschecking files in changesets and manifests @@ -18,14 +18,14 @@ 0 files, 0 changesets, 0 total revisions A a % Test issue 902 marked working directory as branch test -rolling back last transaction +rolling back commit to revision 0 default % Test issue 1635 (commit message saved) .hg/last-message.txt: test2 % Test rollback of hg before issue 902 was fixed marked working directory as branch test -rolling back last transaction +rolling back commit to revision 0 Named branch could not be reset, current branch still is: test test % rollback by pretxncommit saves commit message (issue 1635) diff --git a/tests/test-tags.out b/tests/test-tags.out --- a/tests/test-tags.out +++ b/tests/test-tags.out @@ -111,7 +111,7 @@ date: Thu Jan 01 00:00:00 1970 +0 summary: Removed tag bar % rollback undoes tag operation -rolling back last transaction +rolling back commit to revision 5 tip 4:0c192d7d5e6b bar 1:78391a272241 tip 4:0c192d7d5e6b diff --git a/tests/test-url-rev.out b/tests/test-url-rev.out --- a/tests/test-url-rev.out +++ b/tests/test-url-rev.out @@ -75,7 +75,7 @@ summary: add a % rolling back -rolling back last transaction +rolling back push to revision 2 % incoming 2:faba9097cad4 % pull @@ -104,7 +104,7 @@ summary: add a % no new revs, no update 0:1f0dee641bb7 % rollback -rolling back last transaction +rolling back pull to revision 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 0:1f0dee641bb7 % pull -u takes us back to branch foo @@ -116,7 +116,7 @@ date: Thu Jan 01 00:00:00 1970 +0 summary: new head of branch foo % rollback -rolling back last transaction +rolling back pull to revision 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % parents 0:1f0dee641bb7