func ReadLocalPackages(repo *repo.Repo, basePath string) ( pkgMap *map[string]interfaces.PackageInterface, warnings []string, err error) { pkgMap = &map[string]interfaces.PackageInterface{} warnings = []string{} searchPaths, err := repo.FilteredSearchList("") if err != nil { return } for _, path := range searchPaths { pkgDir := basePath + "/" + path if util.NodeNotExist(pkgDir) { continue } var dirList []string if dirList, err = repo.FilteredSearchList(path); err != nil { return } for _, subDir := range dirList { var subWarnings []string subWarnings, err = ReadLocalPackageRecursive(repo, *pkgMap, basePath, filepath.Join(path, subDir)) warnings = append(warnings, subWarnings...) if err != nil { return } } } return }
func ReadLocalPackageRecursive(repo *repo.Repo, pkgList map[string]interfaces.PackageInterface, basePath string, pkgName string) ([]string, error) { var warnings []string dirList, err := repo.FilteredSearchList(pkgName) if err != nil { return warnings, util.NewNewtError(err.Error()) } for _, name := range dirList { if LocalPackageSpecialName(name) || strings.HasPrefix(name, ".") { continue } subWarnings, err := ReadLocalPackageRecursive(repo, pkgList, basePath, filepath.Join(pkgName, name)) warnings = append(warnings, subWarnings...) if err != nil { return warnings, err } } if util.NodeNotExist(filepath.Join(basePath, pkgName, PACKAGE_FILE_NAME)) { return warnings, nil } pkg, err := LoadLocalPackage(repo, filepath.Join(basePath, pkgName)) if err != nil { warnings = append(warnings, err.Error()) return warnings, nil } if oldPkg, ok := pkgList[pkg.Name()]; ok { oldlPkg := oldPkg.(*LocalPackage) warnings = append(warnings, fmt.Sprintf("Multiple packages with same pkg.name=%s "+ "in repo %s; path1=%s path2=%s", oldlPkg.Name(), repo.Name(), oldlPkg.BasePath(), pkg.BasePath())) return warnings, nil } pkgList[pkg.Name()] = pkg return warnings, nil }