From ee6763af0a3b97225803c6c908a29de40336cf38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Th=C3=A1i=20Ng=E1=BB=8Dc=20Duy?= Date: Mon, 12 Feb 2018 16:49:40 +0700 Subject: worktree remove: allow it when $GIT_WORK_TREE is already gone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "git worktree remove" basically consists of two things - delete $GIT_WORK_TREE - delete $GIT_DIR (which is $SUPER_GIT_DIR/worktrees/something) If $GIT_WORK_TREE is already gone for some reason, we should be able to finish the job by deleting $GIT_DIR. Two notes: - $GIT_WORK_TREE _can_ be missing if the worktree is locked. In that case we must not delete $GIT_DIR because the real $GIT_WORK_TREE may be in a usb stick somewhere. This is already handled because we check for lock first. - validate_worktree() is still called because it may do more checks in future (and it already does something else, like checking main worktree, but that's irrelevant in this case) Noticed-by: Kaartic Sivaraam Signed-off-by: Nguyễn Thái Ngọc Duy Signed-off-by: Junio C Hamano --- worktree.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'worktree.h') diff --git a/worktree.h b/worktree.h index a913428c3d..fe38ce10c3 100644 --- a/worktree.h +++ b/worktree.h @@ -61,12 +61,15 @@ extern int is_main_worktree(const struct worktree *wt); */ extern const char *is_worktree_locked(struct worktree *wt); +#define WT_VALIDATE_WORKTREE_MISSING_OK (1 << 0) + /* * Return zero if the worktree is in good condition. Error message is * returned if "errmsg" is not NULL. */ extern int validate_worktree(const struct worktree *wt, - struct strbuf *errmsg); + struct strbuf *errmsg, + unsigned flags); /* * Update worktrees/xxx/gitdir with the new path. -- cgit v1.2.3