// loadVCSPackage loads the package found at the given VCS path. func (p *PackageLoader) loadVCSPackage(packagePath pathInformation) { // Lock on the package path to ensure no other checkouts occur for this path. pathLock := p.vcsLockMap.GetLock(packagePath.path) pathLock.Lock() defer pathLock.Unlock() existingCheckoutDir, exists := p.vcsPathsLoaded.Get(packagePath.path) if exists { // Note: existingCheckoutDir will be empty if there was an error loading the VCS. if existingCheckoutDir != "" { // Push the now-local directory onto the package loading channel. p.pushPathWithId(packagePath.referenceId, packagePath.sourceKind, pathLocalPackage, existingCheckoutDir.(string), packagePath.sal) return } } rootDirectory := path.Dir(p.rootSourceFile) pkgDirectory := path.Join(rootDirectory, SerulianPackageDirectory) // Perform the checkout of the VCS package. checkoutDirectory, err, warning := vcs.PerformVCSCheckout(packagePath.path, pkgDirectory, p.vcsDevelopmentDirectories...) if err != nil { p.vcsPathsLoaded.Set(packagePath.path, "") p.errors <- compilercommon.SourceErrorf(packagePath.sal, "Error loading VCS package '%s': %v", packagePath.path, err) return } p.vcsPathsLoaded.Set(packagePath.path, checkoutDirectory) if warning != "" { p.warnings <- compilercommon.NewSourceWarning(packagePath.sal, warning) } // Push the now-local directory onto the package loading channel. p.pushPathWithId(packagePath.referenceId, packagePath.sourceKind, pathLocalPackage, checkoutDirectory, packagePath.sal) }
// GetWarnings returns the warnings created during the build pass. func (sb *scopeBuilder) GetWarnings() []compilercommon.SourceWarning { var warnings = make([]compilercommon.SourceWarning, 0) it := sb.sg.layer.StartQuery(). IsKind(NodeTypeWarning). BuildNodeIterator() for it.Next() { warningNode := it.Node() // Lookup the location of the SRG source node. warningSource := sb.sg.srg.GetNode(warningNode.GetValue(NodePredicateNoticeSource).NodeId()) location := sb.sg.srg.NodeLocation(warningSource) // Add the error. msg := warningNode.Get(NodePredicateNoticeMessage) warnings = append(warnings, compilercommon.NewSourceWarning(location, msg)) } return warnings }