changeset 50928 | d718eddf01d9 |
parent 50573 | 9a322ccd2fdc |
child 50929 | 18c8c18993f0 |
50927:7a8ea1397816 | 50928:d718eddf01d9 |
---|---|
105 |
105 |
106 |
106 |
107 def _flushstdio(ui, err): |
107 def _flushstdio(ui, err): |
108 status = None |
108 status = None |
109 # In all cases we try to flush stdio streams. |
109 # In all cases we try to flush stdio streams. |
110 if util.safehasattr(ui, 'fout'): |
110 if hasattr(ui, 'fout'): |
111 assert ui is not None # help pytype |
111 assert ui is not None # help pytype |
112 assert ui.fout is not None # help pytype |
112 assert ui.fout is not None # help pytype |
113 try: |
113 try: |
114 ui.fout.flush() |
114 ui.fout.flush() |
115 except IOError as e: |
115 except IOError as e: |
116 err = e |
116 err = e |
117 status = -1 |
117 status = -1 |
118 |
118 |
119 if util.safehasattr(ui, 'ferr'): |
119 if hasattr(ui, 'ferr'): |
120 assert ui is not None # help pytype |
120 assert ui is not None # help pytype |
121 assert ui.ferr is not None # help pytype |
121 assert ui.ferr is not None # help pytype |
122 try: |
122 try: |
123 if err is not None and err.errno != errno.EPIPE: |
123 if err is not None and err.errno != errno.EPIPE: |
124 ui.ferr.write( |
124 ui.ferr.write( |
168 # write_through is new in Python 3.7. |
168 # write_through is new in Python 3.7. |
169 kwargs = { |
169 kwargs = { |
170 "newline": "\n", |
170 "newline": "\n", |
171 "line_buffering": sys.stdout.line_buffering, |
171 "line_buffering": sys.stdout.line_buffering, |
172 } |
172 } |
173 if util.safehasattr(sys.stdout, "write_through"): |
173 if hasattr(sys.stdout, "write_through"): |
174 # pytype: disable=attribute-error |
174 # pytype: disable=attribute-error |
175 kwargs["write_through"] = sys.stdout.write_through |
175 kwargs["write_through"] = sys.stdout.write_through |
176 # pytype: enable=attribute-error |
176 # pytype: enable=attribute-error |
177 sys.stdout = io.TextIOWrapper( |
177 sys.stdout = io.TextIOWrapper( |
178 sys.stdout.buffer, sys.stdout.encoding, sys.stdout.errors, **kwargs |
178 sys.stdout.buffer, sys.stdout.encoding, sys.stdout.errors, **kwargs |
181 if sys.stderr is not None: |
181 if sys.stderr is not None: |
182 kwargs = { |
182 kwargs = { |
183 "newline": "\n", |
183 "newline": "\n", |
184 "line_buffering": sys.stderr.line_buffering, |
184 "line_buffering": sys.stderr.line_buffering, |
185 } |
185 } |
186 if util.safehasattr(sys.stderr, "write_through"): |
186 if hasattr(sys.stderr, "write_through"): |
187 # pytype: disable=attribute-error |
187 # pytype: disable=attribute-error |
188 kwargs["write_through"] = sys.stderr.write_through |
188 kwargs["write_through"] = sys.stderr.write_through |
189 # pytype: enable=attribute-error |
189 # pytype: enable=attribute-error |
190 sys.stderr = io.TextIOWrapper( |
190 sys.stderr = io.TextIOWrapper( |
191 sys.stderr.buffer, sys.stderr.encoding, sys.stderr.errors, **kwargs |
191 sys.stderr.buffer, sys.stderr.encoding, sys.stderr.errors, **kwargs |
518 |
518 |
519 |
519 |
520 def aliasargs(fn, givenargs): |
520 def aliasargs(fn, givenargs): |
521 args = [] |
521 args = [] |
522 # only care about alias 'args', ignore 'args' set by extensions.wrapfunction |
522 # only care about alias 'args', ignore 'args' set by extensions.wrapfunction |
523 if not util.safehasattr(fn, '_origfunc'): |
523 if not hasattr(fn, '_origfunc'): |
524 args = getattr(fn, 'args', args) |
524 args = getattr(fn, 'args', args) |
525 if args: |
525 if args: |
526 cmd = b' '.join(map(procutil.shellquote, args)) |
526 cmd = b' '.join(map(procutil.shellquote, args)) |
527 |
527 |
528 nums = [] |
528 nums = [] |
706 'optionalrepo': False, |
706 'optionalrepo': False, |
707 'inferrepo': False, |
707 'inferrepo': False, |
708 } |
708 } |
709 if name not in adefaults: |
709 if name not in adefaults: |
710 raise AttributeError(name) |
710 raise AttributeError(name) |
711 if self.badalias or util.safehasattr(self, 'shell'): |
711 if self.badalias or hasattr(self, 'shell'): |
712 return adefaults[name] |
712 return adefaults[name] |
713 return getattr(self.fn, name) |
713 return getattr(self.fn, name) |
714 |
714 |
715 def __call__(self, ui, *args, **opts): |
715 def __call__(self, ui, *args, **opts): |
716 if self.badalias: |
716 if self.badalias: |
732 b'commandalias', |
732 b'commandalias', |
733 b"alias '%s' expands to '%s'\n", |
733 b"alias '%s' expands to '%s'\n", |
734 self.name, |
734 self.name, |
735 self.definition, |
735 self.definition, |
736 ) |
736 ) |
737 if util.safehasattr(self, 'shell'): |
737 if hasattr(self, 'shell'): |
738 return self.fn(ui, *args, **opts) |
738 return self.fn(ui, *args, **opts) |
739 else: |
739 else: |
740 try: |
740 try: |
741 return util.checksignature(self.fn)(ui, *args, **opts) |
741 return util.checksignature(self.fn)(ui, *args, **opts) |
742 except error.SignatureError: |
742 except error.SignatureError: |
1022 return |
1022 return |
1023 |
1023 |
1024 cmd = aliases[0] |
1024 cmd = aliases[0] |
1025 fn = entry[0] |
1025 fn = entry[0] |
1026 |
1026 |
1027 if cmd and util.safehasattr(fn, 'shell'): |
1027 if cmd and hasattr(fn, 'shell'): |
1028 # shell alias shouldn't receive early options which are consumed by hg |
1028 # shell alias shouldn't receive early options which are consumed by hg |
1029 _earlyopts, args = _earlysplitopts(args) |
1029 _earlyopts, args = _earlysplitopts(args) |
1030 d = lambda: fn(ui, *args[1:]) |
1030 d = lambda: fn(ui, *args[1:]) |
1031 return lambda: runcommand( |
1031 return lambda: runcommand( |
1032 lui, None, cmd, args[:1], ui, options, d, [], {} |
1032 lui, None, cmd, args[:1], ui, options, d, [], {} |