Skip to content

Commit

Permalink
✨ add Load method for ccoco to dynamically load the gitClient, direct…
Browse files Browse the repository at this point in the history
…ories, and configFile
  • Loading branch information
xarunoba committed May 31, 2024
1 parent 77d022b commit bc0e31c
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 35 deletions.
34 changes: 14 additions & 20 deletions internal/cli/root.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package cli

import (
"encoding/json"
"log"
"os"
"path/filepath"
Expand All @@ -13,33 +12,28 @@ import (
var app *ccoco.Ccoco

func init() {
gitClient, err := ccoco.NewGitClient(".")
initialized, err := ccoco.IsInitialized(ccoco.DefaultRootDirectory, ccoco.DefaultConfigFile, ccoco.DefaultConfigDirectory, ccoco.DefaultPreflightDirectory)
if err != nil {
log.Fatalf("Error initializing ccoco: %v", err)
}
directories := &ccoco.Directories{
Root: ccoco.DefaultRootDirectory,
Configs: ccoco.DefaultConfigDirectory,
Preflights: ccoco.DefaultPreflightDirectory,
}
rootPathFromCwd := gitClient.RootPathFromCwd
configFileContent, err := os.ReadFile(filepath.Join(rootPathFromCwd, ccoco.DefaultConfigFile))
instance, err := ccoco.New()
if err != nil {
log.Fatalf("Error initializing ccoco: %v", err)
}
content := &ccoco.FileContent{}
if err := json.Unmarshal(configFileContent, &content); err != nil {
log.Fatalf("Error initializing ccoco: %v", err)
}
configFile := &ccoco.File{
Name: ccoco.DefaultConfigFile,
Content: content,
}
instance, err := ccoco.NewWithOptions(gitClient, directories, configFile)
if err != nil {
log.Fatalf("Error initializing ccoco: %v", err)

if *initialized {
if err := instance.Load(nil, nil, &ccoco.File{
Name: ccoco.DefaultConfigFile,
Content: &ccoco.FileContent{
Files: []string{".env"},
},
}); err != nil {
log.Fatalf("Error initializing ccoco: %v", err)
}
}

app = instance

}

var cli = &cobra.Command{
Expand Down
74 changes: 59 additions & 15 deletions pkg/ccoco/ccoco.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,20 +145,43 @@ func (c Ccoco) Init(opts InitOptions) error {
return nil
}

func (c Ccoco) IsInitialized() bool {
if _, err := os.Stat(filepath.Join(c.gitClient.RootPathFromCwd, c.directories.Root)); os.IsNotExist(err) {
return false
func IsInitialized(root, configs, preflights, configFileName string) (*bool, error) {
gitClient, err := NewGitClient(".")
if err != nil {
return nil, err
}
initialized := false
if _, err := os.Stat(filepath.Join(gitClient.RootPathFromCwd, root)); os.IsNotExist(err) {
return &initialized, nil
}
if _, err := os.Stat(filepath.Join(gitClient.RootPathFromCwd, configs)); os.IsNotExist(err) {
return &initialized, nil
}
if _, err := os.Stat(filepath.Join(gitClient.RootPathFromCwd, preflights)); os.IsNotExist(err) {
return &initialized, nil
}
if _, err := os.Stat(filepath.Join(gitClient.RootPathFromCwd, configFileName)); os.IsNotExist(err) {
return &initialized, nil
}
if _, err := os.Stat(filepath.Join(c.gitClient.RootPathFromCwd, c.directories.Configs)); os.IsNotExist(err) {
return false

initialized = true
return &initialized, nil
}

func (c *Ccoco) Load(gitClient *Git, directories *Directories, configFile *File) error {
if c == nil {
return errors.New("ccoco is nil")
}
if gitClient != nil {
c.gitClient = gitClient
}
if _, err := os.Stat(filepath.Join(c.gitClient.RootPathFromCwd, c.directories.Preflights)); os.IsNotExist(err) {
return false
if directories != nil {
c.directories = directories
}
if _, err := os.Stat(filepath.Join(c.gitClient.RootPathFromCwd, c.configFile.Name)); os.IsNotExist(err) {
return false
if configFile != nil {
c.configFile = configFile
}
return true
return nil
}

func (c Ccoco) AddToGitIgnore() error {
Expand Down Expand Up @@ -266,7 +289,11 @@ type RunOptions struct {

func (c Ccoco) Run(opts RunOptions) error {
// Check if configs are initialized
if !c.IsInitialized() {
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
if err != nil {
return err
}
if !*initialized {
return errors.New("ccoco is not initialized. run ccoco init first")
}
// Get current branch from options
Expand Down Expand Up @@ -343,9 +370,14 @@ func (c Ccoco) Run(opts RunOptions) error {

func (c Ccoco) ChangeConfigFiles(currentBranch string) error {
// Check if configs are initialized
if !c.IsInitialized() {
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
if err != nil {
return err
}
if !*initialized {
return errors.New("ccoco is not initialized. run ccoco init first")
}

for _, file := range c.configFile.Content.Files {
// Encode file name to base58
encodedFile := file
Expand Down Expand Up @@ -390,7 +422,11 @@ func (c Ccoco) ChangeConfigFiles(currentBranch string) error {

func (c Ccoco) GenerateConfigs() error {
// Check if configs are initialized
if !c.IsInitialized() {
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
if err != nil {
return err
}
if !*initialized {
return errors.New("ccoco is not initialized. run ccoco init first")
}

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

func (c Ccoco) AddToFiles(files []string) error {
// Check if configs are initialized
if !c.IsInitialized() {
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
if err != nil {
return err
}
if !*initialized {
return errors.New("ccoco is not initialized. run ccoco init first")
}

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

func (c Ccoco) RemoveFromFiles(files []string) error {
// Check if configs are initialized
if !c.IsInitialized() {
initialized, err := IsInitialized(c.directories.Root, c.directories.Configs, c.directories.Preflights, c.configFile.Name)
if err != nil {
return err
}
if !*initialized {
return errors.New("ccoco is not initialized. run ccoco init first")
}

Expand Down

0 comments on commit bc0e31c

Please sign in to comment.