diff options
Diffstat (limited to 'workhorse/internal/helper/tempfile.go')
-rw-r--r-- | workhorse/internal/helper/tempfile.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/workhorse/internal/helper/tempfile.go b/workhorse/internal/helper/tempfile.go new file mode 100644 index 00000000000..d8fc0d44698 --- /dev/null +++ b/workhorse/internal/helper/tempfile.go @@ -0,0 +1,35 @@ +package helper + +import ( + "io" + "io/ioutil" + "os" +) + +func ReadAllTempfile(r io.Reader) (tempfile *os.File, err error) { + tempfile, err = ioutil.TempFile("", "gitlab-workhorse-read-all-tempfile") + if err != nil { + return nil, err + } + + defer func() { + // Avoid leaking an open file if the function returns with an error + if err != nil { + tempfile.Close() + } + }() + + if err := os.Remove(tempfile.Name()); err != nil { + return nil, err + } + + if _, err := io.Copy(tempfile, r); err != nil { + return nil, err + } + + if _, err := tempfile.Seek(0, 0); err != nil { + return nil, err + } + + return tempfile, nil +} |