func addFileToZip()

in tools/go/gozip/main.go [118:160]


func addFileToZip(zipWriter *zip.Writer, filePath, baseInZip string) error {
	fileToZip, err := os.Open(filePath)
	if err != nil {
		return err
	}
	defer fileToZip.Close()

	info, err := fileToZip.Stat()
	if err != nil {
		return err
	}

	header, err := zip.FileInfoHeader(info)
	if err != nil {
		return err
	}

	baseLength := len(baseInZip)
	if !strings.HasSuffix(baseInZip, pathSeparator) {
		baseLength++
	}

	header.Name = filePath[baseLength:]
	if runtime.GOOS == "windows" {
		header.Name = strings.ReplaceAll(header.Name, "\\", "/")
	}

	if _, ok := executablesMap[header.Name]; ok {
		mod := header.Mode() | 0111
		header.SetMode(mod)
	}

	header.Method = zip.Deflate
	if !fquiet {
		fmt.Printf("%s => %s\n", filePath, header.Name)
	}
	writer, err := zipWriter.CreateHeader(header)
	if err != nil {
		return err
	}
	_, err = io.Copy(writer, fileToZip)
	return err
}