mirror of
https://github.com/sst/opencode.git
synced 2025-07-07 16:14:59 +00:00
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
const (
|
|
// InitFlagFilename is the name of the file that indicates whether the project has been initialized
|
|
InitFlagFilename = "init"
|
|
)
|
|
|
|
// ProjectInitFlag represents the initialization status for a project directory
|
|
type ProjectInitFlag struct {
|
|
Initialized bool `json:"initialized"`
|
|
}
|
|
|
|
// ShouldShowInitDialog checks if the initialization dialog should be shown for the current directory
|
|
func ShouldShowInitDialog() (bool, error) {
|
|
if cfg == nil {
|
|
return false, fmt.Errorf("config not loaded")
|
|
}
|
|
|
|
// Create the flag file path
|
|
flagFilePath := filepath.Join(cfg.Data.Directory, InitFlagFilename)
|
|
|
|
// Check if the flag file exists
|
|
_, err := os.Stat(flagFilePath)
|
|
if err == nil {
|
|
// File exists, don't show the dialog
|
|
return false, nil
|
|
}
|
|
|
|
// If the error is not "file not found", return the error
|
|
if !os.IsNotExist(err) {
|
|
return false, fmt.Errorf("failed to check init flag file: %w", err)
|
|
}
|
|
|
|
// File doesn't exist, show the dialog
|
|
return true, nil
|
|
}
|
|
|
|
// MarkProjectInitialized marks the current project as initialized
|
|
func MarkProjectInitialized() error {
|
|
if cfg == nil {
|
|
return fmt.Errorf("config not loaded")
|
|
}
|
|
// Create the flag file path
|
|
flagFilePath := filepath.Join(cfg.Data.Directory, InitFlagFilename)
|
|
|
|
// Create an empty file to mark the project as initialized
|
|
file, err := os.Create(flagFilePath)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to create init flag file: %w", err)
|
|
}
|
|
defer file.Close()
|
|
|
|
return nil
|
|
}
|