commit - f9686aa566bfec8d68b52910b3448bdaeb5d2358
commit + fa51e947d840a83b1f4fc1672b77240dbef1d851
blob - 69c9927afc8fdb351891da171a6ce68595a56e05
blob + 4ab5956fe79d627c966c3c5b73540255d3f271f9
--- got/got.c
+++ got/got.c
}
static const struct got_error *
+wrap_not_worktree_error(const struct got_error *orig_err,
+ const char *cmdname, const char *path)
+{
+ const struct got_error *err;
+ struct got_repository *repo;
+ static char msg[512];
+
+ err = got_repo_open(&repo, path, NULL);
+ if (err)
+ return orig_err;
+
+ snprintf(msg, sizeof(msg),
+ "'got %s' needs a work tree in addition to a git repository\n"
+ "Work trees can be checked out from this Git repository with "
+ "'got checkout'.\n"
+ "The got(1) manual page contains more information.", cmdname);
+ err = got_error_msg(GOT_ERR_NOT_WORKTREE, msg);
+ got_repo_close(repo);
+ return err;
+}
+
+static const struct got_error *
cmd_update(int argc, char *argv[])
{
const struct got_error *error = NULL;
goto done;
}
error = got_worktree_open(&worktree, worktree_path);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "update",
+ worktree_path);
goto done;
+ }
error = check_rebase_or_histedit_in_progress(worktree);
if (error)
errx(1,
"-r option can't be used when diffing a work tree");
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "diff",
+ cwd);
goto done;
+ }
repo_path = strdup(got_worktree_get_repo_path(worktree));
if (repo_path == NULL) {
error = got_error_from_errno("strdup");
}
error = got_worktree_open(&worktree, cwd);
- if (error != NULL)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "status", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "add", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
goto done;
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "remove", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
goto done;
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "revert", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
goto done;
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "commit", cwd);
goto done;
+ }
error = got_worktree_rebase_in_progress(&rebase_in_progress, worktree);
if (error)
goto done;
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "cherrypick",
+ cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
goto done;
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "backout", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
goto done;
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "rebase", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
goto done;
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "histedit", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "integrate",
+ cwd);
goto done;
+ }
error = check_rebase_or_histedit_in_progress(worktree);
if (error)
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "stage", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);
}
error = got_worktree_open(&worktree, cwd);
- if (error)
+ if (error) {
+ if (error->code == GOT_ERR_NOT_WORKTREE)
+ error = wrap_not_worktree_error(error, "unstage", cwd);
goto done;
+ }
error = got_repo_open(&repo, got_worktree_get_repo_path(worktree),
NULL);