func (c *Commit) CreateArchive(path string, archiveType ArchiveType) error { f, err := os.OpenFile(path, os.O_CREATE, 0644) if err == nil { f.Close() } f, err = os.OpenFile(path, os.O_WRONLY|os.O_TRUNC|os.O_EXCL, 0644) if err != nil { return err } defer f.Close() var streamer cae.Streamer switch archiveType { case AT_ZIP: streamer = zip.NewStreamArachive(f) case AT_TARGZ: streamer = tz.NewStreamArachive(f) } defer streamer.Close() return createArchive(&c.Tree, streamer) }