git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: What's cooking in git.git (Nov 2012, #02; Fri, 9)

From
Jeff King <peff@peff.net>
Date
Nov 11, 2012, 15:48 UTC
Message-ID
<20121111154846.GA13188@sigill.intra.peff.net>
In-Reply-To
<87wqxs4o6f.fsf@Niukka.kon.iki.fi>
On Sun, Nov 11, 2012 at 09:02:48AM +0200, Kalle Olavi Niemitalo wrote:
> If git did the same thing as cvs here, i.e. ignore the signals in
> the parent process only and check the exit status of the editor,
> I think that would be OK.

Silly me. When I thought through the impact of Paul's patch, I knew that we would notice signal death of the editor. But I totally forgot to consider that the blocked signal is inherited by the child process. I think we just need to move the signal() call to after we've forked. Like this (on top of Paul's patch):

diff --git a/editor.c b/editor.c
index 3ca361b..0ed23ce 100644
--- a/editor.c
+++ b/editor.c
@@ -38,11 +38,20 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en
 
 	if (strcmp(editor, ":")) {
 		const char *args[] = { editor, path, NULL };
+		struct child_process p;
 		int ret;
 
+		memset(&p, 0, sizeof(p));
+		p.argv = args;
+		p.env = env;
+		p.use_shell = 1;
+		if (start_command(&p) < 0)
+			return error("unable to start editor '%s'", editor);
+
 		sigchain_push(SIGINT, SIG_IGN);
-		ret = run_command_v_opt_cd_env(args, RUN_USING_SHELL, NULL, env);
+		ret = finish_command(&p);
 		sigchain_pop(SIGINT);
+
 		if (ret)
 			return error("There was a problem with the editor '%s'.",
 					editor);

Note that this will give you a slightly verbose message from git.
Potentially we could notice editor death due to SIGINT and suppress the
message, under the assumption that the user hit ^C and does not need to
be told.

-Peff
Previous: Andreas SchwabNext: Jeff King
Message 15 of 38 in “What's cooking in git.git (Nov 2012, #02; Fri, 9)”
  1. Jeff KingNov 9, 2012
  2. Ralf ThielowNov 9, 2012
  3. Ralf ThielowNov 9, 2012
  4. Jeff KingNov 9, 2012
  5. Junio C HamanoNov 9, 2012
  6. Jeff KingNov 10, 2012
  7. Junio C HamanoNov 10, 2012
  8. Kalle Olavi NiemitaloNov 9, 2012
  9. Paul FoxNov 10, 2012
  10. Kalle Olavi NiemitaloNov 10, 2012
  11. Andreas SchwabNov 10, 2012
  12. Paul FoxNov 10, 2012
  13. Kalle Olavi NiemitaloNov 11, 2012
  14. Andreas SchwabNov 11, 2012
  15. Jeff KingNov 11, 2012
  16. 0/5 ignore SIGINT while editor runsJeff King, Nov 11, 2012
  17. 1/5 launch_editor: refactor to use start/finish_commandJeff King, Nov 11, 2012
  18. 2/5 launch_editor: ignore SIGINT while the editor has controlPaul Fox, Nov 11, 2012
  19. Junio C HamanoNov 12, 2012
  20. Jeff KingNov 12, 2012
  21. 3/5 run-command: drop silent_exec_failure arg from wait_or_whineJeff King, Nov 11, 2012
  22. Felipe ContrerasNov 11, 2012
  23. 4/5 run-command: do not warn about child death by SIGINTJeff King, Nov 11, 2012
  24. 5/5 launch_editor: propagate SIGINT from editor to gitJeff King, Nov 11, 2012
  25. Johannes SixtNov 11, 2012
  26. Jeff KingNov 30, 2012
  27. 2/5 launch_editor: ignore SIGINT while the editor has controlJeff King, Nov 11, 2012
  28. Paul FoxNov 11, 2012
  29. Krzysztof MazurNov 11, 2012
  30. Paul FoxNov 11, 2012
  31. Krzysztof MazurNov 11, 2012
  32. Andreas SchwabNov 11, 2012
  33. Felipe ContrerasNov 9, 2012
  34. Jeff KingNov 10, 2012
  35. Felipe ContrerasNov 10, 2012
  36. SZEDER GáborNov 10, 2012
  37. Felipe ContrerasNov 10, 2012
  38. Junio C HamanoNov 10, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.