prune --worktrees: fix expire vs worktree existence condition
`git prune --worktrees` was pruning worktrees which were non-existent OR expired, while it rather should prune those which are orphaned AND expired, as git-checkout documentation describes. Fix it. Add test 'not prune proper checkouts', which uses valid but expired worktree. Modify test 'not prune recent checkouts' to remove the worktree before pruning - link in worktrees still must survive. In older form it is useless because would pass always when the other test passes. Signed-off-by: Max Kirillov <max@max630.net> Acked-by: Duy Nguyen <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
466e8d5d66
commit
562bc08093
@ -120,11 +120,15 @@ static int prune_worktree(const char *id, struct strbuf *reason)
|
||||
if (!stat(git_path("worktrees/%s/link", id), &st_link) &&
|
||||
st_link.st_nlink > 1)
|
||||
return 0;
|
||||
strbuf_addf(reason, _("Removing worktrees/%s: gitdir file points to non-existent location"), id);
|
||||
return 1;
|
||||
if (st.st_mtime <= expire) {
|
||||
strbuf_addf(reason, _("Removing worktrees/%s: gitdir file points to non-existent location"), id);
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
free(path);
|
||||
return st.st_mtime <= expire;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void prune_worktrees(void)
|
||||
|
Reference in New Issue
Block a user