diff --git a/mercurial/crecord.py b/mercurial/crecord.py --- a/mercurial/crecord.py +++ b/mercurial/crecord.py @@ -990,6 +990,16 @@ class curseschunkselector(object): self.toggleapply(item) self.waslasttoggleallapplied = not self.waslasttoggleallapplied + def flipselections(self): + """ + Flip all selections. Every selected line is unselected and vice + versa. + """ + for header in self.headerlist: + for hunk in header.allchildren(): + for line in hunk.allchildren(): + self.toggleapply(line) + def toggleallbetween(self): """toggle applied on or off for all items in range [lastapplied, current]. """ @@ -1638,7 +1648,7 @@ smaller changesets. the following are va ctrl-l : scroll the selected line to the top of the screen m : edit / resume editing the commit message e : edit the currently selected hunk - a : toggle amend mode, only with commit -i + a : toggle all selections c : confirm selected changes r : review/edit and confirm selected changes q : quit without confirming (no changes will be made) @@ -1914,7 +1924,7 @@ are you sure you want to review/edit and elif keypressed in ["q"]: raise error.Abort(_(b'user quit')) elif keypressed in ['a']: - self.toggleamend(self.opts, test) + self.flipselections() elif keypressed in ["c"]: return True elif keypressed in ["r"]: diff --git a/tests/test-commit-interactive-curses.t b/tests/test-commit-interactive-curses.t --- a/tests/test-commit-interactive-curses.t +++ b/tests/test-commit-interactive-curses.t @@ -95,7 +95,7 @@ Committing only one hunk while aborting - unfold it - go down to second hunk (1 for the first hunk, 1 for the first hunkline, 1 for the second hunk, 1 for the second hunklike) - toggle the second hunk -- toggle on and off the amend mode (to check that it toggles off) +- toggle all lines twice (to check that it does nothing) - edit the hunk and quit the editor immediately with non-zero status - commit @@ -193,20 +193,39 @@ Newly added files can be selected with t $ hg st ? testModeCommands -Amend option works +Test toggling all selections works + +- Change one line +- Add an extra line at the end +- Unselect all +- Select the extra line at the end +- Toggle all selections (so the extra line at the is unselected and the modified line is selected) +- Commit + $ echo "hello world" > x - $ hg diff -c . - diff -r a6735021574d -r 2b0e9be4d336 x - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + $ echo "goodbye world" >> x + $ hg diff + diff -r 2b0e9be4d336 x + --- a/x Thu Jan 01 00:00:00 1970 +0000 +++ b/x Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +hello + @@ -1,1 +1,2 @@ + -hello + +hello world + +goodbye world $ cat <testModeCommands + > f + > j + > x + > j + > j + > j + > x > a > c > EOF - $ hg commit -i -m "newly added file" -d "0 0" + $ hg commit -i --amend -m "newly added file" -d "0 0" x saved backup bundle to $TESTTMP/a/.hg/strip-backup/2b0e9be4d336-3cf0bc8c-amend.hg + $ hg rev x --no-backup $ hg diff -c . diff -r a6735021574d -r c1d239d165ae x --- /dev/null Thu Jan 01 00:00:00 1970 +0000