diff --git a/patchview/patchview-wrapper b/patchview/patchview-wrapper index 89ce5c8..73512b3 100755 --- a/patchview/patchview-wrapper +++ b/patchview/patchview-wrapper @@ -60,16 +60,37 @@ args, unknown = parser.parse_known_args() largs = vars(args).get("git_args") rargs = vars(args).get("patchview_args") +patchview_cmd = ["patchview"] + rargs + unknown +pipetoview = False if tool_cmd.endswith("view"): # pipeline: first_pipe | second_pipe | editor tool_cmd = tool_cmd[:-4] # remove "view" - git_cmd = [tool, tool_cmd] + largs patchview_cmd = ["filterdiff"] + rargs + unknown - - p1 = Popen(git_cmd, stdout=PIPE, env=enviro, cwd='.') - p2 = Popen(patchview_cmd, stdin=p1.stdout, stdout=PIPE, env=enviro, cwd=workdir) - p1.stdout.close() - + pipetoview = True +git_cmd = [tool, tool_cmd] + largs + +p1 = Popen(git_cmd, stdout=PIPE, env=enviro, cwd=workdir) +p2 = Popen(patchview_cmd, stdin=p1.stdout, stdout=PIPE, env=enviro, cwd=workdir) + +p1.wait() +stdout1, stderr1 = p1.communicate() +if p1.returncode != 0: + if stdout1: + sys.stdout.buffer.write(stdout1) + if stderr1: + sys.stderr.buffer.write(stderr1) + sys.exit(p1.returncode) + +p2.wait() +stdout2, stderr2 = p2.communicate() +if p2.returncode != 0: + if stdout2: + sys.stdout.buffer.write(stdout2) + if stderr2: + sys.stderr.buffer.write(stderr2) + sys.exit(p2.returncode) + +if pipetoview: dest_cmd = [editor, "-R", "-"] p3 = Popen(dest_cmd, stdin=PIPE) if args.debug: @@ -79,26 +100,14 @@ if tool_cmd.endswith("view"): p3.stdin.write(debug_str.encode()) p3.stdin.flush() - for chunk in iter(lambda: p2.stdout.read(4096), b''): - p3.stdin.write(chunk) - p3.stdin.flush() - - p2.stdout.close() + p3.stdin.write(stdout2) p3.stdin.close() p3.wait() else: - # pipeline normal: tool cmd | patchview - git_cmd = [tool, tool_cmd] + largs - patchview_cmd = ["patchview"] + rargs + unknown - - p1 = Popen(git_cmd, stdout=PIPE, env=os.environ, cwd='.') - p2 = Popen(patchview_cmd, stdin=p1.stdout, stdout=PIPE, env=enviro, cwd=workdir) - p1.stdout.close() - # debug print if args.debug: print("%s | %s" % (" ".join(git_cmd), " ".join(patchview_cmd))) sys.stdout.flush() - sys.stdout.buffer.write(p2.communicate()[0]) + sys.stdout.buffer.write(stdout2)