Example #1
0
func createArchive(tree *Tree, streamer cae.Streamer, relPaths ...string) error {
	var relPath string

	if len(relPaths) > 0 {
		relPath = relPaths[0]
	}
	entries, err := tree.ListEntries()
	if err != nil {
		return err
	}
	for _, te := range entries {
		if te.IsDir() {
			err := streamer.StreamFile(filepath.Join(relPath, te.name), te, nil)
			if err != nil {
				return err
			}

			newTree, err := te.ptree.SubTree(te.name)
			if err != nil {
				return err
			}

			if err = createArchive(newTree, streamer, filepath.Join(relPath, te.name)); err != nil {
				return err
			}
		} else {
			dataRc, err := te.Blob().Data()
			if err != nil {
				return err
			}
			if err := streamer.StreamReader(relPath, te, dataRc); err != nil {
				dataRc.Close()
				return err
			}
			dataRc.Close()
		}
	}

	return nil
}