Skip to content

Commit 9812a6a

Browse files
committed
Added WriteToTempFile function
1 parent f61b032 commit 9812a6a

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ module github.com/arduino/go-paths-helper
22

33
go 1.12
44

5-
require github.com/stretchr/testify v1.3.0
5+
require (
6+
github.com/pkg/errors v0.9.1
7+
github.com/stretchr/testify v1.3.0
8+
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
22
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
4+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
35
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
46
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
57
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=

paths.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ import (
3737
"path/filepath"
3838
"strings"
3939
"time"
40+
41+
"github.com/pkg/errors"
4042
)
4143

4244
// Path represents a path
@@ -457,6 +459,23 @@ func (p *Path) WriteFile(data []byte) error {
457459
return ioutil.WriteFile(p.path, data, os.FileMode(0644))
458460
}
459461

462+
// WriteToTempFile writes data to a newly generated temporary file.
463+
// dir and prefix have the same meaning for MkTempFile.
464+
// In case of success the Path to the temp file is returned.
465+
func WriteToTempFile(data []byte, dir *Path, prefix string) (res *Path, err error) {
466+
f, err := MkTempFile(dir, prefix)
467+
if err != nil {
468+
return nil, err
469+
}
470+
defer f.Close()
471+
if n, err := f.Write(data); err != nil {
472+
return nil, err
473+
} else if n < len(data) {
474+
return nil, errors.Errorf("could not write all data (written %d bytes out of %d)", n, len(data))
475+
}
476+
return New(f.Name()), nil
477+
}
478+
460479
// ReadFileAsLines reads the file named by filename and returns it as an
461480
// array of lines. This function takes care of the newline encoding
462481
// differences between different OS

paths_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ package paths
3131

3232
import (
3333
"path/filepath"
34+
"strings"
3435
"testing"
3536

3637
"github.com/stretchr/testify/require"
@@ -337,3 +338,18 @@ func TestRelativeTo(t *testing.T) {
337338
require.Error(t, err)
338339
require.Nil(t, res)
339340
}
341+
342+
func TestWriteToTempFile(t *testing.T) {
343+
tmpDir := New("_testdata", "tmp")
344+
tmpData := []byte("test")
345+
tmp, err := WriteToTempFile(tmpData, tmpDir, "prefix")
346+
defer tmp.Remove()
347+
require.NoError(t, err)
348+
require.True(t, strings.HasPrefix(tmp.Base(), "prefix"))
349+
inside, err := tmp.IsInsideDir(tmpDir)
350+
require.NoError(t, err)
351+
require.True(t, inside)
352+
data, err := tmp.ReadFile()
353+
require.NoError(t, err)
354+
require.Equal(t, tmpData, data)
355+
}

0 commit comments

Comments
 (0)