commit - 9314b9f4a55e5ebd1a98fa58bcd4e429e8b46163
commit + 4fedbf4c4e5ffc90d4eb6f38c58a4b9d927d896c
blob - e27c03fbd9f56aeed3a7642fcbeb7264fe402bb7
blob + 052e54634b5060c7c46923027a999ccfe3432b0b
--- got/got.c
+++ got/got.c
if (error != NULL)
goto done;
- error = apply_unveil(got_repo_get_path(repo), 1, NULL);
- if (error)
- goto done;
+ if (worktree) {
+ const char *prefix = got_worktree_get_path_prefix(worktree);
+ char *p;
- if (path == NULL) {
- if (worktree) {
- char *p, *worktree_subdir = cwd +
- strlen(got_worktree_get_root_path(worktree));
- if (asprintf(&p, "%s/%s",
- got_worktree_get_path_prefix(worktree),
- worktree_subdir) == -1) {
- error = got_error_from_errno("asprintf");
- goto done;
- }
- error = got_repo_map_path(&in_repo_path, repo, p, 0);
+ if (path == NULL)
+ path = "";
+ error = got_worktree_resolve_path(&p, worktree, path);
+ if (error)
+ goto done;
+ if (asprintf(&in_repo_path, "%s%s%s", prefix,
+ (p[0] != '\0' && !got_path_is_root_dir(prefix)) ? "/" : "",
+ p) == -1) {
+ error = got_error_from_errno("asprintf");
free(p);
- if (error)
- goto done;
- } else
+ goto done;
+ }
+ free(p);
+ error = apply_unveil(got_repo_get_path(repo), 1, NULL);
+ if (error)
+ goto done;
+ } else {
+ error = apply_unveil(got_repo_get_path(repo), 1, NULL);
+ if (error)
+ goto done;
+ if (path == NULL)
path = "/";
- }
- if (in_repo_path == NULL) {
error = got_repo_map_path(&in_repo_path, repo, path, 1);
if (error != NULL)
goto done;