mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Fix the intermittent TestGPGGit failures (#9360)
* Fix the intermittent TestGPGGit failures Reattempt to open the listener if the port is busy with a delay up to a second Switch from generating a private key each time, just use a known good key
This commit is contained in:
		
							
								
								
									
										120
									
								
								vendor/golang.org/x/tools/go/packages/packages.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										120
									
								
								vendor/golang.org/x/tools/go/packages/packages.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -48,8 +48,7 @@ const (
 | 
			
		||||
	// "placeholder" Packages with only the ID set.
 | 
			
		||||
	NeedImports
 | 
			
		||||
 | 
			
		||||
	// NeedDeps adds the fields requested by the LoadMode in the packages in Imports. If NeedImports
 | 
			
		||||
	// is not set NeedDeps has no effect.
 | 
			
		||||
	// NeedDeps adds the fields requested by the LoadMode in the packages in Imports.
 | 
			
		||||
	NeedDeps
 | 
			
		||||
 | 
			
		||||
	// NeedExportsFile adds ExportsFile.
 | 
			
		||||
@@ -75,7 +74,7 @@ const (
 | 
			
		||||
 | 
			
		||||
	// Deprecated: LoadImports exists for historical compatibility
 | 
			
		||||
	// and should not be used. Please directly specify the needed fields using the Need values.
 | 
			
		||||
	LoadImports = LoadFiles | NeedImports | NeedDeps
 | 
			
		||||
	LoadImports = LoadFiles | NeedImports
 | 
			
		||||
 | 
			
		||||
	// Deprecated: LoadTypes exists for historical compatibility
 | 
			
		||||
	// and should not be used. Please directly specify the needed fields using the Need values.
 | 
			
		||||
@@ -87,7 +86,7 @@ const (
 | 
			
		||||
 | 
			
		||||
	// Deprecated: LoadAllSyntax exists for historical compatibility
 | 
			
		||||
	// and should not be used. Please directly specify the needed fields using the Need values.
 | 
			
		||||
	LoadAllSyntax = LoadSyntax
 | 
			
		||||
	LoadAllSyntax = LoadSyntax | NeedDeps
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// A Config specifies details about how packages should be loaded.
 | 
			
		||||
@@ -416,11 +415,13 @@ type loader struct {
 | 
			
		||||
	parseCacheMu sync.Mutex
 | 
			
		||||
	exportMu     sync.Mutex // enforces mutual exclusion of exportdata operations
 | 
			
		||||
 | 
			
		||||
	// TODO(matloob): Add an implied mode here and use that instead of mode.
 | 
			
		||||
	// Implied mode would contain all the fields we need the data for so we can
 | 
			
		||||
	// get the actually requested fields. We'll zero them out before returning
 | 
			
		||||
	// packages to the user. This will make it easier for us to get the conditions
 | 
			
		||||
	// where we need certain modes right.
 | 
			
		||||
	// Config.Mode contains the implied mode (see impliedLoadMode).
 | 
			
		||||
	// Implied mode contains all the fields we need the data for.
 | 
			
		||||
	// In requestedMode there are the actually requested fields.
 | 
			
		||||
	// We'll zero them out before returning packages to the user.
 | 
			
		||||
	// This makes it easier for us to get the conditions where
 | 
			
		||||
	// we need certain modes right.
 | 
			
		||||
	requestedMode LoadMode
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type parseValue struct {
 | 
			
		||||
@@ -462,7 +463,11 @@ func newLoader(cfg *Config) *loader {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ld.Mode&NeedTypes != 0 {
 | 
			
		||||
	// Save the actually requested fields. We'll zero them out before returning packages to the user.
 | 
			
		||||
	ld.requestedMode = ld.Mode
 | 
			
		||||
	ld.Mode = impliedLoadMode(ld.Mode)
 | 
			
		||||
 | 
			
		||||
	if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 {
 | 
			
		||||
		if ld.Fset == nil {
 | 
			
		||||
			ld.Fset = token.NewFileSet()
 | 
			
		||||
		}
 | 
			
		||||
@@ -476,6 +481,7 @@ func newLoader(cfg *Config) *loader {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ld
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -496,7 +502,7 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
			
		||||
		}
 | 
			
		||||
		lpkg := &loaderPackage{
 | 
			
		||||
			Package:   pkg,
 | 
			
		||||
			needtypes: (ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && rootIndex < 0) || rootIndex >= 0,
 | 
			
		||||
			needtypes: (ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && ld.Mode&NeedDeps != 0 && rootIndex < 0) || rootIndex >= 0,
 | 
			
		||||
			needsrc: (ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && ld.Mode&NeedDeps != 0 && rootIndex < 0) || rootIndex >= 0 ||
 | 
			
		||||
				len(ld.Overlay) > 0 || // Overlays can invalidate export data. TODO(matloob): make this check fine-grained based on dependencies on overlaid files
 | 
			
		||||
				pkg.ExportFile == "" && pkg.PkgPath != "unsafe",
 | 
			
		||||
@@ -544,10 +550,8 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
			
		||||
		lpkg.color = grey
 | 
			
		||||
		stack = append(stack, lpkg) // push
 | 
			
		||||
		stubs := lpkg.Imports       // the structure form has only stubs with the ID in the Imports
 | 
			
		||||
		// If NeedTypesInfo we need dependencies (at least for the roots) to typecheck the package.
 | 
			
		||||
		// If NeedImports isn't set, the imports fields will all be zeroed out.
 | 
			
		||||
		// If NeedDeps isn't also set we want to keep the stubs.
 | 
			
		||||
		if ld.Mode&NeedTypesInfo != 0 || (ld.Mode&NeedImports != 0 && ld.Mode&NeedDeps != 0) {
 | 
			
		||||
		if ld.Mode&NeedImports != 0 {
 | 
			
		||||
			lpkg.Imports = make(map[string]*Package, len(stubs))
 | 
			
		||||
			for importPath, ipkg := range stubs {
 | 
			
		||||
				var importErr error
 | 
			
		||||
@@ -566,11 +570,8 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// If !NeedDeps, just fill Imports for the root. No need to recurse further.
 | 
			
		||||
				if ld.Mode&NeedDeps != 0 {
 | 
			
		||||
					if visit(imp) {
 | 
			
		||||
						lpkg.needsrc = true
 | 
			
		||||
					}
 | 
			
		||||
				if visit(imp) {
 | 
			
		||||
					lpkg.needsrc = true
 | 
			
		||||
				}
 | 
			
		||||
				lpkg.Imports[importPath] = imp.Package
 | 
			
		||||
			}
 | 
			
		||||
@@ -587,7 +588,7 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
			
		||||
		return lpkg.needsrc
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ld.Mode&(NeedImports|NeedDeps|NeedTypesInfo) == 0 {
 | 
			
		||||
	if ld.Mode&NeedImports == 0 {
 | 
			
		||||
		// We do this to drop the stub import packages that we are not even going to try to resolve.
 | 
			
		||||
		for _, lpkg := range initial {
 | 
			
		||||
			lpkg.Imports = nil
 | 
			
		||||
@@ -598,7 +599,7 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
			
		||||
			visit(lpkg)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if ld.Mode&NeedDeps != 0 { // TODO(matloob): This is only the case if NeedTypes is also set, right?
 | 
			
		||||
	if ld.Mode&NeedImports != 0 && ld.Mode&NeedTypes != 0 {
 | 
			
		||||
		for _, lpkg := range srcPkgs {
 | 
			
		||||
			// Complete type information is required for the
 | 
			
		||||
			// immediate dependencies of each source package.
 | 
			
		||||
@@ -608,9 +609,9 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// Load type data if needed, starting at
 | 
			
		||||
	// Load type data and syntax if needed, starting at
 | 
			
		||||
	// the initial packages (roots of the import DAG).
 | 
			
		||||
	if ld.Mode&NeedTypes != 0 {
 | 
			
		||||
	if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 {
 | 
			
		||||
		var wg sync.WaitGroup
 | 
			
		||||
		for _, lpkg := range initial {
 | 
			
		||||
			wg.Add(1)
 | 
			
		||||
@@ -623,54 +624,44 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result := make([]*Package, len(initial))
 | 
			
		||||
	importPlaceholders := make(map[string]*Package)
 | 
			
		||||
	for i, lpkg := range initial {
 | 
			
		||||
		result[i] = lpkg.Package
 | 
			
		||||
	}
 | 
			
		||||
	for i := range ld.pkgs {
 | 
			
		||||
		// Clear all unrequested fields, for extra de-Hyrum-ization.
 | 
			
		||||
		if ld.Mode&NeedName == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedName == 0 {
 | 
			
		||||
			ld.pkgs[i].Name = ""
 | 
			
		||||
			ld.pkgs[i].PkgPath = ""
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedFiles == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedFiles == 0 {
 | 
			
		||||
			ld.pkgs[i].GoFiles = nil
 | 
			
		||||
			ld.pkgs[i].OtherFiles = nil
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedCompiledGoFiles == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedCompiledGoFiles == 0 {
 | 
			
		||||
			ld.pkgs[i].CompiledGoFiles = nil
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedImports == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedImports == 0 {
 | 
			
		||||
			ld.pkgs[i].Imports = nil
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedExportsFile == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedExportsFile == 0 {
 | 
			
		||||
			ld.pkgs[i].ExportFile = ""
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedTypes == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedTypes == 0 {
 | 
			
		||||
			ld.pkgs[i].Types = nil
 | 
			
		||||
			ld.pkgs[i].Fset = nil
 | 
			
		||||
			ld.pkgs[i].IllTyped = false
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedSyntax == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedSyntax == 0 {
 | 
			
		||||
			ld.pkgs[i].Syntax = nil
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedTypesInfo == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedTypesInfo == 0 {
 | 
			
		||||
			ld.pkgs[i].TypesInfo = nil
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedTypesSizes == 0 {
 | 
			
		||||
		if ld.requestedMode&NeedTypesSizes == 0 {
 | 
			
		||||
			ld.pkgs[i].TypesSizes = nil
 | 
			
		||||
		}
 | 
			
		||||
		if ld.Mode&NeedDeps == 0 {
 | 
			
		||||
			for j, pkg := range ld.pkgs[i].Imports {
 | 
			
		||||
				ph, ok := importPlaceholders[pkg.ID]
 | 
			
		||||
				if !ok {
 | 
			
		||||
					ph = &Package{ID: pkg.ID}
 | 
			
		||||
					importPlaceholders[pkg.ID] = ph
 | 
			
		||||
				}
 | 
			
		||||
				ld.pkgs[i].Imports[j] = ph
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -691,7 +682,6 @@ func (ld *loader) loadRecursive(lpkg *loaderPackage) {
 | 
			
		||||
			}(imp)
 | 
			
		||||
		}
 | 
			
		||||
		wg.Wait()
 | 
			
		||||
 | 
			
		||||
		ld.loadPackage(lpkg)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
@@ -780,12 +770,23 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
 | 
			
		||||
		lpkg.Errors = append(lpkg.Errors, errs...)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ld.Config.Mode&NeedTypes != 0 && len(lpkg.CompiledGoFiles) == 0 && lpkg.ExportFile != "" {
 | 
			
		||||
		// The config requested loading sources and types, but sources are missing.
 | 
			
		||||
		// Add an error to the package and fall back to loading from export data.
 | 
			
		||||
		appendError(Error{"-", fmt.Sprintf("sources missing for package %s", lpkg.ID), ParseError})
 | 
			
		||||
		ld.loadFromExportData(lpkg)
 | 
			
		||||
		return // can't get syntax trees for this package
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	files, errs := ld.parseFiles(lpkg.CompiledGoFiles)
 | 
			
		||||
	for _, err := range errs {
 | 
			
		||||
		appendError(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	lpkg.Syntax = files
 | 
			
		||||
	if ld.Config.Mode&NeedTypes == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	lpkg.TypesInfo = &types.Info{
 | 
			
		||||
		Types:      make(map[ast.Expr]types.TypeAndValue),
 | 
			
		||||
@@ -818,7 +819,7 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
 | 
			
		||||
		if ipkg.Types != nil && ipkg.Types.Complete() {
 | 
			
		||||
			return ipkg.Types, nil
 | 
			
		||||
		}
 | 
			
		||||
		log.Fatalf("internal error: nil Pkg importing %q from %q", path, lpkg)
 | 
			
		||||
		log.Fatalf("internal error: package %q without types was imported from %q", path, lpkg)
 | 
			
		||||
		panic("unreachable")
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
@@ -829,7 +830,7 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
 | 
			
		||||
		// Type-check bodies of functions only in non-initial packages.
 | 
			
		||||
		// Example: for import graph A->B->C and initial packages {A,C},
 | 
			
		||||
		// we can ignore function bodies in B.
 | 
			
		||||
		IgnoreFuncBodies: (ld.Mode&(NeedDeps|NeedTypesInfo) == 0) && !lpkg.initial,
 | 
			
		||||
		IgnoreFuncBodies: ld.Mode&NeedDeps == 0 && !lpkg.initial,
 | 
			
		||||
 | 
			
		||||
		Error: appendError,
 | 
			
		||||
		Sizes: ld.sizes,
 | 
			
		||||
@@ -1091,10 +1092,25 @@ func (ld *loader) loadFromExportData(lpkg *loaderPackage) (*types.Package, error
 | 
			
		||||
	return tpkg, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func usesExportData(cfg *Config) bool {
 | 
			
		||||
	return cfg.Mode&NeedExportsFile != 0 ||
 | 
			
		||||
		// If NeedTypes but not NeedTypesInfo we won't typecheck using sources, so we need export data.
 | 
			
		||||
		(cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedTypesInfo == 0) ||
 | 
			
		||||
		// If NeedTypesInfo but not NeedDeps, we're typechecking a package using its sources plus its dependencies' export data
 | 
			
		||||
		(cfg.Mode&NeedTypesInfo != 0 && cfg.Mode&NeedDeps == 0)
 | 
			
		||||
// impliedLoadMode returns loadMode with its dependencies.
 | 
			
		||||
func impliedLoadMode(loadMode LoadMode) LoadMode {
 | 
			
		||||
	if loadMode&NeedTypesInfo != 0 && loadMode&NeedImports == 0 {
 | 
			
		||||
		// If NeedTypesInfo, go/packages needs to do typechecking itself so it can
 | 
			
		||||
		// associate type info with the AST. To do so, we need the export data
 | 
			
		||||
		// for dependencies, which means we need to ask for the direct dependencies.
 | 
			
		||||
		// NeedImports is used to ask for the direct dependencies.
 | 
			
		||||
		loadMode |= NeedImports
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if loadMode&NeedDeps != 0 && loadMode&NeedImports == 0 {
 | 
			
		||||
		// With NeedDeps we need to load at least direct dependencies.
 | 
			
		||||
		// NeedImports is used to ask for the direct dependencies.
 | 
			
		||||
		loadMode |= NeedImports
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return loadMode
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func usesExportData(cfg *Config) bool {
 | 
			
		||||
	return cfg.Mode&NeedExportsFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user