commit - f372d5cd8ece04d22b8e71608ba03a210acc1650
commit + ef293bddb9ff1a451b85d62b6bdf44494e2f1810
blob - 75e9f8a7e77561120d128294e3a6cf6eb3e80e4b
blob + 4e4e359d901d8a0ede874f4f986969c60b0dd4a8
--- got/got.c
+++ got/got.c
}
static const struct got_error *
-collect_import_msg(char **logmsg, const char *editor, const char *path_dir,
- const char *branch_name)
+collect_import_msg(char **logmsg, char **logmsg_path, const char *editor,
+ const char *path_dir, const char *branch_name)
{
- char *initial_content = NULL, *logmsg_path = NULL;
+ char *initial_content = NULL;
const struct got_error *err = NULL;
int fd;
branch_name) == -1)
return got_error_from_errno("asprintf");
- err = got_opentemp_named_fd(&logmsg_path, &fd, "/tmp/got-importmsg");
+ err = got_opentemp_named_fd(logmsg_path, &fd, "/tmp/got-importmsg");
if (err)
goto done;
dprintf(fd, initial_content);
close(fd);
- err = edit_logmsg(logmsg, editor, logmsg_path, initial_content);
+ err = edit_logmsg(logmsg, editor, *logmsg_path, initial_content);
done:
free(initial_content);
- free(logmsg_path);
return err;
}
char *path_dir = NULL, *repo_path = NULL, *logmsg = NULL;
char *gitconfig_path = NULL, *editor = NULL, *author = NULL;
const char *branch_name = "master";
- char *refname = NULL, *id_str = NULL;
+ char *refname = NULL, *id_str = NULL, *logmsg_path = NULL;
struct got_repository *repo = NULL;
struct got_reference *branch_ref = NULL, *head_ref = NULL;
struct got_object_id *new_commit_id = NULL;
int ch;
struct got_pathlist_head ignores;
struct got_pathlist_entry *pe;
+ int preserve_logmsg = 0;
TAILQ_INIT(&ignores);
if (error)
goto done;
free(logmsg);
- error = collect_import_msg(&logmsg, editor, path_dir, refname);
- if (error)
+ error = collect_import_msg(&logmsg, &logmsg_path, editor,
+ path_dir, refname);
+ if (error) {
+ if (error->code != GOT_ERR_COMMIT_MSG_EMPTY &&
+ logmsg_path != NULL)
+ preserve_logmsg = 1;
goto done;
+ }
}
- if (unveil(path_dir, "r") != 0)
- return got_error_from_errno2("unveil", path_dir);
-
- error = apply_unveil(got_repo_get_path(repo), 0, NULL);
- if (error)
+ if (unveil(path_dir, "r") != 0) {
+ error = got_error_from_errno2("unveil", path_dir);
+ if (logmsg_path)
+ preserve_logmsg = 1;
goto done;
+ }
+ error = apply_unveil(got_repo_get_path(repo), 0, NULL);
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
+ goto done;
+ }
+
error = got_repo_import(&new_commit_id, path_dir, logmsg,
author, &ignores, repo, import_progress, NULL);
- if (error)
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
goto done;
+ }
error = got_ref_alloc(&branch_ref, refname, new_commit_id);
- if (error)
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
goto done;
+ }
error = got_ref_write(branch_ref, repo);
- if (error)
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
goto done;
+ }
error = got_object_id_str(&id_str, new_commit_id);
- if (error)
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
goto done;
+ }
error = got_ref_open(&head_ref, repo, GOT_REF_HEAD, 0);
if (error) {
- if (error->code != GOT_ERR_NOT_REF)
+ if (error->code != GOT_ERR_NOT_REF) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
goto done;
+ }
error = got_ref_alloc_symref(&head_ref, GOT_REF_HEAD,
branch_ref);
- if (error)
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
goto done;
+ }
error = got_ref_write(head_ref, repo);
- if (error)
+ if (error) {
+ if (logmsg_path)
+ preserve_logmsg = 1;
goto done;
+ }
}
printf("Created branch %s with commit %s\n",
got_ref_get_name(branch_ref), id_str);
done:
+ if (preserve_logmsg) {
+ fprintf(stderr, "%s: log message preserved in %s\n",
+ getprogname(), logmsg_path);
+ } else if (logmsg_path && unlink(logmsg_path) == -1 && error == NULL)
+ error = got_error_from_errno2("unlink", logmsg_path);
free(logmsg);
+ free(logmsg_path);
free(repo_path);
free(editor);
free(refname);