fileexporter: Close opened fd
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
961542283d
commit
ac5982f905
3 changed files with 37 additions and 13 deletions
|
@ -4,30 +4,46 @@ import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
)
|
)
|
||||||
|
|
||||||
type archiveFileCreator interface {
|
type archiveFileCreator interface {
|
||||||
Create(name string) (io.Writer, error)
|
Create(name string) (io.Writer, error)
|
||||||
|
Close() error
|
||||||
|
}
|
||||||
|
|
||||||
|
type filesCloser []io.Closer
|
||||||
|
|
||||||
|
func (fds filesCloser) Close() error {
|
||||||
|
log.Println("Closing fd..")
|
||||||
|
for _, fd := range fds {
|
||||||
|
err := fd.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
OutputFormats["archive"] = func(args ...string) (func(string) (io.WriteCloser, error), error) {
|
OutputFormats["archive"] = func(args ...string) (func(string) (io.WriteCloser, error), io.Closer, error) {
|
||||||
if len(args) != 1 {
|
if len(args) != 1 {
|
||||||
return nil, errors.New("archive has 1 required argument: [destination-file]")
|
return nil, nil, errors.New("archive has 1 required argument: [destination-file]")
|
||||||
}
|
}
|
||||||
|
|
||||||
fd, err := os.Create(args[0])
|
fd, err := os.Create(args[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var w archiveFileCreator
|
var w archiveFileCreator
|
||||||
if path.Ext(args[0]) == ".zip" {
|
if path.Ext(args[0]) == ".zip" {
|
||||||
w = zip.NewWriter(fd)
|
w = zip.NewWriter(fd)
|
||||||
} else {
|
} else {
|
||||||
return nil, errors.New("destination file has to have .zip extension")
|
return nil, nil, errors.New("destination file has to have .zip extension")
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(dest string) (io.WriteCloser, error) {
|
return func(dest string) (io.WriteCloser, error) {
|
||||||
|
@ -37,6 +53,6 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
return NopCloser(fw), nil
|
return NopCloser(fw), nil
|
||||||
}, nil
|
}, filesCloser{w, fd}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,15 +8,15 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
OutputFormats["copy"] = func(args ...string) (func(string) (io.WriteCloser, error), error) {
|
OutputFormats["copy"] = func(args ...string) (func(string) (io.WriteCloser, error), io.Closer, error) {
|
||||||
if len(args) > 1 {
|
if len(args) > 1 {
|
||||||
return nil, errors.New("copy can only take 1 argument: [destination-folder]")
|
return nil, nil, errors.New("copy can only take 1 argument: [destination-folder]")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(args) == 1 {
|
if len(args) == 1 {
|
||||||
fic.FilesDir = args[0]
|
fic.FilesDir = args[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
"srs.epita.fr/fic-server/libfic"
|
"srs.epita.fr/fic-server/libfic"
|
||||||
)
|
)
|
||||||
|
|
||||||
var OutputFormats = map[string]func(...string) (func(string) (io.WriteCloser, error), error){}
|
var OutputFormats = map[string]func(...string) (func(string) (io.WriteCloser, error), io.Closer, error){}
|
||||||
|
|
||||||
func exportThemeFiles(tdir string) (errs error) {
|
func exportThemeFiles(tdir string) (errs error) {
|
||||||
theme, exceptions, err := sync.BuildTheme(sync.GlobalImporter, tdir)
|
theme, exceptions, err := sync.BuildTheme(sync.GlobalImporter, tdir)
|
||||||
|
@ -129,6 +129,13 @@ func main() {
|
||||||
|
|
||||||
log.Println("Using", sync.GlobalImporter.Kind())
|
log.Println("Using", sync.GlobalImporter.Kind())
|
||||||
|
|
||||||
|
hasError := doExport()
|
||||||
|
if hasError {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func doExport() bool {
|
||||||
// Configure destination
|
// Configure destination
|
||||||
if flag.NArg() < 1 {
|
if flag.NArg() < 1 {
|
||||||
var formats []string
|
var formats []string
|
||||||
|
@ -147,7 +154,10 @@ func main() {
|
||||||
|
|
||||||
log.Fatal("Please define wanted output format between [" + strings.Join(formats, " ") + "]")
|
log.Fatal("Please define wanted output format between [" + strings.Join(formats, " ") + "]")
|
||||||
} else {
|
} else {
|
||||||
fw, err := outputFormat(flag.Args()[1:]...)
|
fw, closer, err := outputFormat(flag.Args()[1:]...)
|
||||||
|
if closer != nil {
|
||||||
|
defer closer.Close()
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
} else if fw != nil {
|
} else if fw != nil {
|
||||||
|
@ -170,7 +180,5 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if hasError {
|
return hasError
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue