# HG changeset patch # User Kyle Lippincott # Date 1548974854 28800 # Node ID 66399f2e92aac38855caab69a4c0acafead90c91 # Parent 78b270a55dc60ac111c704619ce75b82a4662185 commit: if interactive, look elsewhere for whitespace settings (BC) Previously, when doing `commit -i`, we respected `diff.ignorews` and other whitespace-related settings, which is probably unexpected. The primary reason for this is to support hgext.record's commandline options, it's probably accidental that the `[diff]` settings were also considered. See comments on issue6042 and D5490. This can cause problems (issue5839, issue6042). It is assumed by the author that the `[diff]` section is primarily for *viewing* diffs, and that it is unlikely what people intend when attempting to commit or revert. With this change, if a user wants the behavior, they can clone their `[diff]` settings to `commands.commit.interactive.`. This is thus a mild BC change, but one I suspect is not going to be relied on by anyone. Note: while doing a partial commit/revert, we do not know what command the user is actually running. This means that the split extension, which ends up calling into this code, will respect the `commands.commit.interactive.` settings, and not a hypothetical `commands.split.interactive.`. This *also* means that setting `commands.commit.interactive.ignoreblanklines`, for example, will still cause issue5839. Considering the highly unlikely chance that a user actually sets `commands.commit.interactive.`, the author deems this risk acceptable. Differential Revision: https://phab.mercurial-scm.org/D5834 diff -r 78b270a55dc6 -r 66399f2e92aa mercurial/cmdutil.py --- a/mercurial/cmdutil.py Thu Jan 31 14:29:24 2019 -0800 +++ b/mercurial/cmdutil.py Thu Jan 31 14:47:34 2019 -0800 @@ -282,7 +282,9 @@ status = repo.status(match=match) if not force: repo.checkcommitpatterns(wctx, vdirs, match, status, fail) - diffopts = patch.difffeatureopts(ui, opts=opts) + diffopts = patch.difffeatureopts(ui, opts=opts, whitespace=True, + section='commands', + configprefix='commit.interactive.') diffopts.nodates = True diffopts.git = True diffopts.showfunc = True @@ -3126,7 +3128,9 @@ # Prompt the user for changes to revert torevert = [f for f in actions['revert'][0] if f not in excluded_files] m = scmutil.matchfiles(repo, torevert) - diffopts = patch.difffeatureopts(repo.ui) + diffopts = patch.difffeatureopts(repo.ui, whitespace=True, + section='commands', + configprefix='revert.interactive.') diffopts.nodates = True diffopts.git = True operation = 'discard' diff -r 78b270a55dc6 -r 66399f2e92aa mercurial/configitems.py --- a/mercurial/configitems.py Thu Jan 31 14:29:24 2019 -0800 +++ b/mercurial/configitems.py Thu Jan 31 14:47:34 2019 -0800 @@ -201,6 +201,7 @@ coreconfigitem('color', 'pagermode', default=dynamicdefault, ) +_registerdiffopts(section='commands', configprefix='commit.interactive.') coreconfigitem('commands', 'grep.all-files', default=False, ) @@ -213,6 +214,7 @@ coreconfigitem('commands', 'resolve.mark-check', default='none', ) +_registerdiffopts(section='commands', configprefix='revert.interactive.') coreconfigitem('commands', 'show.aliasprefix', default=list, ) diff -r 78b270a55dc6 -r 66399f2e92aa tests/test-commit-interactive.t --- a/tests/test-commit-interactive.t Thu Jan 31 14:29:24 2019 -0800 +++ b/tests/test-commit-interactive.t Thu Jan 31 14:47:34 2019 -0800 @@ -1808,7 +1808,7 @@ $ hg status -A subdir/f1 M subdir/f1 -Test diff.unified=0 +Test commands.commit.interactive.unified=0 $ hg init $TESTTMP/b $ cd $TESTTMP/b @@ -1829,7 +1829,7 @@ > 4 > 5 > EOF - $ printf 'y\ny\ny\n' | hg ci -im initial --config diff.unified=0 + $ printf 'y\ny\ny\n' | hg ci -im initial --config commands.commit.interactive.unified=0 diff --git a/foo b/foo 2 hunks, 2 lines changed examine changes to 'foo'? [Ynesfdaq?] y diff -r 78b270a55dc6 -r 66399f2e92aa tests/test-split.t --- a/tests/test-split.t Thu Jan 31 14:29:24 2019 -0800 +++ b/tests/test-split.t Thu Jan 31 14:47:34 2019 -0800 @@ -26,6 +26,8 @@ > [diff] > git=1 > unified=0 + > [commands] + > commit.interactive.unified=0 > [alias] > glog=log -G -T '{rev}:{node|short} {desc} {bookmarks}\n' > EOF @@ -105,10 +107,10 @@ This function splits a bit strangely primarily to avoid changing the behavior of the test after a bug was fixed with how split/commit --interactive handled -`diff.unified=0`: when there were no context lines, it kept only the last diff -hunk. When running split, this meant that runsplit was always recording three commits, -one for each diff hunk, in reverse order (the base commit was the last diff hunk -in the file). +`commands.commit.interactive.unified=0`: when there were no context lines, +it kept only the last diff hunk. When running split, this meant that runsplit +was always recording three commits, one for each diff hunk, in reverse order +(the base commit was the last diff hunk in the file). $ runsplit() { > cat > $TESTTMP/messages < split 1