diff --git a/cmd/new.go b/cmd/new.go index c96096d..d607cf7 100644 --- a/cmd/new.go +++ b/cmd/new.go @@ -6,6 +6,7 @@ import ( "log/slog" "os" + "git.front.kjuulh.io/kjuulh/scaffold/internal/fetcher" "git.front.kjuulh.io/kjuulh/scaffold/internal/templates" "github.com/spf13/cobra" ) @@ -14,11 +15,16 @@ func getScaffoldCommands(registryPath *string) ([]*cobra.Command, error) { var ( ctx = context.Background() ui = slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{})) + fetcher = fetcher.NewFetcher() templateIndexer = templates.NewTemplateIndexer() templateLoader = templates.NewTemplateLoader() fileWriter = templates.NewFileWriter().WithPromptOverride(promptOverrideFile) ) + if !fetcher.Available(registryPath) { + return nil, nil + } + templateFiles, err := templateIndexer.Index(ctx, *registryPath, ui) if err != nil { return nil, fmt.Errorf("failed to index templates: %w", err) diff --git a/internal/fetcher/fetcher.go b/internal/fetcher/fetcher.go index c8b7f35..6440c39 100644 --- a/internal/fetcher/fetcher.go +++ b/internal/fetcher/fetcher.go @@ -19,25 +19,41 @@ func NewFetcher() *Fetcher { return &Fetcher{} } -const readWriteExec = 0o644 +const readWriteExec = 0o744 const githubProject = "kjuulh/scaffold" var ( - scaffoldFolder = os.ExpandEnv("$HOME/.scaffold") - scaffoldClone = path.Join(scaffoldFolder, "upstream") - scaffoldCache = path.Join(scaffoldFolder, "scaffold.updates.json") + scaffoldFolder = os.ExpandEnv("$HOME/.scaffold") + scaffoldClone = path.Join(scaffoldFolder, "upstream") + scaffoldRegistry = path.Join(scaffoldClone, "registry") + scaffoldCache = path.Join(scaffoldFolder, "scaffold.updates.json") ) +func (f *Fetcher) Available(registryPath *string) bool { + if *registryPath == "" { + if _, err := os.Stat(scaffoldClone); err != nil { + return false + } + + return true + + } + + return false +} + func (f *Fetcher) CloneRepository(ctx context.Context, registryPath *string, ui *slog.Logger) error { if err := os.MkdirAll(scaffoldFolder, readWriteExec); err != nil { return fmt.Errorf("failed to create scaffold folder: %w", err) } if *registryPath == "" { + // update the registry path as it is shared + *registryPath = scaffoldRegistry if _, err := os.Stat(scaffoldClone); err != nil { if !errors.Is(err, os.ErrNotExist) { - return fmt.Errorf("failed to find the upstream folder: %w", err) + return fmt.Errorf("failed to find the upstream folder: %s, %w", scaffoldClone, err) } ui.Info("cloning upstream templates") diff --git a/internal/templates/templates.go b/internal/templates/templates.go index 31af2f2..a5358d8 100644 --- a/internal/templates/templates.go +++ b/internal/templates/templates.go @@ -53,7 +53,7 @@ func (t *TemplateIndexer) Index(ctx context.Context, scaffoldRegistryFolder stri templateDirEntries, err := os.ReadDir(scaffoldRegistryFolder) if err != nil { - return nil, fmt.Errorf("failed to read templates dir: %w", err) + return nil, fmt.Errorf("failed to read templates dir: %s, %w", scaffoldRegistryFolder, err) } var (