diff --git a/hgext3rd/undo.py b/hgext3rd/undo.py --- a/hgext3rd/undo.py +++ b/hgext3rd/undo.py @@ -539,8 +539,11 @@ keep = opts.get("keep") preview = opts.get("preview") + if relativeundo: + reverseindex = _computerelative(repo, reverseindex) + if preview: - _undopreview(ui, repo, **opts) + _undopreview(ui, repo, reverseindex, **opts) return with repo.wlock(), repo.lock(), repo.transaction("undo"): @@ -560,6 +563,8 @@ @command('redo', [ ('n', 'index', 1, _("how many commands to redo")), + ('p', 'preview', False, _("see smartlog like preview of future redo " + "state")), ]) def redo(ui, repo, *args, **opts): """ perform a redo @@ -573,6 +578,11 @@ """ reverseindex = -1 * abs(opts.get("index")) reverseindex = _computerelative(repo, reverseindex) + preview = opts.get("preview") + + if preview: + _undopreview(ui, repo, reverseindex, **opts) + return with repo.wlock(), repo.lock(), repo.transaction("redo"): cmdutil.checkunfinished(repo) @@ -706,7 +716,7 @@ ctxts = repo.set(rev) inhibit.revive(ctxts) -def _undopreview(ui, repo, **opts): +def _undopreview(ui, repo, reverseindex, **opts): # Print smartlog like preview of undo # Input: # ui: @@ -715,13 +725,15 @@ # Output: # None # Requires smartlog extension + savedindex = _computerelative(repo, 0) try: smartlog = extensions.find('smartlog') except KeyError: raise error.Abort(_('undo requires smartlog to work properly')) - reverseindex = opts.get("index") + # overwrite undoredo with fake index, so that relative calls of 1 will + # return the index we want + _logundoredoindex(repo, repo.currenttransaction(), reverseindex - 1) opts["template"] = "{undopreview}" - reverseindex = _computerelative(repo, reverseindex) revstring = revsetlang.formatspec("olddraft(%d)", reverseindex) revs = set() try: @@ -744,6 +756,7 @@ displayer = cmdutil.show_changeset(ui, repo, opts, buffered=True) cmdutil.displaygraph( ui, repo, revdag, displayer, graphmod.asciiedges, None, None) + _logundoredoindex(repo, repo.currenttransaction(), savedindex) return # Tools