From e698bff8f547f35043cba3057f629fa0b7a9ad7e Mon Sep 17 00:00:00 2001 From: Timofey Kirillov Date: Thu, 21 Apr 2022 17:09:51 +0300 Subject: [PATCH] fix: git worktree switch invalidation loop Invalidation loop of cached git worktree on every werf invocation may occur when WERF_HOME (`~/.werf`) is a symlink to another volume. Signed-off-by: Timofey Kirillov --- pkg/true_git/work_tree.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/true_git/work_tree.go b/pkg/true_git/work_tree.go index a0d746f7d1..4c861876cc 100644 --- a/pkg/true_git/work_tree.go +++ b/pkg/true_git/work_tree.go @@ -81,12 +81,17 @@ func prepareWorkTree(ctx context.Context, repoDir, workTreeCacheDir string, comm case err != nil: return "", fmt.Errorf("error accessing %q: %w", workTreeDir, err) default: + resolvedWorkTreeDir, err := filepath.EvalSymlinks(workTreeDir) + if err != nil { + return "", fmt.Errorf("unable to eval symlinks of %q: %w", workTreeDir, err) + } + isWorkTreeRegistered := false if workTreeList, err := GetWorkTreeList(ctx, repoDir); err != nil { return "", fmt.Errorf("unable to get worktree list for repo %s: %w", repoDir, err) } else { for _, workTreeDesc := range workTreeList { - if filepath.ToSlash(workTreeDesc.Path) == filepath.ToSlash(workTreeDir) { + if filepath.ToSlash(workTreeDesc.Path) == filepath.ToSlash(resolvedWorkTreeDir) { isWorkTreeRegistered = true } }