summaryrefslogtreecommitdiffstats
path: root/pager.py
diff options
context:
space:
mode:
Diffstat (limited to 'pager.py')
-rw-r--r--pager.py16
1 files changed, 10 insertions, 6 deletions
diff --git a/pager.py b/pager.py
index 221baf3c..352923d9 100644
--- a/pager.py
+++ b/pager.py
@@ -1,5 +1,3 @@
1# -*- coding:utf-8 -*-
2#
3# Copyright (C) 2008 The Android Open Source Project 1# Copyright (C) 2008 The Android Open Source Project
4# 2#
5# Licensed under the Apache License, Version 2.0 (the "License"); 3# Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,7 +12,6 @@
14# See the License for the specific language governing permissions and 12# See the License for the specific language governing permissions and
15# limitations under the License. 13# limitations under the License.
16 14
17from __future__ import print_function
18import os 15import os
19import select 16import select
20import subprocess 17import subprocess
@@ -27,6 +24,7 @@ pager_process = None
27old_stdout = None 24old_stdout = None
28old_stderr = None 25old_stderr = None
29 26
27
30def RunPager(globalConfig): 28def RunPager(globalConfig):
31 if not os.isatty(0) or not os.isatty(1): 29 if not os.isatty(0) or not os.isatty(1):
32 return 30 return
@@ -35,33 +33,37 @@ def RunPager(globalConfig):
35 return 33 return
36 34
37 if platform_utils.isWindows(): 35 if platform_utils.isWindows():
38 _PipePager(pager); 36 _PipePager(pager)
39 else: 37 else:
40 _ForkPager(pager) 38 _ForkPager(pager)
41 39
40
42def TerminatePager(): 41def TerminatePager():
43 global pager_process, old_stdout, old_stderr 42 global pager_process, old_stdout, old_stderr
44 if pager_process: 43 if pager_process:
45 sys.stdout.flush() 44 sys.stdout.flush()
46 sys.stderr.flush() 45 sys.stderr.flush()
47 pager_process.stdin.close() 46 pager_process.stdin.close()
48 pager_process.wait(); 47 pager_process.wait()
49 pager_process = None 48 pager_process = None
50 # Restore initial stdout/err in case there is more output in this process 49 # Restore initial stdout/err in case there is more output in this process
51 # after shutting down the pager process 50 # after shutting down the pager process
52 sys.stdout = old_stdout 51 sys.stdout = old_stdout
53 sys.stderr = old_stderr 52 sys.stderr = old_stderr
54 53
54
55def _PipePager(pager): 55def _PipePager(pager):
56 global pager_process, old_stdout, old_stderr 56 global pager_process, old_stdout, old_stderr
57 assert pager_process is None, "Only one active pager process at a time" 57 assert pager_process is None, "Only one active pager process at a time"
58 # Create pager process, piping stdout/err into its stdin 58 # Create pager process, piping stdout/err into its stdin
59 pager_process = subprocess.Popen([pager], stdin=subprocess.PIPE, stdout=sys.stdout, stderr=sys.stderr) 59 pager_process = subprocess.Popen([pager], stdin=subprocess.PIPE, stdout=sys.stdout,
60 stderr=sys.stderr)
60 old_stdout = sys.stdout 61 old_stdout = sys.stdout
61 old_stderr = sys.stderr 62 old_stderr = sys.stderr
62 sys.stdout = pager_process.stdin 63 sys.stdout = pager_process.stdin
63 sys.stderr = pager_process.stdin 64 sys.stderr = pager_process.stdin
64 65
66
65def _ForkPager(pager): 67def _ForkPager(pager):
66 global active 68 global active
67 # This process turns into the pager; a child it forks will 69 # This process turns into the pager; a child it forks will
@@ -88,6 +90,7 @@ def _ForkPager(pager):
88 print("fatal: cannot start pager '%s'" % pager, file=sys.stderr) 90 print("fatal: cannot start pager '%s'" % pager, file=sys.stderr)
89 sys.exit(255) 91 sys.exit(255)
90 92
93
91def _SelectPager(globalConfig): 94def _SelectPager(globalConfig):
92 try: 95 try:
93 return os.environ['GIT_PAGER'] 96 return os.environ['GIT_PAGER']
@@ -105,6 +108,7 @@ def _SelectPager(globalConfig):
105 108
106 return 'less' 109 return 'less'
107 110
111
108def _BecomePager(pager): 112def _BecomePager(pager):
109 # Delaying execution of the pager until we have output 113 # Delaying execution of the pager until we have output
110 # ready works around a long-standing bug in popularly 114 # ready works around a long-standing bug in popularly