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 <mmortensen@google.com>
Tested-by: Mike Frysinger <vapier@google.com>
diff --git a/git_command.py b/git_command.py
index 51e856a..6e28522 100644
--- a/git_command.py
+++ b/git_command.py
@@ -249,7 +249,7 @@
project,
cmdv,
bare=False,
- provide_stdin=False,
+ input=None,
capture_stdout=False,
capture_stderr=False,
merge_output=False,
@@ -298,11 +298,7 @@
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 @@
_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 c333fcf..4b7f141 100644
--- a/subcmds/cherry_pick.py
+++ b/subcmds/cherry_pick.py
@@ -72,11 +72,9 @@
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)