From 606a9429fb458efc729f414459e8acb61aa10551 Mon Sep 17 00:00:00 2001 From: Bruno Dias Date: Wed, 16 Nov 2022 20:42:02 -0300 Subject: [PATCH] feature: accept hunks and stage selected changes on git... using the -review we can interactively select which changes we will accept. a new option is added to allow users to accept the patch and also automatically stage the changes (currently only git is supported). --- lib/app/interactive/interactive.ml | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/app/interactive/interactive.ml b/lib/app/interactive/interactive.ml index 38f46410..547d92fe 100644 --- a/lib/app/interactive/interactive.ml +++ b/lib/app/interactive/interactive.ml @@ -144,8 +144,8 @@ let handle_patch_errors = function Lwt_io.print message >>= fun _input -> Lwt_io.read_line Lwt_io.stdin >>= fun _input -> return `Ok -let apply_patch hunk_patch = - let cmd = Lwt_process.shell "patch -p 0" in +let apply_patch_with_cmd cmd hunk_patch = + let cmd = Lwt_process.shell cmd in return (Lwt_process.open_process_full cmd) >>= fun process -> Lwt_io.write_line process#stdin hunk_patch @@ -159,6 +159,12 @@ let apply_patch hunk_patch = (if debug then Lwt_io.printf "[debug] %s,%s\n" stdout stderr else return ()) >>= fun () -> process#close +let apply_patch_with_git hunk_patch = + apply_patch_with_cmd "git apply --index" hunk_patch + +let apply_patch hunk_patch = + apply_patch_with_cmd "patch -p 0" hunk_patch + let drop_into_editor editor path ~at_line = let command = Format.sprintf "%s +%d %s" editor at_line path in Lwt_unix.system command @@ -173,6 +179,10 @@ let process_input default_is_accept hunk_patch prev_start next_start editor path ; "\x1b[1m" ; " [default], " ; "\x1b[0m" + ; "\x1b[32m" + ; "g = accept as git patch" + ; "\x1b[0m" + ; ", " ; "\x1b[31m" ; "n = no" ; "\x1b[0m" @@ -193,6 +203,10 @@ let process_input default_is_accept hunk_patch prev_start next_start editor path ; "y = yes" ; "\x1b[0m" ; ", " + ; "\x1b[32m" + ; "g = accept as git patch" + ; "\x1b[0m" + ; ", " ; "\x1b[31m" ; "n = no" ; "\x1b[0m" @@ -218,6 +232,9 @@ let process_input default_is_accept hunk_patch prev_start next_start editor path >>= fun input -> match input with | "y" -> apply_patch hunk_patch >>= handle_patch_errors >>= fun _ -> continue () + | "" when default_is_accept -> + apply_patch hunk_patch >>= handle_patch_errors >>= fun _ -> continue () + | "g" -> apply_patch_with_git hunk_patch >>= handle_patch_errors >>= fun _ -> continue () | "" when default_is_accept -> apply_patch hunk_patch >>= handle_patch_errors >>= fun _ -> continue () | "n" -> continue ()