func copyCharmDir(dst string, dir *charm.Dir) { var b bytes.Buffer err := dir.BundleTo(&b) if err != nil { panic(err) } bundle, err := charm.ReadBundleBytes(b.Bytes()) if err != nil { panic(err) } err = bundle.ExpandTo(dst) if err != nil { panic(err) } }
func (s *BundleSuite) prepareBundle(c *gc.C, charmDir *charm.Dir, bundlePath string) { file, err := os.Create(bundlePath) c.Assert(err, gc.IsNil) defer file.Close() zipw := zip.NewWriter(file) defer zipw.Close() h := &zip.FileHeader{Name: "revision"} h.SetMode(syscall.S_IFREG | 0644) w, err := zipw.CreateHeader(h) c.Assert(err, gc.IsNil) _, err = w.Write([]byte(strconv.Itoa(charmDir.Revision()))) h = &zip.FileHeader{Name: "metadata.yaml", Method: zip.Deflate} h.SetMode(0644) w, err = zipw.CreateHeader(h) c.Assert(err, gc.IsNil) data, err := goyaml.Marshal(charmDir.Meta()) c.Assert(err, gc.IsNil) _, err = w.Write(data) c.Assert(err, gc.IsNil) for name := range charmDir.Meta().Hooks() { hookName := filepath.Join("hooks", name) h = &zip.FileHeader{ Name: hookName, Method: zip.Deflate, } // Force it non-executable h.SetMode(0644) w, err := zipw.CreateHeader(h) c.Assert(err, gc.IsNil) _, err = w.Write([]byte("not important")) c.Assert(err, gc.IsNil) } }