From f37b9827a966258a0adc2012a7c5c89cf89e4a0f Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 16 Feb 2021 15:38:53 -0500 Subject: [PATCH] git_command: rework stdin handling We only provide input to GitCommand in one place, so inline the logic to be more synchronous and similar to subprocess.run. This makes the code simpler and easier to understand. Change-Id: Ibe498fedf608774bae1f807fc301eb67841c468b Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/297142 Reviewed-by: Michael Mortensen Tested-by: Mike Frysinger --- git_command.py | 14 +++++++------- subcmds/cherry_pick.py | 4 +--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/git_command.py b/git_command.py index 51e856a8..6e285224 100644 --- a/git_command.py +++ b/git_command.py @@ -249,7 +249,7 @@ class GitCommand(object): project, cmdv, bare=False, - provide_stdin=False, + input=None, capture_stdout=False, capture_stderr=False, merge_output=False, @@ -298,11 +298,7 @@ class GitCommand(object): command.append('--progress') command.extend(cmdv[1:]) - if provide_stdin: - stdin = subprocess.PIPE - else: - stdin = None - + stdin = subprocess.PIPE if input else None stdout = subprocess.PIPE stderr = subprocess.STDOUT if merge_output else subprocess.PIPE @@ -350,7 +346,11 @@ class GitCommand(object): _add_ssh_client(p) self.process = p - self.stdin = p.stdin + if input: + if isinstance(input, str): + input = input.encode('utf-8') + p.stdin.write(input) + p.stdin.close() @staticmethod def _GetBasicEnv(): diff --git a/subcmds/cherry_pick.py b/subcmds/cherry_pick.py index c333fcf4..4b7f1412 100644 --- a/subcmds/cherry_pick.py +++ b/subcmds/cherry_pick.py @@ -72,11 +72,9 @@ change id will be added. new_msg = self._Reformat(old_msg, sha1) p = GitCommand(None, ['commit', '--amend', '-F', '-'], - provide_stdin=True, + input=new_msg, capture_stdout=True, capture_stderr=True) - p.stdin.write(new_msg) - p.stdin.close() if p.Wait() != 0: print("error: Failed to update commit message", file=sys.stderr) sys.exit(1)