func downloadPrereq()

in prereq.go [190:247]


func downloadPrereq(name string, version string) error {

	// names and version
	// xname = executeable name
	// vname = versioned executable name
	xname := addExeExt(name)
	vname := xname + "-" + version

	// ensure bindir
	bindir, err := EnsureBindir()
	if err != nil {
		return err
	}

	// check if file and version exists
	trace("checking", vname, version)
	if exists(bindir, vname) {
		trace("already downloaded", vname)
		return nil
	}

	// checking different versions of the same file
	oldver, seen := PrereqSeenMap[name]
	if seen {
		if oldver == version {
			trace("same version again", vname)
			return nil
		}
		return fmt.Errorf("WARNING: %s prerequisite found twice with different versions!\nPrevious version: %s, ignoring %s", name, oldver, version)
	}
	PrereqSeenMap[name] = version

	if taskDryRun {
		fmt.Printf("downloading %s %s\n", name, version)
		touch(bindir, name)
	} else {
		fmt.Printf("ensuring prerequisite %s %s\n", name, version)
		execPrereqTask(bindir, name)
		// check if file and version exists

		if !exists(bindir, xname) {
			return fmt.Errorf("failed to download %s version %s", name, version)
		}
		// check if a file is zero length and remove in this case
		fileInfo, err := os.Stat(joinpath(bindir, xname))
		if err != nil {
			return fmt.Errorf("failed to download %s version %s", name, version)
		}
		if fileInfo.Size() == 0 {
			trace("removing the empty file ", xname)
			err := os.Remove(joinpath(bindir, xname))
			if err != nil {
				return fmt.Errorf("cannot remove empty %s ", xname)
			}
		}
	}
	return touchAndClean(bindir, xname, version)
}