diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2018-02-12 16:49:40 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-02-12 13:13:35 -0800 |
commit | ee6763af0a3b97225803c6c908a29de40336cf38 (patch) | |
tree | 5345b7b1b711cec6a79f2f6a81e442423de2ee54 /worktree.c | |
parent | cc73385cf6c5c229458775bc92e7dbbe24d11611 (diff) | |
download | git-ee6763af0a3b97225803c6c908a29de40336cf38.tar.gz |
worktree remove: allow it when $GIT_WORK_TREE is already gone
"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 <kaartic.sivaraam@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'worktree.c')
-rw-r--r-- | worktree.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/worktree.c b/worktree.c index 0373faf0dc..28989cf06e 100644 --- a/worktree.c +++ b/worktree.c @@ -267,7 +267,8 @@ static void strbuf_addf_gently(struct strbuf *buf, const char *fmt, ...) va_end(params); } -int validate_worktree(const struct worktree *wt, struct strbuf *errmsg) +int validate_worktree(const struct worktree *wt, struct strbuf *errmsg, + unsigned flags) { struct strbuf wt_path = STRBUF_INIT; char *path = NULL; @@ -303,6 +304,12 @@ int validate_worktree(const struct worktree *wt, struct strbuf *errmsg) goto done; } + if (flags & WT_VALIDATE_WORKTREE_MISSING_OK && + !file_exists(wt->path)) { + ret = 0; + goto done; + } + if (!file_exists(wt_path.buf)) { strbuf_addf_gently(errmsg, _("'%s' does not exist"), wt_path.buf); goto done; |