Download raw body.
tog: worktree vs. -r repo
On Fri, Dec 18, 2020 at 05:17:51PM +0100, Christian Weisgerber wrote:
> Stefan Sperling:
>
> > > What purpose does got_worktree_open() serve in the -r case?
> > > Maybe just skip got_worktree_open() completely, so worktree==NULL?
> >
> > Yes, you're right. The worktree is opened in order to lock it, but
> > if we're never going to do anything with it, we might as well not
> > open it in the first place. Is this better?
> >
> > diff refs/heads/main refs/heads/togrflag
>
> Yes, that's what I had in mind. I have only cosmetic comments:
>
> * In cmd_diff(), got_worktree_open() can also move into the
> "if (repo_path == NULL)" branch.
>
> * Throughout, the preceding getcwd() can also move into the
> "if (repo_path == NULL)" branch.
Right. Makes sense. Thanks!
I have just pushed this to the main branch:
-----------------------------------------------
commit c156c7a4f456c171f9e458793a2baa06389f8e1e (main, origin/main)
from: Stefan Sperling <stsp@stsp.name>
date: Fri Dec 18 19:19:46 2020 UTC
do not mix up repositories if tog's -r option is used inside a work tree
with input from and ok naddy
diff b9cc5cc45b0ff18a132212438eaf2d2f558166c7 22b7862a8fdd3e30a826a3c9dfeebd77dd532afe
blob - 334d9a659f385c9de036c79d21a1a527807feeb6
blob + d3d4a63398b4c4b05caa731b093b038b0b1d9bee
--- tog/tog.c
+++ tog/tog.c
@@ -2702,25 +2702,23 @@ cmd_log(int argc, char *argv[])
if (argc > 1)
usage_log();
- cwd = getcwd(NULL, 0);
- if (cwd == NULL)
- return got_error_from_errno("getcwd");
-
- error = got_worktree_open(&worktree, cwd);
- if (error && error->code != GOT_ERR_NOT_WORKTREE)
- goto done;
-
if (repo_path == NULL) {
+ cwd = getcwd(NULL, 0);
+ if (cwd == NULL)
+ return got_error_from_errno("getcwd");
+ error = got_worktree_open(&worktree, cwd);
+ if (error && error->code != GOT_ERR_NOT_WORKTREE)
+ goto done;
if (worktree)
repo_path =
strdup(got_worktree_get_repo_path(worktree));
else
repo_path = strdup(cwd);
+ if (repo_path == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
}
- if (repo_path == NULL) {
- error = got_error_from_errno("strdup");
- goto done;
- }
error = got_repo_open(&repo, repo_path, NULL);
if (error != NULL)
@@ -3789,25 +3787,23 @@ cmd_diff(int argc, char *argv[])
} else
usage_diff();
- cwd = getcwd(NULL, 0);
- if (cwd == NULL)
- return got_error_from_errno("getcwd");
-
- error = got_worktree_open(&worktree, cwd);
- if (error && error->code != GOT_ERR_NOT_WORKTREE)
- goto done;
-
if (repo_path == NULL) {
+ cwd = getcwd(NULL, 0);
+ if (cwd == NULL)
+ return got_error_from_errno("getcwd");
+ error = got_worktree_open(&worktree, cwd);
+ if (error && error->code != GOT_ERR_NOT_WORKTREE)
+ goto done;
if (worktree)
repo_path =
strdup(got_worktree_get_repo_path(worktree));
else
repo_path = strdup(cwd);
+ if (repo_path == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
}
- if (repo_path == NULL) {
- error = got_error_from_errno("strdup");
- goto done;
- }
error = got_repo_open(&repo, repo_path, NULL);
if (error)
@@ -4679,25 +4675,23 @@ cmd_blame(int argc, char *argv[])
if (argc != 1)
usage_blame();
- cwd = getcwd(NULL, 0);
- if (cwd == NULL)
- return got_error_from_errno("getcwd");
-
- error = got_worktree_open(&worktree, cwd);
- if (error && error->code != GOT_ERR_NOT_WORKTREE)
- goto done;
-
if (repo_path == NULL) {
+ cwd = getcwd(NULL, 0);
+ if (cwd == NULL)
+ return got_error_from_errno("getcwd");
+ error = got_worktree_open(&worktree, cwd);
+ if (error && error->code != GOT_ERR_NOT_WORKTREE)
+ goto done;
if (worktree)
repo_path =
strdup(got_worktree_get_repo_path(worktree));
else
repo_path = strdup(cwd);
+ if (repo_path == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
}
- if (repo_path == NULL) {
- error = got_error_from_errno("strdup");
- goto done;
- }
error = got_repo_open(&repo, repo_path, NULL);
if (error != NULL)
@@ -5491,25 +5485,23 @@ cmd_tree(int argc, char *argv[])
if (argc > 1)
usage_tree();
- cwd = getcwd(NULL, 0);
- if (cwd == NULL)
- return got_error_from_errno("getcwd");
-
- error = got_worktree_open(&worktree, cwd);
- if (error && error->code != GOT_ERR_NOT_WORKTREE)
- goto done;
-
if (repo_path == NULL) {
+ cwd = getcwd(NULL, 0);
+ if (cwd == NULL)
+ return got_error_from_errno("getcwd");
+ error = got_worktree_open(&worktree, cwd);
+ if (error && error->code != GOT_ERR_NOT_WORKTREE)
+ goto done;
if (worktree)
repo_path =
strdup(got_worktree_get_repo_path(worktree));
else
repo_path = strdup(cwd);
+ if (repo_path == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
}
- if (repo_path == NULL) {
- error = got_error_from_errno("strdup");
- goto done;
- }
error = got_repo_open(&repo, repo_path, NULL);
if (error != NULL)
@@ -6212,25 +6204,23 @@ cmd_ref(int argc, char *argv[])
if (argc > 1)
usage_ref();
- cwd = getcwd(NULL, 0);
- if (cwd == NULL)
- return got_error_from_errno("getcwd");
-
- error = got_worktree_open(&worktree, cwd);
- if (error && error->code != GOT_ERR_NOT_WORKTREE)
- goto done;
-
if (repo_path == NULL) {
+ cwd = getcwd(NULL, 0);
+ if (cwd == NULL)
+ return got_error_from_errno("getcwd");
+ error = got_worktree_open(&worktree, cwd);
+ if (error && error->code != GOT_ERR_NOT_WORKTREE)
+ goto done;
if (worktree)
repo_path =
strdup(got_worktree_get_repo_path(worktree));
else
repo_path = strdup(cwd);
+ if (repo_path == NULL) {
+ error = got_error_from_errno("strdup");
+ goto done;
+ }
}
- if (repo_path == NULL) {
- error = got_error_from_errno("strdup");
- goto done;
- }
error = got_repo_open(&repo, repo_path, NULL);
if (error != NULL)
tog: worktree vs. -r repo