Skip to content

Commit 03e435a

Browse files
nervghalexey-igrychev
authored andcommitted
fix(giterminism): prevent consistency error if .git file is not exist
Signed-off-by: Alexandr Zaytsev <alexandr.zaytsev@flant.com>
1 parent 8f76916 commit 03e435a

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

pkg/true_git/work_tree.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"io/fs"
78
"io/ioutil"
89
"os"
910
"path/filepath"
@@ -167,7 +168,17 @@ func prepareWorkTree(ctx context.Context, repoDir, workTreeCacheDir, commit stri
167168
}
168169

169170
func verifyWorkTreeConsistency(ctx context.Context, repoDir, workTreeDir string) (bool, error) {
170-
resolvedGitDir, err := resolveDotGitFile(ctx, filepath.Join(workTreeDir, ".git"))
171+
dotGitFilePath := filepath.Join(workTreeDir, ".git")
172+
173+
_, err := os.Stat(dotGitFilePath)
174+
switch {
175+
case errors.Is(err, fs.ErrNotExist):
176+
return false, nil
177+
case err != nil:
178+
return false, err
179+
}
180+
181+
resolvedGitDir, err := resolveDotGitFile(ctx, dotGitFilePath)
171182
if err != nil {
172183
return false, fmt.Errorf("unable to resolve dot-git file %q: %w", filepath.Join(workTreeDir, ".git"), err)
173184
}

pkg/true_git/work_tree_test.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,17 +128,25 @@ var _ = Describe("Work tree helpers", func() {
128128
It("passes correct work tree", func() {
129129
ctx := context.Background()
130130
valid, err := verifyWorkTreeConsistency(ctx, mainWtDir, sideWtDir)
131-
Expect(err).To((Succeed()))
131+
Expect(err).To(Succeed())
132132
Expect(valid).To(BeTrue())
133133
})
134134

135+
It("should return false,nil if got git file is removed in working tree dir", func(ctx SpecContext) {
136+
Expect(os.RemoveAll(filepath.Join(sideWtDir, ".git"))).To(Succeed())
137+
138+
valid, err := verifyWorkTreeConsistency(ctx, mainWtDir, sideWtDir)
139+
Expect(err).To(Succeed())
140+
Expect(valid).To(BeFalse())
141+
})
142+
135143
It("detects side work tree with incorrect back dot git link", func() {
136144
ctx := context.Background()
137145

138146
Expect(os.WriteFile(filepath.Join(sideWtDir, ".git"), []byte(fmt.Sprintf("gitdir: %s\n", filepath.Join(mainWtDir, ".git", "worktrees", "no-such-worktree"))), os.ModePerm)).To(Succeed())
139147

140148
valid, err := verifyWorkTreeConsistency(ctx, mainWtDir, sideWtDir)
141-
Expect(err).To((Succeed()))
149+
Expect(err).To(Succeed())
142150
Expect(valid).To(BeFalse())
143151
})
144152
})

0 commit comments

Comments
 (0)