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)
}