github.com/falafeljan/pkger@v0.18.0/pkging/mem/add.go (about) 1 package mem 2 3 import ( 4 "bytes" 5 "io" 6 "os" 7 "path/filepath" 8 9 "github.com/markbates/pkger/here" 10 "github.com/markbates/pkger/pkging" 11 ) 12 13 var _ pkging.Adder = &Pkger{} 14 15 // Add copies the pkging.File into the *Pkger 16 func (fx *Pkger) Add(files ...*os.File) error { 17 for _, f := range files { 18 info, err := f.Stat() 19 if err != nil { 20 return err 21 } 22 pt, err := fx.Parse(f.Name()) 23 if err != nil { 24 return err 25 } 26 27 dir := f.Name() 28 if !info.IsDir() { 29 dir = filepath.Dir(dir) 30 } 31 32 her, err := here.Dir(dir) 33 if err != nil { 34 return err 35 } 36 if info.IsDir() { 37 err = filepath.Walk(f.Name(), func(path string, info os.FileInfo, err error) error { 38 if err != nil { 39 return err 40 } 41 42 f, err := os.Open(path) 43 if err != nil { 44 return err 45 } 46 defer f.Close() 47 48 pt, err := fx.Parse(path) 49 if err != nil { 50 return err 51 } 52 53 her, err := here.Package(pt.Pkg) 54 if err != nil { 55 return err 56 } 57 58 mf := &File{ 59 Here: her, 60 info: pkging.NewFileInfo(info), 61 path: pt, 62 pkging: fx, 63 } 64 65 if !info.IsDir() { 66 bb := &bytes.Buffer{} 67 _, err = io.Copy(bb, f) 68 if err != nil { 69 return err 70 } 71 mf.data = bb.Bytes() 72 } 73 74 fx.files.Store(mf.Path(), mf) 75 76 return nil 77 }) 78 if err != nil { 79 return err 80 } 81 continue 82 } 83 84 mf := &File{ 85 Here: her, 86 info: pkging.NewFileInfo(info), 87 path: pt, 88 pkging: fx, 89 } 90 91 if !info.IsDir() { 92 bb := &bytes.Buffer{} 93 _, err = io.Copy(bb, f) 94 if err != nil { 95 return err 96 } 97 mf.data = bb.Bytes() 98 } 99 100 fx.files.Store(mf.Path(), mf) 101 } 102 103 return nil 104 }