Ejemplo n.º 1
0
// Run start update repositories
func (repo *Repository) Run(config *Config) map[string]map[string]packages.Composer {
	var d driver.Driver
	switch repo.Type {
	case "git", "vcs", "composer":
		d = &driver.Git{URL: repo.URL}
		err := d.Run()
		if err != nil {
			utils.Logger.Error(err)
		}

		pm := make(map[string]map[string]packages.Composer)
		if len(pm[d.GetName()]) == 0 {
			pm[d.GetName()] = make(map[string]packages.Composer)
		}

		if config.File.Archive.Directory == "" {
			pm[d.GetName()] = d.GetPackages()
			return pm
		}

		flag := make(chan bool, len(d.GetPackages()))
		ch := make(chan packages.Composer)

		for _, value := range d.GetPackages() {
			go func(p packages.Composer) {
				flag <- true
				defer func() {
					<-flag
					ch <- p
				}()

				if config.File.Archive.SkipDev && !p.Stability {
					return
				}

				switch config.File.Archive.Format {
				case "zip":
					repo.Compress(config, d, &p)
				case "tar":
					utils.Logger.Error("Tar format not sopported yet!")
				default:
					utils.Logger.Errorf("Invalid archive format: %s!", config.File.Archive.Format)
				}
			}(value)
		}

		for i := 0; i < len(d.GetPackages()); i++ {
			p := <-ch
			pm[d.GetName()][p.Version] = p
		}

		return pm
	case "bitbucket", "git-bitbucket":
		utils.Logger.Error("Bitbucket driver not supported yet!")
	default:
		utils.Logger.Error("Driver was not specified!")
	}

	return map[string]map[string]packages.Composer{}
}