From: "Todd C. Miller" Subject: Re: vi struggling to save commit messages To: Stefan Sperling Cc: Ted Bullock , gameoftrees@openbsd.org Date: Wed, 08 Mar 2023 14:21:04 -0700 On Wed, 08 Mar 2023 22:19:35 +0100, Stefan Sperling wrote: > I can reproduce this with Vim on an NFS share between two amd64 systems. > > Running fsync() before starting the editor fixes it for me. It should be sufficient to just close the fd first. - todd diff --git a/got/got.c b/got/got.c index e95ba293..5351526e 100644 --- a/got/got.c +++ b/got/got.c @@ -518,6 +518,11 @@ collect_import_msg(char **logmsg, char **logmsg_path, const char *editor, err = got_error_from_errno2("write", *logmsg_path); goto done; } + if (close(fd) == -1) { + err = got_error_from_errno2("close", *logmsg_path); + goto done; + } + fd = -1; err = edit_logmsg(logmsg, editor, *logmsg_path, initial_content, initial_content_len, 1); @@ -7407,6 +7412,11 @@ get_tag_message(char **tagmsg, char **tagmsg_path, const char *commit_id_str, err = got_error_from_errno2("write", *tagmsg_path); goto done; } + if (close(fd) == -1) { + err = got_error_from_errno2("close", *tagmsg_path); + goto done; + } + fd = -1; err = get_editor(&editor); if (err) @@ -8912,6 +8922,12 @@ collect_commit_logmsg(struct got_pathlist_head *commitable_paths, diff_path); } + if (close(fd) == -1) { + err = got_error_from_errno2("close", a->logmsg_path); + goto done; + } + fd = -1; + err = edit_logmsg(logmsg, a->editor, a->logmsg_path, initial_content, initial_content_len, a->prepared_log ? 0 : 1); done: