Exemple #1
0
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)
	}

}
Exemple #2
0
Fichier : dag.go Projet : ssrl/mgd
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)
		}
	}

}