commit 52185f702d047f6581c79bd99a14e3f1b84f2c5c from: Stefan Sperling date: Tue Feb 05 17:49:05 2019 UTC make 'tog tree' function in a work tree commit - b7165be31e6f0e737f415f628abe4cd4e7e1a53a commit + 52185f702d047f6581c79bd99a14e3f1b84f2c5c blob - ff123af7b716478317257a00a538cf50668c4311 blob + 812afe04bbe182c7c435c0de9361ff3d7feec15b --- tog/tog.c +++ tog/tog.c @@ -3459,9 +3459,24 @@ cmd_tree(int argc, char *argv[]) argv += optind; if (argc == 0) { - repo_path = getcwd(NULL, 0); - if (repo_path == NULL) + struct got_worktree *worktree; + char *cwd = getcwd(NULL, 0); + if (cwd == NULL) return got_error_from_errno(); + error = got_worktree_open(&worktree, cwd); + if (error && error->code != GOT_ERR_NOT_WORKTREE) + goto done; + if (worktree) { + free(cwd); + repo_path = + strdup(got_worktree_get_repo_path(worktree)); + got_worktree_close(worktree); + } else + repo_path = cwd; + if (repo_path == NULL) { + error = got_error_from_errno(); + goto done; + } } else if (argc == 1) { repo_path = realpath(argv[0], NULL); if (repo_path == NULL) @@ -3471,12 +3486,11 @@ cmd_tree(int argc, char *argv[]) error = apply_unveil(repo_path, NULL); if (error) - return error; + goto done; error = got_repo_open(&repo, repo_path); - free(repo_path); if (error != NULL) - return error; + goto done; if (commit_id_arg == NULL) error = get_head_commit_id(&commit_id, repo); @@ -3505,6 +3519,7 @@ cmd_tree(int argc, char *argv[]) goto done; error = view_loop(view); done: + free(repo_path); free(commit_id); if (commit) got_object_commit_close(commit);