@@ -97,12 +97,8 @@ def handle_process_output(
9797Callable [[List [AnyStr ]],None ],
9898Callable [[bytes ,"Repo" ,"DiffIndex" ],None ],
9999 ],
100- stderr_handler :Union [
101- None ,Callable [[AnyStr ],None ],Callable [[List [AnyStr ]],None ]
102- ],
103- finalizer :Union [
104- None ,Callable [[Union [subprocess .Popen ,"Git.AutoInterrupt" ]],None ]
105- ]= None ,
100+ stderr_handler :Union [None ,Callable [[AnyStr ],None ],Callable [[List [AnyStr ]],None ]],
101+ finalizer :Union [None ,Callable [[Union [subprocess .Popen ,"Git.AutoInterrupt" ]],None ]]= None ,
106102decode_streams :bool = True ,
107103kill_after_timeout :Union [None ,float ]= None ,
108104)-> None :
@@ -144,14 +140,10 @@ def pump_stream(
144140handler (line )
145141
146142except Exception as ex :
147- log .error (
148- f"Pumping{ name !r} of cmd({ remove_password_if_present (cmdline )} ) failed due to:{ ex !r} "
149- )
143+ log .error (f"Pumping{ name !r} of cmd({ remove_password_if_present (cmdline )} ) failed due to:{ ex !r} " )
150144if "I/O operation on closed file" not in str (ex ):
151145# Only reraise if the error was not due to the stream closing
152- raise CommandError (
153- [f"<{ name } -pump>" ]+ remove_password_if_present (cmdline ),ex
154- )from ex
146+ raise CommandError ([f"<{ name } -pump>" ]+ remove_password_if_present (cmdline ),ex )from ex
155147finally :
156148stream .close ()
157149
@@ -178,9 +170,7 @@ def pump_stream(
178170threads :List [threading .Thread ]= []
179171
180172for name ,stream ,handler in pumps :
181- t = threading .Thread (
182- target = pump_stream ,args = (cmdline ,name ,stream ,decode_streams ,handler )
183- )
173+ t = threading .Thread (target = pump_stream ,args = (cmdline ,name ,stream ,decode_streams ,handler ))
184174t .daemon = True
185175t .start ()
186176threads .append (t )
@@ -199,8 +189,7 @@ def pump_stream(
199189 )
200190if stderr_handler :
201191error_str :Union [str ,bytes ]= (
202- "error: process killed because it timed out."
203- f" kill_after_timeout={ kill_after_timeout } seconds"
192+ "error: process killed because it timed out." f" kill_after_timeout={ kill_after_timeout } seconds"
204193 )
205194if not decode_streams and isinstance (p_stderr ,BinaryIO ):
206195# Assume stderr_handler needs binary input
@@ -224,9 +213,7 @@ def slots_to_dict(self: object, exclude: Sequence[str] = ()) -> Dict[str, Any]:
224213return {s :getattr (self ,s )for s in self .__slots__ if s not in exclude }
225214
226215
227- def dict_to_slots_and__excluded_are_none (
228- self :object ,d :Mapping [str ,Any ],excluded :Sequence [str ]= ()
229- )-> None :
216+ def dict_to_slots_and__excluded_are_none (self :object ,d :Mapping [str ,Any ],excluded :Sequence [str ]= ())-> None :
230217for k ,v in d .items ():
231218setattr (self ,k ,v )
232219for k in excluded :
@@ -242,9 +229,7 @@ def dict_to_slots_and__excluded_are_none(
242229## CREATE_NEW_PROCESS_GROUP is needed to allow killing it afterwards,
243230# see https://docs.python.org/3/library/subprocess.html#subprocess.Popen.send_signal
244231PROC_CREATIONFLAGS = (
245- CREATE_NO_WINDOW | subprocess .CREATE_NEW_PROCESS_GROUP # type: ignore[attr-defined]
246- if is_win
247- else 0
232+ CREATE_NO_WINDOW | subprocess .CREATE_NEW_PROCESS_GROUP if is_win else 0 # type: ignore[attr-defined]
248233)# mypy error if not windows
249234
250235
@@ -557,9 +542,7 @@ def wait(self, stderr: Union[None, str, bytes] = b"") -> int:
557542status = self .status
558543p_stderr = None
559544
560- def read_all_from_possibly_closed_stream (
561- stream :Union [IO [bytes ],None ]
562- )-> bytes :
545+ def read_all_from_possibly_closed_stream (stream :Union [IO [bytes ],None ])-> bytes :
563546if stream :
564547try :
565548return stderr_b + force_bytes (stream .read ())
@@ -573,9 +556,7 @@ def read_all_from_possibly_closed_stream(
573556if status != 0 :
574557errstr = read_all_from_possibly_closed_stream (p_stderr )
575558log .debug ("AutoInterrupt wait stderr: %r" % (errstr ,))
576- raise GitCommandError (
577- remove_password_if_present (self .args ),status ,errstr
578- )
559+ raise GitCommandError (remove_password_if_present (self .args ),status ,errstr )
579560return status
580561
581562# END auto interrupt
@@ -725,16 +706,12 @@ def set_persistent_git_options(self, **kwargs: Any) -> None:
725706 the subcommand.
726707 """
727708
728- self ._persistent_git_options = self .transform_kwargs (
729- split_single_char_options = True ,** kwargs
730- )
709+ self ._persistent_git_options = self .transform_kwargs (split_single_char_options = True ,** kwargs )
731710
732711def _set_cache_ (self ,attr :str )-> None :
733712if attr == "_version_info" :
734713# We only use the first 4 numbers, as everything else could be strings in fact (on windows)
735- process_version = self ._call_process (
736- "version"
737- )# should be as default *args and **kwargs used
714+ process_version = self ._call_process ("version" )# should be as default *args and **kwargs used
738715version_numbers = process_version .split (" " )[2 ]
739716
740717self ._version_info = cast (
@@ -759,9 +736,7 @@ def version_info(self) -> Tuple[int, int, int, int]:
759736return self ._version_info
760737
761738@overload
762- def execute (
763- self ,command :Union [str ,Sequence [Any ]],* ,as_process :Literal [True ]
764- )-> "AutoInterrupt" :
739+ def execute (self ,command :Union [str ,Sequence [Any ]],* ,as_process :Literal [True ])-> "AutoInterrupt" :
765740 ...
766741
767742@overload
@@ -946,16 +921,10 @@ def execute(
946921'"kill_after_timeout" feature is not supported on Windows.' ,
947922 )
948923else :
949- cmd_not_found_exception = (
950- FileNotFoundError # NOQA # exists, flake8 unknown @UndefinedVariable
951- )
924+ cmd_not_found_exception = FileNotFoundError # NOQA # exists, flake8 unknown @UndefinedVariable
952925# end handle
953926
954- stdout_sink = (
955- PIPE
956- if with_stdout
957- else getattr (subprocess ,"DEVNULL" ,None )or open (os .devnull ,"wb" )
958- )
927+ stdout_sink = PIPE if with_stdout else getattr (subprocess ,"DEVNULL" ,None )or open (os .devnull ,"wb" )
959928istream_ok = "None"
960929if istream :
961930istream_ok = "<valid stream>"
@@ -1027,9 +996,7 @@ def _kill_process(pid: int) -> None:
1027996
1028997if kill_after_timeout is not None :
1029998kill_check = threading .Event ()
1030- watchdog = threading .Timer (
1031- kill_after_timeout ,_kill_process ,args = (proc .pid ,)
1032- )
999+ watchdog = threading .Timer (kill_after_timeout ,_kill_process ,args = (proc .pid ,))
10331000
10341001# Wait for the process to return
10351002status = 0
@@ -1044,9 +1011,9 @@ def _kill_process(pid: int) -> None:
10441011if kill_after_timeout is not None :
10451012watchdog .cancel ()
10461013if kill_check .is_set ():
1047- stderr_value = (
1048- 'Timeout: the command "%s" did not complete in %d '
1049- "secs." % ( " " . join ( redacted_command ), kill_after_timeout )
1014+ stderr_value = 'Timeout: the command "%s" did not complete in %d ' "secs." % (
1015+ " " . join ( redacted_command ),
1016+ kill_after_timeout ,
10501017 )
10511018if not universal_newlines :
10521019stderr_value = stderr_value .encode (defenc )
@@ -1058,11 +1025,7 @@ def _kill_process(pid: int) -> None:
10581025
10591026status = proc .returncode
10601027else :
1061- max_chunk_size = (
1062- max_chunk_size
1063- if max_chunk_size and max_chunk_size > 0
1064- else io .DEFAULT_BUFFER_SIZE
1065- )
1028+ max_chunk_size = max_chunk_size if max_chunk_size and max_chunk_size > 0 else io .DEFAULT_BUFFER_SIZE
10661029stream_copy (proc .stdout ,output_stream ,max_chunk_size )
10671030stdout_value = proc .stdout .read ()
10681031stderr_value = proc .stderr .read ()
@@ -1079,9 +1042,7 @@ def _kill_process(pid: int) -> None:
10791042cmdstr = " " .join (redacted_command )
10801043
10811044def as_text (stdout_value :Union [bytes ,str ])-> str :
1082- return (
1083- not output_stream and safe_decode (stdout_value )or "<OUTPUT_STREAM>"
1084- )
1045+ return not output_stream and safe_decode (stdout_value )or "<OUTPUT_STREAM>"
10851046
10861047# end
10871048
@@ -1094,19 +1055,15 @@ def as_text(stdout_value: Union[bytes, str]) -> str:
10941055safe_decode (stderr_value ),
10951056 )
10961057elif stdout_value :
1097- log .info (
1098- "%s -> %d; stdout: '%s'" ,cmdstr ,status ,as_text (stdout_value )
1099- )
1058+ log .info ("%s -> %d; stdout: '%s'" ,cmdstr ,status ,as_text (stdout_value ))
11001059else :
11011060log .info ("%s -> %d" ,cmdstr ,status )
11021061# END handle debug printing
11031062
11041063if with_exceptions and status != 0 :
11051064raise GitCommandError (redacted_command ,status ,stderr_value ,stdout_value )
11061065
1107- if (
1108- isinstance (stdout_value ,bytes )and stdout_as_string
1109- ):# could also be output_stream
1066+ if isinstance (stdout_value ,bytes )and stdout_as_string :# could also be output_stream
11101067stdout_value = safe_decode (stdout_value )
11111068
11121069# Allow access to the command's status code
@@ -1163,9 +1120,7 @@ def custom_environment(self, **kwargs: Any) -> Iterator[None]:
11631120finally :
11641121self .update_environment (** old_env )
11651122
1166- def transform_kwarg (
1167- self ,name :str ,value :Any ,split_single_char_options :bool
1168- )-> List [str ]:
1123+ def transform_kwarg (self ,name :str ,value :Any ,split_single_char_options :bool )-> List [str ]:
11691124if len (name )== 1 :
11701125if value is True :
11711126return ["-%s" % name ]
@@ -1181,9 +1136,7 @@ def transform_kwarg(
11811136return ["--%s=%s" % (dashify (name ),value )]
11821137return []
11831138
1184- def transform_kwargs (
1185- self ,split_single_char_options :bool = True ,** kwargs :Any
1186- )-> List [str ]:
1139+ def transform_kwargs (self ,split_single_char_options :bool = True ,** kwargs :Any )-> List [str ]:
11871140"""Transforms Python style kwargs into git command line options."""
11881141args = []
11891142for k ,v in kwargs .items ():
@@ -1218,9 +1171,7 @@ def __call__(self, **kwargs: Any) -> "Git":
12181171
12191172 ``Examples``::
12201173 git(work_tree='/tmp').difftool()"""
1221- self ._git_options = self .transform_kwargs (
1222- split_single_char_options = True ,** kwargs
1223- )
1174+ self ._git_options = self .transform_kwargs (split_single_char_options = True ,** kwargs )
12241175return self
12251176
12261177@overload
@@ -1330,15 +1281,9 @@ def _parse_object_header(self, header_line: str) -> Tuple[str, str, int]:
13301281tokens = header_line .split ()
13311282if len (tokens )!= 3 :
13321283if not tokens :
1333- raise ValueError (
1334- "SHA could not be resolved, git returned: %r"
1335- % (header_line .strip ())
1336- )
1284+ raise ValueError ("SHA could not be resolved, git returned: %r" % (header_line .strip ()))
13371285else :
1338- raise ValueError (
1339- "SHA %s could not be resolved, git returned: %r"
1340- % (tokens [0 ],header_line .strip ())
1341- )
1286+ raise ValueError ("SHA %s could not be resolved, git returned: %r" % (tokens [0 ],header_line .strip ()))
13421287# END handle actual return value
13431288# END error handling
13441289
@@ -1360,9 +1305,7 @@ def _prepare_ref(self, ref: AnyStr) -> bytes:
13601305refstr += "\n "
13611306return refstr .encode (defenc )
13621307
1363- def _get_persistent_cmd (
1364- self ,attr_name :str ,cmd_name :str ,* args :Any ,** kwargs :Any
1365- )-> "Git.AutoInterrupt" :
1308+ def _get_persistent_cmd (self ,attr_name :str ,cmd_name :str ,* args :Any ,** kwargs :Any )-> "Git.AutoInterrupt" :
13661309cur_val = getattr (self ,attr_name )
13671310if cur_val is not None :
13681311return cur_val
@@ -1375,9 +1318,7 @@ def _get_persistent_cmd(
13751318cmd = cast ("Git.AutoInterrupt" ,cmd )
13761319return cmd
13771320
1378- def __get_object_header (
1379- self ,cmd :"Git.AutoInterrupt" ,ref :AnyStr
1380- )-> Tuple [str ,str ,int ]:
1321+ def __get_object_header (self ,cmd :"Git.AutoInterrupt" ,ref :AnyStr )-> Tuple [str ,str ,int ]:
13811322if cmd .stdin and cmd .stdout :
13821323cmd .stdin .write (self ._prepare_ref (ref ))
13831324cmd .stdin .flush ()
@@ -1405,9 +1346,7 @@ def get_object_data(self, ref: str) -> Tuple[str, str, int, bytes]:
14051346del stream
14061347return (hexsha ,typename ,size ,data )
14071348
1408- def stream_object_data (
1409- self ,ref :str
1410- )-> Tuple [str ,str ,int ,"Git.CatFileContentStream" ]:
1349+ def stream_object_data (self ,ref :str )-> Tuple [str ,str ,int ,"Git.CatFileContentStream" ]:
14111350"""As get_object_header, but returns the data as a stream
14121351
14131352 :return: (hexsha, type_string, size_as_int, stream)