func cleanCacheForTag()

in cmd/sync-tags/main.go [541:596]


func cleanCacheForTag(tag string) error {
	dir, err := os.Getwd()
	if err != nil {
		return fmt.Errorf("unable to get current working directory: %v", err)
	}
	pkg, err := fullPackageName(dir)
	if err != nil {
		return fmt.Errorf("failed to get package at %s: %v", dir, err)
	}
	cacheDir := fmt.Sprintf("%s/pkg/mod/cache/download/%s/@v", os.Getenv("GOPATH"), pkg)

	goModFile := fmt.Sprintf("%s/%s.mod", cacheDir, tag)
	if _, err := os.Stat(goModFile); err == nil {
		if err2 := os.Remove(goModFile); err2 != nil {
			return fmt.Errorf("error deleting file %s: %v", goModFile, err2)
		}
	}

	infoFile := fmt.Sprintf("%s/%s.info", cacheDir, tag)
	if _, err := os.Stat(infoFile); err == nil {
		if err2 := os.Remove(infoFile); err2 != nil {
			return fmt.Errorf("error deleting file %s: %v", infoFile, err2)
		}
	}

	zipFile := fmt.Sprintf("%s/%s.zip", cacheDir, tag)
	if _, err := os.Stat(zipFile); err == nil {
		if err2 := os.Remove(zipFile); err2 != nil {
			return fmt.Errorf("error deleting file %s: %v", zipFile, err2)
		}
	}

	listFile := fmt.Sprintf("%s/list", cacheDir)
	if _, err := os.Stat(listFile); err == nil {
		oldContent, err2 := ioutil.ReadFile(listFile)
		if err2 != nil {
			return fmt.Errorf("error reading file %s: %v", listFile, err2)
		}

		lines := strings.Split(string(oldContent), "\n")
		newContent := []string{}
		for _, line := range lines {
			if line != tag {
				newContent = append(newContent, line)
			}
		}
		output := strings.Join(newContent, "\n")

		if err := ioutil.WriteFile(listFile, []byte(output), 0644); err != nil {
			return fmt.Errorf("error reading file %s: %v", listFile, err)
		}
	}

	fmt.Printf("Cleared go mod cache files for %s tag.\n", tag)
	return nil
}