diff --git a/cmd/gf/internal/cmd/cmd_init.go b/cmd/gf/internal/cmd/cmd_init.go index 85187256e5c..e027cc034f8 100644 --- a/cmd/gf/internal/cmd/cmd_init.go +++ b/cmd/gf/internal/cmd/cmd_init.go @@ -50,8 +50,9 @@ gf init my-mono-repo -a gf init my-project -u gf init my-project -g "github.com/myorg/myproject" gf init -r github.com/gogf/template-single my-project -gf init -r github.com/gogf/template-single my-project -s gf init -r github.com/gogf/examples/httpserver/jwt my-jwt +gf init -r github.com/gogf/gf/cmd/gf/v2@v2.9.7 mygf +gf init -r github.com/gogf/gf/cmd/gf/v2 mygf -s gf init -i ` cInitNameBrief = ` @@ -237,6 +238,9 @@ func (c cInit) initFromBuiltin(ctx context.Context, in cInitInput) (out *cInitOu return } + // Format the generated Go files. + utils.GoFmt(in.Name) + // Update the GoFrame version. if in.Update { mlog.Print("update goframe...") diff --git a/cmd/gf/internal/cmd/geninit/geninit.go b/cmd/gf/internal/cmd/geninit/geninit.go index 69ba9ae51d2..3eeab7afdef 100644 --- a/cmd/gf/internal/cmd/geninit/geninit.go +++ b/cmd/gf/internal/cmd/geninit/geninit.go @@ -86,7 +86,7 @@ func processGoModule(ctx context.Context, repo, name string, opts *ProcessOption // 1. Determine version to use var targetVersion string if specifiedVersion != "" { - // User specified version + // User specified version, try to use it first targetVersion = specifiedVersion mlog.Printf("Using specified version: %s", targetVersion) } else if opts.SelectVersion { @@ -120,8 +120,41 @@ func processGoModule(ctx context.Context, repo, name string, opts *ProcessOption repoWithVersion := modulePath + "@" + targetVersion srcDir, err := downloadTemplate(ctx, repoWithVersion) if err != nil { - mlog.Printf("Download failed: %v", err) - return err + // If specified version download failed, offer to select from available versions + if specifiedVersion != "" { + mlog.Printf("Failed to download specified version '%s': %v", specifiedVersion, err) + mlog.Print("Fetching available versions...") + + versionInfo, verErr := GetModuleVersions(ctx, modulePath) + if verErr != nil { + mlog.Printf("Failed to get available versions: %v", verErr) + return err // Return original download error + } + + if len(versionInfo.Versions) == 0 { + mlog.Print("No versions available for this module") + return err + } + + // Let user select from available versions + selectedVersion, selErr := SelectVersion(ctx, versionInfo.Versions, modulePath) + if selErr != nil { + mlog.Printf("Version selection failed: %v", selErr) + return selErr + } + + // Retry download with selected version + targetVersion = selectedVersion + repoWithVersion = modulePath + "@" + targetVersion + srcDir, err = downloadTemplate(ctx, repoWithVersion) + if err != nil { + mlog.Printf("Download failed: %v", err) + return err + } + } else { + mlog.Printf("Download failed: %v", err) + return err + } } mlog.Debugf("Template located at: %s", srcDir) diff --git a/cmd/gf/internal/cmd/geninit/geninit_ast.go b/cmd/gf/internal/cmd/geninit/geninit_ast.go index 6fcfe8a6c77..1775a3a497c 100644 --- a/cmd/gf/internal/cmd/geninit/geninit_ast.go +++ b/cmd/gf/internal/cmd/geninit/geninit_ast.go @@ -78,11 +78,10 @@ func (r *ASTReplacer) ReplaceInFile(ctx context.Context, filePath string) error return nil } - // Write back to file + // Write back to file without formatting. + // Formatting will be handled by utils.GoFmt after all replacements are done. var buf bytes.Buffer - // Use default printer configuration to match gofmt output - cfg := &printer.Config{} - if err := cfg.Fprint(&buf, r.fset, file); err != nil { + if err := printer.Fprint(&buf, r.fset, file); err != nil { return err } diff --git a/cmd/gf/internal/cmd/geninit/geninit_generator.go b/cmd/gf/internal/cmd/geninit/geninit_generator.go index 62c1c68d701..7076cde9aa7 100644 --- a/cmd/gf/internal/cmd/geninit/geninit_generator.go +++ b/cmd/gf/internal/cmd/geninit/geninit_generator.go @@ -15,6 +15,7 @@ import ( "github.com/gogf/gf/v2/text/gstr" "github.com/gogf/gf/cmd/gf/v2/internal/utility/mlog" + "github.com/gogf/gf/cmd/gf/v2/internal/utility/utils" ) // generateProject copies the template to the destination and performs cleanup @@ -81,6 +82,9 @@ func generateProject(ctx context.Context, srcPath, name, oldModule, newModule st } } + // 6. Format the generated Go files + utils.GoFmt(dstPath) + mlog.Print("Project generated successfully!") return nil }