From patchwork Sat Mar 14 00:11:24 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2,of,2] record: ui change for chunk reversal From: Laurent Charignon X-Patchwork-Id: 8079 Message-Id: <5bb2089e8531955a9a52.1426291884@dev919.prn2.facebook.com> To: Date: Fri, 13 Mar 2015 17:11:24 -0700 # HG changeset patch # User Laurent Charignon # Date 1426208011 25200 # Thu Mar 12 17:53:31 2015 -0700 # Node ID 5bb2089e8531955a9a5276783efc531eadbc1318 # Parent 8d7e2655cc37ba5afacff460c3bf4407d3934adc record: ui change for chunk reversal diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -21,7 +21,7 @@ def parsealiases(cmd): return cmd.lstrip("^").split("|") -def recordfilter(ui, originalhunks): +def recordfilter(ui, originalhunks, selectionmode): curses_record = ui.configbool('experimental', 'crecord', False) if curses_record: testmode_fn = ui.config('experimental', 'crecordTestMode', None) @@ -31,10 +31,11 @@ else: recordfn = crecordmod.chunkselector - return crecordmod.filterpatch(ui, originalhunks, recordfn) + return crecordmod.filterpatch(ui, originalhunks, recordfn, + selectionmode) else: - return patch.filterpatch(ui, originalhunks) + return patch.filterpatch(ui, originalhunks, selectionmode) def dorecord(ui, repo, commitfunc, cmdsuggest, backupall, filterfn, *pats, **opts): @@ -82,7 +83,11 @@ # 1. filter patch, so we have intending-to apply subset of it try: - chunks = filterfn(ui, originalchunks) + if reverse: + selectionmode = "uncommit" + else: + selectionmode = "record" + chunks = filterfn(ui, originalchunks, selectionmode) except patch.PatchError, err: raise util.Abort(_('error parsing patch: %s') % err) diff --git a/mercurial/crecord.py b/mercurial/crecord.py --- a/mercurial/crecord.py +++ b/mercurial/crecord.py @@ -438,7 +438,7 @@ def __repr__(self): return '' % (self.filename(), self.fromline) -def filterpatch(ui, chunks, chunk_selector): +def filterpatch(ui, chunks, chunk_selector, selectionmode): """interactively filter patch chunks into applied-only chunks""" chunks = list(chunks) @@ -452,7 +452,7 @@ uiheaders = [uiheader(h) for h in headers] # let user choose headers/hunks/lines, and mark their applied flags # accordingly - chunk_selector(ui, uiheaders) + chunk_selector(ui, uiheaders, selectionmode) appliedhunklist = [] for hdr in uiheaders: if (hdr.applied and @@ -488,13 +488,13 @@ return h, w -def chunkselector(ui, headerlist): +def chunkselector(ui, headerlist, selectionmode): """ curses interface to get selection of chunks, and mark the applied flags of the chosen chunks. """ - chunkselector = curseschunkselector(headerlist, ui) + chunkselector = curseschunkselector(headerlist, ui, selectionmode) curses.wrapper(chunkselector.main) def testdecorator(testfn, f): @@ -502,13 +502,13 @@ return f(testfn, *args, **kwargs) return u -def testchunkselector(testfn, ui, headerlist): +def testchunkselector(testfn, ui, headerlist, selectionmode): """ test interface to get selection of chunks, and mark the applied flags of the chosen chunks. """ - chunkselector = curseschunkselector(headerlist, ui) + chunkselector = curseschunkselector(headerlist, ui, selectionmode) if testfn and os.path.exists(testfn): testf = open(testfn) testcommands = map(lambda x: x.rstrip('\n'), testf.readlines()) @@ -518,10 +518,10 @@ break class curseschunkselector(object): - def __init__(self, headerlist, ui): + def __init__(self, headerlist, ui, selectionmode): # put the headers into a patch object self.headerlist = patch(headerlist) - + self.selectionmode = selectionmode self.ui = ui # list of all chunks @@ -1005,7 +1005,7 @@ pairname="legend") printstring(self.statuswin, " (f)old/unfold; (c)ommit applied; (q)uit; (?) help " - "| [X]=hunk applied **=folded", + "| [X]=hunk to %s **=folded" %(self.selectionmode), pairname="legend") except curses.error: pass diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -924,7 +924,10 @@ def __repr__(self): return '' % (self.filename(), self.fromline) -def filterpatch(ui, headers): +# selectionmode is used to inform users of what they are doing, it is one of: +# - record +# - uncommit +def filterpatch(ui, headers, selectionmode="record"): """Interactively filter patch chunks into applied-only chunks""" def prompt(skipfile, skipall, query, chunk): @@ -1054,11 +1057,12 @@ if skipfile is None and skipall is None: chunk.pretty(ui) if total == 1: - msg = _("record this change to '%s'?") % chunk.filename() + msg = _("%s this change to '%s'?") % (selectionmode, + chunk.filename()) else: idx = pos - len(h.hunks) + i - msg = _("record change %d/%d to '%s'?") % (idx, total, - chunk.filename()) + msg = _("%s change %d/%d to '%s'?") % (selectionmode, idx, + total, chunk.filename()) r, skipfile, skipall, newpatches = prompt(skipfile, skipall, msg, chunk) if r: diff --git a/tests/test-commit-interactive.t b/tests/test-commit-interactive.t --- a/tests/test-commit-interactive.t +++ b/tests/test-commit-interactive.t @@ -1460,7 +1460,7 @@ +3 +4 +5 - record this change to 'newfile2'? [Ynesfdaq?] y + uncommit this change to 'newfile2'? [Ynesfdaq?] y no changes to record $ hg tip @@ -1485,7 +1485,7 @@ +3 +4 +5 - record this change to 'newfile2'? [Ynesfdaq?] n + uncommit this change to 'newfile2'? [Ynesfdaq?] n $ hg tip changeset: 31:9089f22108a3 @@ -1551,7 +1551,7 @@ 3 4 5 - record change 1/2 to 'newfile2'? [Ynesfdaq?] n + uncommit change 1/2 to 'newfile2'? [Ynesfdaq?] n @@ -1,5 +2,6 @@ 1 @@ -1560,7 +1560,7 @@ 4 5 +secondline - record change 2/2 to 'newfile2'? [Ynesfdaq?] y + uncommit change 2/2 to 'newfile2'? [Ynesfdaq?] y $ hg cat -r tip newfile2 firstline @@ -1606,7 +1606,7 @@ 4 5 +secondline - record change 1/3 to 'newfile2'? [Ynesfdaq?] n + uncommit change 1/3 to 'newfile2'? [Ynesfdaq?] n diff --git a/newfile3 b/newfile3 2 hunks, 2 lines changed @@ -1619,7 +1619,7 @@ 3 4 5 - record change 2/3 to 'newfile3'? [Ynesfdaq?] n + uncommit change 2/3 to 'newfile3'? [Ynesfdaq?] n @@ -1,5 +2,6 @@ 1 @@ -1628,7 +1628,7 @@ 4 5 +secondline - record change 3/3 to 'newfile3'? [Ynesfdaq?] y + uncommit change 3/3 to 'newfile3'? [Ynesfdaq?] y $ hg tip changeset: 34:35f3773303b6 @@ -1685,7 +1685,7 @@ 5 secondline +lastline - record change 1/2 to 'newfile2'? [Ynesfdaq?] y + uncommit change 1/2 to 'newfile2'? [Ynesfdaq?] y diff --git a/newfile3 b/newfile3 1 hunks, 1 lines changed