func ParallelCompile(pkgs []*dag.Package) { var localDeps *stringset.StringSet var compiledDeps *stringset.StringSet var y, z, count int var parallel []*dag.Package var oldPkgFound bool = false var zeroFirst []*dag.Package localDeps = stringset.New() compiledDeps = stringset.New() for y = 0; y < len(pkgs); y++ { localDeps.Add(pkgs[y].Name) pkgs[y].ResetIndegree() } zeroFirst = make([]*dag.Package, len(pkgs)) for y = 0; y < len(pkgs); y++ { if pkgs[y].Indegree == 0 { zeroFirst[count] = pkgs[y] count++ } } for y = 0; y < len(pkgs); y++ { if pkgs[y].Indegree > 0 { zeroFirst[count] = pkgs[y] count++ } } parallel = make([]*dag.Package, 0) for y = 0; y < len(zeroFirst); { if !zeroFirst[y].Ready(localDeps, compiledDeps) { oldPkgFound = compileMultipe(parallel, oldPkgFound) for z = 0; z < len(parallel); z++ { compiledDeps.Add(parallel[z].Name) } parallel = make([]*dag.Package, 0) } else { parallel = append(parallel, zeroFirst[y]) y++ } } if len(parallel) > 0 { _ = compileMultipe(parallel, oldPkgFound) } }
func (d Dag) External() { var err os.Error var argv []string var tmp string var set *stringset.StringSet var i int = 0 set = stringset.New() for _, v := range d { for dep := range v.dependencies.Iter() { if !d.localDependency(dep) { set.Add(dep) } } } for u := range set.Iter() { if !seemsExternal(u) { set.Remove(u) } } argv = make([]string, 0) tmp, err = exec.LookPath("goinstall") if err != nil { log.Fatalf("[ERROR] %s\n", err) } argv = append(argv, tmp) if global.GetBool("-verbose") { argv = append(argv, "-v=true") } argv = append(argv, "-u=true") argv = append(argv, "-clean=true") i = len(argv) argv = append(argv, "dummy") for u := range set.Iter() { argv[i] = u if global.GetBool("-dryrun") { fmt.Printf("%s || exit 1\n", strings.Join(argv, " ")) } else { say.Printf("goinstall: %s\n", u) handy.StdExecve(argv, true) } } }