Skip to content

Commit abf58be

Browse files
committed
(#140) Return error if one of the commands on pipes fails
1 parent ce2a79b commit abf58be

File tree

1 file changed

+29
-20
lines changed

1 file changed

+29
-20
lines changed

patchview/patchview-wrapper

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,37 @@ args, unknown = parser.parse_known_args()
6060
largs = vars(args).get("git_args")
6161
rargs = vars(args).get("patchview_args")
6262

63+
patchview_cmd = ["patchview"] + rargs + unknown
64+
pipetoview = False
6365
if tool_cmd.endswith("view"):
6466
# pipeline: first_pipe | second_pipe | editor
6567
tool_cmd = tool_cmd[:-4] # remove "view"
66-
git_cmd = [tool, tool_cmd] + largs
6768
patchview_cmd = ["filterdiff"] + rargs + unknown
68-
69-
p1 = Popen(git_cmd, stdout=PIPE, env=enviro, cwd='.')
70-
p2 = Popen(patchview_cmd, stdin=p1.stdout, stdout=PIPE, env=enviro, cwd=workdir)
71-
p1.stdout.close()
72-
69+
pipetoview = True
70+
git_cmd = [tool, tool_cmd] + largs
71+
72+
p1 = Popen(git_cmd, stdout=PIPE, env=enviro, cwd=workdir)
73+
p2 = Popen(patchview_cmd, stdin=p1.stdout, stdout=PIPE, env=enviro, cwd=workdir)
74+
75+
p1.wait()
76+
stdout1, stderr1 = p1.communicate()
77+
if p1.returncode != 0:
78+
if stdout1:
79+
sys.stdout.buffer.write(stdout1)
80+
if stderr1:
81+
sys.stderr.buffer.write(stderr1)
82+
sys.exit(p1.returncode)
83+
84+
p2.wait()
85+
stdout2, stderr2 = p2.communicate()
86+
if p2.returncode != 0:
87+
if stdout2:
88+
sys.stdout.buffer.write(stdout2)
89+
if stderr2:
90+
sys.stderr.buffer.write(stderr2)
91+
sys.exit(p2.returncode)
92+
93+
if pipetoview:
7394
dest_cmd = [editor, "-R", "-"]
7495
p3 = Popen(dest_cmd, stdin=PIPE)
7596
if args.debug:
@@ -79,26 +100,14 @@ if tool_cmd.endswith("view"):
79100
p3.stdin.write(debug_str.encode())
80101
p3.stdin.flush()
81102

82-
for chunk in iter(lambda: p2.stdout.read(4096), b''):
83-
p3.stdin.write(chunk)
84-
p3.stdin.flush()
85-
86-
p2.stdout.close()
103+
p3.stdin.write(stdout2)
87104
p3.stdin.close()
88105
p3.wait()
89106
else:
90-
# pipeline normal: tool cmd | patchview
91-
git_cmd = [tool, tool_cmd] + largs
92-
patchview_cmd = ["patchview"] + rargs + unknown
93-
94-
p1 = Popen(git_cmd, stdout=PIPE, env=os.environ, cwd='.')
95-
p2 = Popen(patchview_cmd, stdin=p1.stdout, stdout=PIPE, env=enviro, cwd=workdir)
96-
p1.stdout.close()
97-
98107
# debug print
99108
if args.debug:
100109
print("%s | %s" % (" ".join(git_cmd), " ".join(patchview_cmd)))
101110
sys.stdout.flush()
102111

103-
sys.stdout.buffer.write(p2.communicate()[0])
112+
sys.stdout.buffer.write(stdout2)
104113

0 commit comments

Comments
 (0)