commit - 08680430768530f8c5623618e07a4cf068a9cc1f
commit + 314a6357a2a91eaa8a8f0f04dcfa5b26a59c4fb2
blob - 23370a0ae3daea7b02c31c7e2a767bf51d0ba581
blob + 3ef3e75a562a7fdadd4e8d235c892780740d21f3
--- got/got.c
+++ got/got.c
static const struct got_error *
apply_unveil(const char *repo_path, int repo_read_only,
- const char *worktree_path, int create_worktree, char **editor)
+ const char *worktree_path, int create_worktree)
{
const struct got_error *err;
static char err_msg[MAXPATHLEN + 36];
}
if (err && (err->code != GOT_ERR_ERRNO || errno != EISDIR))
- return err;
- }
-
- if (editor) {
- err = get_editor(editor);
- if (err)
return err;
- if (unveil(*editor, "x") != 0) {
- err = got_error_from_errno2("unveil", *editor);
- free(*editor);
- *editor = NULL;
- return err;
- }
}
if (repo_path && unveil(repo_path, repo_read_only ? "r" : "rwc") != 0)
if (error != NULL)
goto done;
- error = apply_unveil(got_repo_get_path(repo), 0, worktree_path, 1,
- NULL);
+ error = apply_unveil(got_repo_get_path(repo), 0, worktree_path, 1);
if (error)
goto done;
goto done;
error = apply_unveil(got_repo_get_path(repo), 0,
- got_worktree_get_root_path(worktree), 0, NULL);
+ got_worktree_get_root_path(worktree), 0);
if (error)
goto done;
goto done;
error = apply_unveil(got_repo_get_path(repo), 1,
- worktree ? got_worktree_get_root_path(worktree) : NULL, 0, NULL);
+ worktree ? got_worktree_get_root_path(worktree) : NULL, 0);
if (error)
goto done;
goto done;
error = apply_unveil(got_repo_get_path(repo), 1,
- worktree ? got_worktree_get_root_path(worktree) : NULL, 0, NULL);
+ worktree ? got_worktree_get_root_path(worktree) : NULL, 0);
if (error)
goto done;
if (error != NULL)
goto done;
- error = apply_unveil(got_repo_get_path(repo), 1, NULL, 0, NULL);
+ error = apply_unveil(got_repo_get_path(repo), 1, NULL, 0);
if (error)
goto done;
if (error != NULL)
goto done;
- error = apply_unveil(got_repo_get_path(repo), 1, NULL, 0, NULL);
+ error = apply_unveil(got_repo_get_path(repo), 1, NULL, 0);
if (error)
goto done;
goto done;
error = apply_unveil(got_repo_get_path(repo), 1,
- got_worktree_get_root_path(worktree), 0, NULL);
+ got_worktree_get_root_path(worktree), 0);
if (error)
goto done;
goto done;
error = apply_unveil(got_repo_get_path(repo), do_list,
- worktree ? got_worktree_get_root_path(worktree) : NULL, 0, NULL);
+ worktree ? got_worktree_get_root_path(worktree) : NULL, 0);
if (error)
goto done;
goto done;
error = apply_unveil(got_repo_get_path(repo), 1,
- got_worktree_get_root_path(worktree), 0, NULL);
+ got_worktree_get_root_path(worktree), 0);
if (error)
goto done;
goto done;
error = apply_unveil(got_repo_get_path(repo), 1,
- got_worktree_get_root_path(worktree), 0, NULL);
+ got_worktree_get_root_path(worktree), 0);
if (error)
goto done;
goto done;
error = apply_unveil(got_repo_get_path(repo), 1,
- got_worktree_get_root_path(worktree), 0, NULL);
+ got_worktree_get_root_path(worktree), 0);
if (error)
goto done;
const char *cmdline_log;
const char *editor;
const char *worktree_path;
+ const char *repo_path;
char *logmsg_path;
};
}
done:
free(template);
+
+ /* Editor is done; we can now apply unveil(2) */
+ if (err == NULL)
+ err = apply_unveil(a->repo_path, 0, a->worktree_path, 0);
return err;
}
if (error != NULL)
goto done;
- error = apply_unveil(got_repo_get_path(repo), 0,
- got_worktree_get_root_path(worktree), 0, &editor);
+ /*
+ * unveil(2) traverses exec(2); if an editor is used we have
+ * to apply unveil after the log message has been written.
+ */
+ if (logmsg == NULL || strlen(logmsg) == 0)
+ error = get_editor(&editor);
+ else
+ error = apply_unveil(got_repo_get_path(repo), 0,
+ got_worktree_get_root_path(worktree), 0);
if (error)
goto done;
cl_arg.editor = editor;
cl_arg.cmdline_log = logmsg;
cl_arg.worktree_path = got_worktree_get_root_path(worktree);
+ cl_arg.repo_path = got_repo_get_path(repo);
cl_arg.logmsg_path = NULL;
error = got_worktree_commit(&id, worktree, path, got_author, NULL,
collect_commit_logmsg, &cl_arg, print_status, NULL, repo);