48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package archive
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
type Archiver interface {
|
|
ArchiveContent(content []byte, infilename string) error
|
|
ArchiveFile(infilename string) error
|
|
ArchiveDir(indirname string) error
|
|
}
|
|
|
|
type ArchiverBuilder func(filepath string) Archiver
|
|
|
|
var archiverBuilders = map[string]ArchiverBuilder{
|
|
"zip": NewZipArchiver,
|
|
}
|
|
|
|
func getArchiver(archiveType string, filepath string) Archiver {
|
|
if builder, ok := archiverBuilders[archiveType]; ok {
|
|
return builder(filepath)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func assertValidFile(infilename string) (os.FileInfo, error) {
|
|
fi, err := os.Stat(infilename)
|
|
if err != nil && os.IsNotExist(err) {
|
|
return fi, fmt.Errorf("could not archive missing file: %s", infilename)
|
|
}
|
|
return fi, err
|
|
}
|
|
|
|
func assertValidDir(indirname string) (os.FileInfo, error) {
|
|
fi, err := os.Stat(indirname)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return fi, fmt.Errorf("could not archive missing directory: %s", indirname)
|
|
}
|
|
return fi, err
|
|
}
|
|
if !fi.IsDir() {
|
|
return fi, fmt.Errorf("could not archive directory that is a file: %s", indirname)
|
|
}
|
|
return fi, nil
|
|
}
|