Exemplo n.º 1
0
//ReadRecursively - get frozen dependencies recursively
func ReadRecursively(deps dep.DependencyMap, set map[string]string) (result string) {
	var err error

	if set == nil {
		util.Print(colors.Yellow("NOTE: This will not reflect the state of the remote unless you have just run `depman install`."))

		set = make(map[string]string)
	}

	for name, d := range deps.Map {
		var subPath string
		var depsFile string
		var subDeps dep.DependencyMap

		if _, ok := set[d.Repo]; ok {
			continue
		}

		if d.Type == dep.TypeGitClone && d.Alias == "" {
			util.PrintIndent(colors.Red("Error: Repo '" + name + "' Type '" + d.Type + "' requires 'alias' field (defined in " + deps.Path + ")"))
			continue
		}

		{
			var temp string

			temp, err = d.VCS.GetHead(d)
			if err != nil {
				util.Fatal(err)
			}

			set[d.Repo] = temp
			result += fmt.Sprintf("%s %s\n", d.Repo, temp)
		}

		subPath = d.Path()

		// Recursive
		depsFile = util.UpwardFind(subPath, dep.DepsFile)
		if depsFile != "" {
			subDeps, err = dep.Read(depsFile)
			if err == nil {
				result += ReadRecursively(subDeps, set)
			} else {
				util.Print(colors.Yellow("Error reading deps from '" + subDeps.Path + "': " + err.Error()))
			}
		}
	}
	return
}
Exemplo n.º 2
0
// PrintDep displays a dependency based on the --silent and --verbose flags
func PrintDep(name string, version string, repo string, stale bool) {
	var staleMarker string

	if stale {
		staleMarker = " *"
	}

	if !silent {
		if verbose {
			logger.Output(2, indent()+colors.Blue(name)+colors.Yellow(" ("+version+")")+" "+repo+staleMarker)
		} else {
			logger.Output(2, indent()+colors.Blue(name)+colors.Yellow(" ("+version+")")+staleMarker)
		}
	}
}
Exemplo n.º 3
0
//Read - get top-level frozen dependencies
func Read(deps dep.DependencyMap) (result string) {
	var err error
	var resultMap = make(map[string]*dep.Dependency)

	util.Print(colors.Yellow("NOTE: This will not reflect the state of the remote unless you have just run `depman install`."))

	for k, v := range deps.Map {
		if v.Type == dep.TypeGitClone && v.Alias == "" {
			util.PrintIndent(colors.Red("Error: Repo '" + k + "' Type '" + v.Type + "' requires 'alias' field (defined in " + deps.Path + ")"))
			continue
		}

		v.Version, err = v.VCS.GetHead(v)
		if err != nil {
			util.Fatal(err)
		}

		resultMap[k] = v
	}

	//not changing the logic in the loop because we might want to change the print format later
	for _, v := range resultMap {
		result += fmt.Sprintf("%s %s\n", v.Repo, v.Version)
	}

	return
}
Exemplo n.º 4
0
// SetupVCS configures the VCS depending on the type
func (d *Dependency) SetupVCS(name string) (err error) {
	switch d.Type {
	case TypeGitClone:
		if d.Alias == "" {
			util.PrintIndent(colors.Red("Error: Dependency " + name + ": Repo '" + d.Repo + "' Type '" + d.Type + "' requires 'alias' field"))
			err = ErrMissingAlias
			return
		}

		d.VCS = new(Git)
	case TypeGit:
		d.VCS = new(Git)
	case TypeBzr:
		d.VCS = new(Bzr)
	case TypeHg:
		d.VCS = new(Hg)
	default:
		util.PrintIndent(colors.Red(d.Repo + ": Unknown repository type (" + d.Type + "), skipping..."))
		util.PrintIndent(colors.Red("Valid Repository types: " + TypeGit + ", " + TypeHg + ", " + TypeBzr + ", " + TypeGitClone))
		err = ErrUnknownType
	}

	if d.Type != TypeGitClone && d.Alias != "" {
		util.Print(colors.Yellow("Warning: " + d.Repo + ": 'alias' field only allowed in dependencies with type 'git-clone', skipping..."))
		d.Alias = ""
	}

	return
}
Exemplo n.º 5
0
// Print displays a message if a newer version of depman is available
// this should only be called after Check()
func Print() {
	if !checkCalled {
		util.Fatal(colors.Red("You must call upgrade.Check() before upgrade.Print()"))
	}

	// if the command used was self-upgrade, we can just return
	if selfCalled {
		return
	}

	ref := <-channel

	if checkError != nil {
		util.Verbose(colors.Yellow("Upgrade Check Error: " + checkError.Error()))
	}

	if ref != none {
		fmt.Println(colors.Yellow(fmt.Sprintf(message, ref)))
	}
}
Exemplo n.º 6
0
// Check for duplicate dependency
// if same name and same version, skip
// if same name and different version, exit
// if different name, add to set, don't skip
func duplicate(d dep.Dependency, set map[string]string) (skip bool) {
	version, installed := set[d.Repo]
	if installed && version != d.Version {
		util.Print(colors.Red("ERROR    : Duplicate dependency with different versions detected"))
		util.Print(colors.Red("Repo     : " + d.Repo))
		util.Fatal(colors.Red("Versions : " + d.Version + "\t" + version))
	} else if installed {
		util.VerboseIndent(colors.Yellow("Skipping previously installed dependency: ") + d.Repo)
		skip = true
	} else {
		set[d.Repo] = d.Version
	}
	return
}
Exemplo n.º 7
0
// Clear clears the cache, returns true if the cache was cleared
func Clear() (cleared bool) {
	cleared = clear

	if clear {
		parts := strings.Split(os.Getenv("GOPATH"), ":")
		cacheFile = filepath.Join(parts[0], cacheFileName)

		util.Print(colors.Yellow("Clearing cache file: " + cacheFile))

		_, err := os.Stat(cacheFile)
		if err != nil {
			return
		}

		err = os.Remove(cacheFile)
		if err != nil {
			util.Fatal(err)
		}
	}

	return
}