12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package vessel
- import (
- "fmt"
- "io/ioutil"
- "os"
- )
- // Open tries to open the file at src as a vessel.Bundle
- func Open(src string) (*Bundle, error) {
- r, err := os.Open(src)
- if err != nil {
- return nil, err
- }
- b := &Bundle{
- file: r,
- }
- err = b.tryLoadEmbeddedBundle()
- if err != nil {
- b.Close()
- return nil, err
- }
- return b, nil
- }
- // Create attaches a src file to a dest to create a vessel bundle
- func Create(dst, src string, overWrite bool) (*Bundle, error) {
- b, err := Open(dst)
- if err == nil {
- truncateAt := b.offset
- b.Close()
- if !overWrite {
- return nil, fmt.Errorf("already a bundle")
- }
- err = os.Truncate(dst, truncateAt)
- if err != nil {
- return nil, err
- }
- }
- err = concatenate(dst, src)
- if err != nil {
- return nil, err
- }
- return Open(dst)
- }
- // Create attaches a src file to a dest to create a vessel bundle
- func Build(dst, src string, overWrite bool, filter func(file string) bool) (*Bundle, error) {
- b, err := Open(dst)
- if err == nil {
- truncateAt := b.offset
- b.Close()
- if !overWrite {
- return nil, fmt.Errorf("already a bundle")
- }
- err = os.Truncate(dst, truncateAt)
- if err != nil {
- return nil, err
- }
- }
- file, err := ioutil.TempFile("./", "build.zip")
- if err != nil {
- return nil, err
- }
- defer os.Remove(file.Name())
- err = packInto(file, src, filter)
- if err != nil {
- return nil, err
- }
- err = concatenate(dst, file.Name())
- if err != nil {
- return nil, err
- }
- return Open(dst)
- }
- // Self returns a bundle that is embedded in the binary executable
- func Self() (*Bundle, error) {
- ename, err := os.Executable()
- if err != nil {
- panic(err)
- }
- return Open(ename)
- }
|