github.com/ijc/docker-app@v0.6.1-0.20181012090447-c7ca8bc483fb/internal/packager/split.go (about) 1 package packager 2 3 import ( 4 "io" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 9 "github.com/docker/app/internal" 10 "github.com/docker/app/types" 11 "github.com/pkg/errors" 12 ) 13 14 // Split converts an app package to the split version 15 func Split(app *types.App, outputDir string) error { 16 if len(app.Composes()) > 1 { 17 return errors.New("split: multiple compose files is not supported") 18 } 19 if len(app.SettingsRaw()) > 1 { 20 return errors.New("split: multiple setting files is not supported") 21 } 22 err := os.MkdirAll(outputDir, 0755) 23 if err != nil { 24 return err 25 } 26 for file, data := range map[string][]byte{ 27 internal.MetadataFileName: app.MetadataRaw(), 28 internal.ComposeFileName: app.Composes()[0], 29 internal.SettingsFileName: app.SettingsRaw()[0], 30 } { 31 if err := ioutil.WriteFile(filepath.Join(outputDir, file), data, 0644); err != nil { 32 return err 33 } 34 } 35 return nil 36 } 37 38 // Merge converts an app-package to the single-file merged version 39 func Merge(app *types.App, target io.Writer) error { 40 if len(app.Composes()) > 1 { 41 return errors.New("merge: multiple compose files is not supported") 42 } 43 if len(app.SettingsRaw()) > 1 { 44 return errors.New("merge: multiple setting files is not supported") 45 } 46 for _, data := range [][]byte{ 47 app.MetadataRaw(), 48 []byte(types.SingleFileSeparator), 49 app.Composes()[0], 50 []byte(types.SingleFileSeparator), 51 app.SettingsRaw()[0], 52 } { 53 if _, err := target.Write(data); err != nil { 54 return err 55 } 56 } 57 return nil 58 }