v5 fixes some error messages mentioning "working directory" instead of "working tree" and split the double use of "lock_reason" field in "struct worktree". This series depends on nd/worktree-cleanup-post-head-protection. Diff from v4 -- 8< -- diff --git a/builtin/worktree.c b/builtin/worktree.c index cb5026d..4877421 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -478,9 +478,9 @@ static int lock_worktree(int ac, const char **av, const char *prefix) worktrees = get_worktrees(); wt = find_worktree(worktrees, prefix, av[0]); if (!wt) - die(_("'%s' is not a working directory"), av[0]); + die(_("'%s' is not a working tree"), av[0]); if (is_main_worktree(wt)) - die(_("'%s' is a main working directory"), av[0]); + die(_("The main working tree cannot be locked or unlocked")); old_reason = is_worktree_locked(wt); if (old_reason) { @@ -511,9 +511,9 @@ static int unlock_worktree(int ac, const char **av, const char *prefix) worktrees = get_worktrees(); wt = find_worktree(worktrees, prefix, av[0]); if (!wt) - die(_("'%s' is not a working directory"), av[0]); + die(_("'%s' is not a working tree"), av[0]); if (is_main_worktree(wt)) - die(_("'%s' is a main working directory"), av[0]); + die(_("The main working tree cannot be locked or unlocked")); if (!is_worktree_locked(wt)) die(_("'%s' is not locked"), av[0]); ret = unlink_or_warn(git_common_path("worktrees/%s/locked", wt->id)); diff --git a/worktree.c b/worktree.c index b16262b..2107c06 100644 --- a/worktree.c +++ b/worktree.c @@ -5,8 +5,6 @@ #include "dir.h" #include "wt-status.h" -static const char *lock_field_uninitialized = "value is not important"; - void free_worktrees(struct worktree **worktrees) { int i = 0; @@ -15,8 +13,7 @@ void free_worktrees(struct worktree **worktrees) free(worktrees[i]->path); free(worktrees[i]->id); free(worktrees[i]->head_ref); - if (worktrees[i]->lock_reason != lock_field_uninitialized) - free(worktrees[i]->lock_reason); + free(worktrees[i]->lock_reason); free(worktrees[i]); } free (worktrees); @@ -102,7 +99,8 @@ static struct worktree *get_main_worktree(void) worktree->is_detached = is_detached; worktree->is_current = 0; add_head_info(&head_ref, worktree); - worktree->lock_reason = (char *)lock_field_uninitialized; + worktree->lock_reason = NULL; + worktree->lock_reason_valid = 0; done: strbuf_release(&path); @@ -148,7 +146,8 @@ static struct worktree *get_linked_worktree(const char *id) worktree->is_detached = is_detached; worktree->is_current = 0; add_head_info(&head_ref, worktree); - worktree->lock_reason = (char *)lock_field_uninitialized; + worktree->lock_reason = NULL; + worktree->lock_reason_valid = 0; done: strbuf_release(&path); @@ -271,7 +270,9 @@ int is_main_worktree(const struct worktree *wt) const char *is_worktree_locked(struct worktree *wt) { - if (wt->lock_reason == lock_field_uninitialized) { + assert(!is_main_worktree(wt)); + + if (!wt->lock_reason_valid) { struct strbuf path = STRBUF_INIT; strbuf_addstr(&path, worktree_git_path(wt, "locked")); @@ -283,6 +284,7 @@ const char *is_worktree_locked(struct worktree *wt) wt->lock_reason = strbuf_detach(&lock_reason, NULL); } else wt->lock_reason = NULL; + wt->lock_reason_valid = 1; strbuf_release(&path); } diff --git a/worktree.h b/worktree.h index 263b61d..90e1311 100644 --- a/worktree.h +++ b/worktree.h @@ -10,6 +10,7 @@ struct worktree { int is_detached; int is_bare; int is_current; + int lock_reason_valid; }; /* Functions for acting on the information about worktrees. */ -- >8 -- Nguyễn Thái Ngọc Duy (6): worktree.c: add find_worktree() worktree.c: add is_main_worktree() worktree.c: add is_worktree_locked() worktree: add "lock" command worktree: add "unlock" command worktree.c: find_worktree() search by path suffix Documentation/git-worktree.txt | 36 +++++++++++++--- builtin/worktree.c | 66 +++++++++++++++++++++++++++++ contrib/completion/git-completion.bash | 5 ++- t/t2028-worktree-move.sh (new +x) | 62 +++++++++++++++++++++++++++ worktree.c | 77 ++++++++++++++++++++++++++++++++++ worktree.h | 21 ++++++++++ 6 files changed, 260 insertions(+), 7 deletions(-) create mode 100755 t/t2028-worktree-move.sh -- 2.8.2.524.g6ff3d78 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html