func ExtractFileFromZip()

in tools/extract.go [106:149]


func ExtractFileFromZip(filename string, target string) error {
	archive, err := zip.OpenReader(filename)
	if err != nil {
		return err
	}
	trace("opened file", filename)

	defer archive.Close()

	for _, f := range archive.File {

		if f.FileInfo().IsDir() {
			trace("skipping dir", f.Name)
			continue
		}

		file := filepath.Base(f.Name)

		if file != target {
			trace("skipping file", f.Name)
			continue
		}

		trace("writing file", f.Name)
		flags := os.O_RDWR | os.O_CREATE | os.O_TRUNC
		dstFile, err := os.OpenFile(target, flags, 0755)
		if err != nil {
			return err
		}
		defer dstFile.Close()

		fileInArchive, err := f.Open()
		if err != nil {
			return err
		}
		defer fileInArchive.Close()

		if _, err := io.Copy(dstFile, fileInArchive); err != nil {
			return err
		}
		return nil
	}
	return fmt.Errorf("file not found")
}