Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 29 additions & 20 deletions patchview/patchview-wrapper
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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)