Skip to content
This repository was archived by the owner on Sep 24, 2026. It is now read-only.

Commit bc0e31c

Browse files
committed
✨ add Load method for ccoco to dynamically load the gitClient, directories, and configFile
1 parent 77d022b commit bc0e31c

2 files changed

Lines changed: 73 additions & 35 deletions

File tree

‎internal/cli/root.go‎

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package cli
22

33
import (
4-
"encoding/json"
54
"log"
65
"os"
76
"path/filepath"
@@ -13,33 +12,28 @@ import (
1312
var app *ccoco.Ccoco
1413

1514
func init() {
16-
gitClient, err := ccoco.NewGitClient(".")
15+
initialized, err := ccoco.IsInitialized(ccoco.DefaultRootDirectory, ccoco.DefaultConfigFile, ccoco.DefaultConfigDirectory, ccoco.DefaultPreflightDirectory)
1716
if err != nil {
1817
log.Fatalf("Error initializing ccoco: %v", err)
1918
}
20-
directories := &ccoco.Directories{
21-
Root: ccoco.DefaultRootDirectory,
22-
Configs: ccoco.DefaultConfigDirectory,
23-
Preflights: ccoco.DefaultPreflightDirectory,
24-
}
25-
rootPathFromCwd := gitClient.RootPathFromCwd
26-
configFileContent, err := os.ReadFile(filepath.Join(rootPathFromCwd, ccoco.DefaultConfigFile))
19+
instance, err := ccoco.New()
2720
if err != nil {
2821
log.Fatalf("Error initializing ccoco: %v", err)
2922
}
30-
content := &ccoco.FileContent{}
31-
if err := json.Unmarshal(configFileContent, &content); err != nil {
32-
log.Fatalf("Error initializing ccoco: %v", err)
33-
}
34-
configFile := &ccoco.File{
35-
Name: ccoco.DefaultConfigFile,
36-
Content: content,
37-
}
38-
instance, err := ccoco.NewWithOptions(gitClient, directories, configFile)
39-
if err != nil {
40-
log.Fatalf("Error initializing ccoco: %v", err)
23+
24+
if *initialized {
25+
if err := instance.Load(nil, nil, &ccoco.File{
26+
Name: ccoco.DefaultConfigFile,
27+
Content: &ccoco.FileContent{
28+
Files: []string{".env"},
29+
},
30+
}); err != nil {
31+
log.Fatalf("Error initializing ccoco: %v", err)
32+
}
4133
}
34+
4235
app = instance
36+
4337
}
4438

4539
var cli = &cobra.Command{

‎pkg/ccoco/ccoco.go‎

Lines changed: 59 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -145,20 +145,43 @@ func (c Ccoco) Init(opts InitOptions) error {
145145
return nil
146146
}
147147

148-
func (c Ccoco) IsInitialized() bool {
149-
if _, err := os.Stat(filepath.Join(c.gitClient.RootPathFromCwd, c.directories.Root)); os.IsNotExist(err) {
150-
return false
148+
func IsInitialized(root, configs, preflights, configFileName string) (*bool, error) {
149+
gitClient, err := NewGitClient(".")
150+
if err != nil {
151+
return nil, err
152+
}
153+
initialized := false
154+
if _, err := os.Stat(filepath.Join(gitClient.RootPathFromCwd, root)); os.IsNotExist(err) {
155+
return &initialized, nil
156+
}
157+
if _, err := os.Stat(filepath.Join(gitClient.RootPathFromCwd, configs)); os.IsNotExist(err) {
158+
return &initialized, nil
159+
}
160+
if _, err := os.Stat(filepath.Join(gitClient.RootPathFromCwd, preflights)); os.IsNotExist(err) {
161+
return &initialized, nil
162+
}
163+
if _, err := os.Stat(filepath.Join(gitClient.RootPathFromCwd, configFileName)); os.IsNotExist(err) {
164+
return &initialized, nil
151165
}
152-
if _, err := os.Stat(filepath.Join(c.gitClient.RootPathFromCwd, c.directories.Configs)); os.IsNotExist(err) {
153-
return false
166+
167+
initialized = true
168+
return &initialized, nil
169+
}
170+
171+
func (c *Ccoco) Load(gitClient *Git, directories *Directories, configFile *File) error {
172+
if c == nil {
173+
return errors.New("ccoco is nil")
174+
}
175+
if gitClient != nil {
176+
c.gitClient = gitClient
154177
}
155-
if _, err := os.Stat(filepath.Join(c.gitClient.RootPathFromCwd, c.directories.Preflights)); os.IsNotExist(err) {
156-
return false
178+
if directories != nil {
179+
c.directories = directories
157180
}
158-
if _, err := os.Stat(filepath.Join(c.gitClient.RootPathFromCwd, c.configFile.Name)); os.IsNotExist(err) {
159-
return false
181+
if configFile != nil {
182+
c.configFile = configFile
160183
}
161-
return true
184+
return nil
162185
}
163186

164187
func (c Ccoco) AddToGitIgnore() error {
@@ -266,7 +289,11 @@ type RunOptions struct {
266289

267290
func (c Ccoco) Run(opts RunOptions) error {
268291
// Check if configs are initialized
269-
if !c.IsInitialized() {
292+
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
293+
if err != nil {
294+
return err
295+
}
296+
if !*initialized {
270297
return errors.New("ccoco is not initialized. run ccoco init first")
271298
}
272299
// Get current branch from options
@@ -343,9 +370,14 @@ func (c Ccoco) Run(opts RunOptions) error {
343370

344371
func (c Ccoco) ChangeConfigFiles(currentBranch string) error {
345372
// Check if configs are initialized
346-
if !c.IsInitialized() {
373+
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
374+
if err != nil {
375+
return err
376+
}
377+
if !*initialized {
347378
return errors.New("ccoco is not initialized. run ccoco init first")
348379
}
380+
349381
for _, file := range c.configFile.Content.Files {
350382
// Encode file name to base58
351383
encodedFile := file
@@ -390,7 +422,11 @@ func (c Ccoco) ChangeConfigFiles(currentBranch string) error {
390422

391423
func (c Ccoco) GenerateConfigs() error {
392424
// Check if configs are initialized
393-
if !c.IsInitialized() {
425+
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
426+
if err != nil {
427+
return err
428+
}
429+
if !*initialized {
394430
return errors.New("ccoco is not initialized. run ccoco init first")
395431
}
396432

@@ -449,7 +485,11 @@ func (c Ccoco) GenerateConfigs() error {
449485

450486
func (c Ccoco) AddToFiles(files []string) error {
451487
// Check if configs are initialized
452-
if !c.IsInitialized() {
488+
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
489+
if err != nil {
490+
return err
491+
}
492+
if !*initialized {
453493
return errors.New("ccoco is not initialized. run ccoco init first")
454494
}
455495

@@ -482,7 +522,11 @@ func (c Ccoco) AddToFiles(files []string) error {
482522

483523
func (c Ccoco) RemoveFromFiles(files []string) error {
484524
// Check if configs are initialized
485-
if !c.IsInitialized() {
525+
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
526+
if err != nil {
527+
return err
528+
}
529+
if !*initialized {
486530
return errors.New("ccoco is not initialized. run ccoco init first")
487531
}
488532

0 commit comments

Comments
 (0)