Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/ui.py @ 49130:7afa96d3b484
windows: disable pager when packaged with py2exe
With Windows and py3, all output that got directed to the pager was lost. It
can be worked around by the user piping to `more`, but that's easy to forget,
and can be dangerous if `hg diff` or similar incorrectly shows no changes. The
problem appears to be the new WindowsConsoleIO in py3.6[1]. We've worked around
it with PyOxidizer by setting the `Py_LegacyWindowsStdioFlag` interpreter
option, and worked around it with `hg.bat` and `exewrapper.c` by internally
setting `PYTHONLEGACYWINDOWSSTDIO=1`.
Unfortunately, py2exe doesn't appear to be able to set the interpreter option,
and somehow seems to also ignore the environment variable. The latter isn't a
good fix anyway, since setting it in the environment would affect other python
programs too. We can't install a global config for this because a config closer
to the user (e.g. from before pager was turned on by default) can override it.
[1] https://peps.python.org/pep-0528/
Differential Revision: https://phab.mercurial-scm.org/D12556
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 13 Apr 2022 15:02:01 -0400 |
parents | 642e31cb55f0 |
children | 2e726c934fcd |
comparison
equal
deleted
inserted
replaced
49129:4ba27acdea63 | 49130:7afa96d3b484 |
---|---|
1430 # We only want to paginate if the ui appears to be | 1430 # We only want to paginate if the ui appears to be |
1431 # interactive, the user didn't say HGPLAIN or | 1431 # interactive, the user didn't say HGPLAIN or |
1432 # HGPLAINEXCEPT=pager, and the user didn't specify --debug. | 1432 # HGPLAINEXCEPT=pager, and the user didn't specify --debug. |
1433 return | 1433 return |
1434 | 1434 |
1435 # py2exe doesn't appear to be able to use legacy I/O, and nothing is | |
1436 # output to the pager for paged commands. Piping to `more` in cmd.exe | |
1437 # works, but is easy to forget. Just disable pager for py2exe, but | |
1438 # leave it working for pyoxidizer and exewrapper builds. | |
1439 if pycompat.iswindows and getattr(sys, "frozen", None) == "console_exe": | |
1440 self.debug(b"pager is unavailable with py2exe packaging\n") | |
1441 return | |
1442 | |
1435 pagercmd = self.config(b'pager', b'pager', rcutil.fallbackpager) | 1443 pagercmd = self.config(b'pager', b'pager', rcutil.fallbackpager) |
1436 if not pagercmd: | 1444 if not pagercmd: |
1437 return | 1445 return |
1438 | 1446 |
1439 pagerenv = {} | 1447 pagerenv = {} |