Go: Postpone go.mod creation until necessary

This commit is contained in:
Michael B. Gale
2024-02-14 17:19:55 +00:00
parent 1055e773ef
commit 6267506a77
2 changed files with 14 additions and 16 deletions

View File

@@ -473,6 +473,11 @@ func installDependencies(workspace project.GoWorkspace) {
log.Println("Installing dependencies using `glide install`")
util.RunCmd(install)
} else {
if workspace.Modules == nil {
project.InitGoModForLegacyProject(workspace.BaseDir)
workspace.Modules = project.LoadGoModules([]string{filepath.Join(workspace.BaseDir, "go.mod")})
}
// get dependencies for all modules
for _, module := range workspace.Modules {
install = exec.Command("go", "get", "-v", "./...")

View File

@@ -179,7 +179,7 @@ func findGoModFiles(root string) []string {
// Given a list of `go.mod` file paths, try to parse them all. The resulting array of `GoModule` objects
// will be the same length as the input array and the objects will contain at least the `go.mod` path.
// If parsing the corresponding file is successful, then the parsed contents will also be available.
func loadGoModules(goModFilePaths []string) []*GoModule {
func LoadGoModules(goModFilePaths []string) []*GoModule {
results := make([]*GoModule, len(goModFilePaths))
for i, goModFilePath := range goModFilePaths {
@@ -219,7 +219,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace {
log.Printf("Unable to read %s, falling back to finding `go.mod` files manually:\n%s\n", workFilePath, err.Error())
return GoWorkspace{
BaseDir: baseDir,
Modules: loadGoModules(findGoModFiles(baseDir)),
Modules: LoadGoModules(findGoModFiles(baseDir)),
DepMode: GoGetWithModules,
ModMode: getModMode(GoGetWithModules, baseDir),
}
@@ -232,7 +232,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace {
log.Printf("Unable to parse %s, falling back to finding `go.mod` files manually:\n%s\n", workFilePath, err.Error())
return GoWorkspace{
BaseDir: baseDir,
Modules: loadGoModules(findGoModFiles(baseDir)),
Modules: LoadGoModules(findGoModFiles(baseDir)),
DepMode: GoGetWithModules,
ModMode: getModMode(GoGetWithModules, baseDir),
}
@@ -255,7 +255,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace {
return GoWorkspace{
BaseDir: baseDir,
WorkspaceFile: workFile,
Modules: loadGoModules(goModFilePaths),
Modules: LoadGoModules(goModFilePaths),
DepMode: GoGetWithModules,
ModMode: ModReadonly, // Workspaces only support "readonly"
}
@@ -278,7 +278,7 @@ func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace {
for i, goModFile := range goModFiles {
results[i] = GoWorkspace{
BaseDir: filepath.Dir(goModFile),
Modules: loadGoModules([]string{goModFile}),
Modules: LoadGoModules([]string{goModFile}),
DepMode: GoGetWithModules,
ModMode: getModMode(GoGetWithModules, filepath.Dir(goModFile)),
}
@@ -327,7 +327,7 @@ func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace {
log.Printf("Module %s is not referenced by any go.work file; adding it separately.\n", goModFile)
results = append(results, GoWorkspace{
BaseDir: filepath.Dir(goModFile),
Modules: loadGoModules([]string{goModFile}),
Modules: LoadGoModules([]string{goModFile}),
DepMode: GoGetWithModules,
ModMode: getModMode(GoGetWithModules, filepath.Dir(goModFile)),
})
@@ -394,16 +394,12 @@ func getBuildRoots(emitDiagnostics bool) (goWorkspaces []GoWorkspace, totalModul
return
}
// Try to initialize a `go.mod` file automatically.
InitGoModForLegacyProject(".")
goWorkspaces = []GoWorkspace{{
BaseDir: ".",
DepMode: GoGetWithModules,
Modules: loadGoModules([]string{"go.mod"}),
DepMode: GoGetNoModules,
ModMode: getModMode(GoGetWithModules, "."),
}}
totalModuleFiles = 1
totalModuleFiles = 0
return
}
@@ -437,14 +433,11 @@ func getBuildRoots(emitDiagnostics bool) (goWorkspaces []GoWorkspace, totalModul
// Try to initialize a `go.mod` file automatically for the stray source files.
if !slices.Contains(goModDirs, path) {
InitGoModForLegacyProject(path)
goWorkspaces = append(goWorkspaces, GoWorkspace{
BaseDir: path,
Modules: loadGoModules([]string{filepath.Join(path, "go.mod")}),
DepMode: GoGetWithModules,
DepMode: GoGetNoModules,
ModMode: ModUnset,
})
totalModuleFiles += 1
goModDirs = append(goModDirs, path)
break
}