mirror of https://github.com/databricks/cli.git
Make 'persistToDisk' take a context argument
This commit is contained in:
parent
4fea0219fd
commit
9e7aaa3f26
|
@ -17,7 +17,7 @@ type file interface {
|
|||
DstPath() *destinationPath
|
||||
|
||||
// Write file to disk at the destination path.
|
||||
PersistToDisk() error
|
||||
Write(ctx context.Context) error
|
||||
|
||||
// contents returns the file contents as a byte slice.
|
||||
// This is used for testing purposes.
|
||||
|
@ -60,7 +60,7 @@ func (f *copyFile) DstPath() *destinationPath {
|
|||
return f.dstPath
|
||||
}
|
||||
|
||||
func (f *copyFile) PersistToDisk() error {
|
||||
func (f *copyFile) Write(ctx context.Context) error {
|
||||
path := f.DstPath().absPath()
|
||||
err := os.MkdirAll(filepath.Dir(path), 0755)
|
||||
if err != nil {
|
||||
|
@ -97,7 +97,7 @@ func (f *inMemoryFile) DstPath() *destinationPath {
|
|||
return f.dstPath
|
||||
}
|
||||
|
||||
func (f *inMemoryFile) PersistToDisk() error {
|
||||
func (f *inMemoryFile) Write(ctx context.Context) error {
|
||||
path := f.DstPath().absPath()
|
||||
|
||||
err := os.MkdirAll(filepath.Dir(path), 0755)
|
||||
|
|
|
@ -12,7 +12,7 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func testInMemoryFile(t *testing.T, perm fs.FileMode) {
|
||||
func testInMemoryFile(t *testing.T, ctx context.Context, perm fs.FileMode) {
|
||||
tmpDir := t.TempDir()
|
||||
|
||||
f := &inMemoryFile{
|
||||
|
@ -23,14 +23,14 @@ func testInMemoryFile(t *testing.T, perm fs.FileMode) {
|
|||
perm: perm,
|
||||
content: []byte("123"),
|
||||
}
|
||||
err := f.PersistToDisk()
|
||||
err := f.Write(ctx)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assertFileContent(t, filepath.Join(tmpDir, "a/b/c"), "123")
|
||||
assertFilePermissions(t, filepath.Join(tmpDir, "a/b/c"), perm)
|
||||
}
|
||||
|
||||
func testCopyFile(t *testing.T, perm fs.FileMode) {
|
||||
func testCopyFile(t *testing.T, ctx context.Context, perm fs.FileMode) {
|
||||
tmpDir := t.TempDir()
|
||||
err := os.WriteFile(filepath.Join(tmpDir, "source"), []byte("qwerty"), perm)
|
||||
require.NoError(t, err)
|
||||
|
@ -45,7 +45,7 @@ func testCopyFile(t *testing.T, perm fs.FileMode) {
|
|||
srcPath: "source",
|
||||
srcFS: os.DirFS(tmpDir),
|
||||
}
|
||||
err = f.PersistToDisk()
|
||||
err = f.Write(ctx)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assertFileContent(t, filepath.Join(tmpDir, "a/b/c"), "qwerty")
|
||||
|
@ -78,7 +78,8 @@ func TestTemplateInMemoryFilePersistToDisk(t *testing.T) {
|
|||
if runtime.GOOS == "windows" {
|
||||
t.SkipNow()
|
||||
}
|
||||
testInMemoryFile(t, 0755)
|
||||
ctx := context.Background()
|
||||
testInMemoryFile(t, ctx, 0755)
|
||||
}
|
||||
|
||||
func TestTemplateInMemoryFilePersistToDiskForWindows(t *testing.T) {
|
||||
|
@ -87,14 +88,16 @@ func TestTemplateInMemoryFilePersistToDiskForWindows(t *testing.T) {
|
|||
}
|
||||
// we have separate tests for windows because of differences in valid
|
||||
// fs.FileMode values we can use for different operating systems.
|
||||
testInMemoryFile(t, 0666)
|
||||
ctx := context.Background()
|
||||
testInMemoryFile(t, ctx, 0666)
|
||||
}
|
||||
|
||||
func TestTemplateCopyFilePersistToDisk(t *testing.T) {
|
||||
if runtime.GOOS == "windows" {
|
||||
t.SkipNow()
|
||||
}
|
||||
testCopyFile(t, 0644)
|
||||
ctx := context.Background()
|
||||
testCopyFile(t, ctx, 0644)
|
||||
}
|
||||
|
||||
func TestTemplateCopyFilePersistToDiskForWindows(t *testing.T) {
|
||||
|
@ -103,5 +106,6 @@ func TestTemplateCopyFilePersistToDiskForWindows(t *testing.T) {
|
|||
}
|
||||
// we have separate tests for windows because of differences in valid
|
||||
// fs.FileMode values we can use for different operating systems.
|
||||
testCopyFile(t, 0666)
|
||||
ctx := context.Background()
|
||||
testCopyFile(t, ctx, 0666)
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ func Materialize(ctx context.Context, configFilePath string, templateFS fs.FS, o
|
|||
return err
|
||||
}
|
||||
|
||||
err = r.persistToDisk()
|
||||
err = r.persistToDisk(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -299,7 +299,7 @@ func (r *renderer) walk() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (r *renderer) persistToDisk() error {
|
||||
func (r *renderer) persistToDisk(ctx context.Context) error {
|
||||
// Accumulate files which we will persist, skipping files whose path matches
|
||||
// any of the skip patterns
|
||||
filesToPersist := make([]file, 0)
|
||||
|
@ -329,7 +329,7 @@ func (r *renderer) persistToDisk() error {
|
|||
|
||||
// Persist files to disk
|
||||
for _, file := range filesToPersist {
|
||||
err := file.PersistToDisk()
|
||||
err := file.Write(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ func assertBuiltinTemplateValid(t *testing.T, template string, settings map[stri
|
|||
// Evaluate template
|
||||
err = renderer.walk()
|
||||
require.NoError(t, err)
|
||||
err = renderer.persistToDisk()
|
||||
err = renderer.persistToDisk(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
b, err := bundle.Load(ctx, filepath.Join(tempDir, "my_project"))
|
||||
|
@ -187,7 +187,7 @@ func TestRendererWithAssociatedTemplateInLibrary(t *testing.T) {
|
|||
err = r.walk()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = r.persistToDisk()
|
||||
err = r.persistToDisk(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
b, err := os.ReadFile(filepath.Join(tmpDir, "my_email"))
|
||||
|
@ -350,7 +350,7 @@ func TestRendererPersistToDisk(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
err := r.persistToDisk()
|
||||
err := r.persistToDisk(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.NoFileExists(t, filepath.Join(tmpDir, "a", "b", "c"))
|
||||
|
@ -438,7 +438,7 @@ func TestRendererSkipAllFilesInCurrentDirectory(t *testing.T) {
|
|||
// All 3 files are executed and have in memory representations
|
||||
require.Len(t, r.files, 3)
|
||||
|
||||
err = r.persistToDisk()
|
||||
err = r.persistToDisk(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
entries, err := os.ReadDir(tmpDir)
|
||||
|
@ -480,7 +480,7 @@ func TestRendererSkip(t *testing.T) {
|
|||
// This is because "dir2/*" matches the files in dir2, but not dir2 itself
|
||||
assert.Len(t, r.files, 6)
|
||||
|
||||
err = r.persistToDisk()
|
||||
err = r.persistToDisk(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.FileExists(t, filepath.Join(tmpDir, "file1"))
|
||||
|
@ -534,6 +534,7 @@ func TestRendererReadsPermissionsBits(t *testing.T) {
|
|||
|
||||
func TestRendererErrorOnConflictingFile(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
ctx := context.Background()
|
||||
|
||||
f, err := os.Create(filepath.Join(tmpDir, "a"))
|
||||
require.NoError(t, err)
|
||||
|
@ -553,7 +554,7 @@ func TestRendererErrorOnConflictingFile(t *testing.T) {
|
|||
},
|
||||
},
|
||||
}
|
||||
err = r.persistToDisk()
|
||||
err = r.persistToDisk(ctx)
|
||||
assert.EqualError(t, err, fmt.Sprintf("failed to initialize template, one or more files already exist: %s", filepath.Join(tmpDir, "a")))
|
||||
}
|
||||
|
||||
|
@ -580,7 +581,7 @@ func TestRendererNoErrorOnConflictingFileIfSkipped(t *testing.T) {
|
|||
},
|
||||
},
|
||||
}
|
||||
err = r.persistToDisk()
|
||||
err = r.persistToDisk(ctx)
|
||||
// No error is returned even though a conflicting file exists. This is because
|
||||
// the generated file is being skipped
|
||||
assert.NoError(t, err)
|
||||
|
@ -623,7 +624,7 @@ func TestRendererFileTreeRendering(t *testing.T) {
|
|||
assert.Len(t, r.files, 1)
|
||||
assert.Equal(t, r.files[0].DstPath().absPath(), filepath.Join(tmpDir, "my_directory", "my_file"))
|
||||
|
||||
err = r.persistToDisk()
|
||||
err = r.persistToDisk(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Assert files and directories are correctly materialized.
|
||||
|
|
Loading…
Reference in New Issue