github.com/AiRISTAFlowInc/fs-cli@v0.2.6/api/util.go (about)

     1  package api
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  
    10  	"github.com/AiRISTAFlowInc/fs-cli/common"
    11  	"github.com/AiRISTAFlowInc/fs-core/app"
    12  )
    13  
    14  func readAppDescriptor(project common.AppProject) (*app.Config, error) {
    15  
    16  	appDescriptorFile, err := os.Open(filepath.Join(project.Dir(), fileFlogoJson))
    17  	if err != nil {
    18  		return nil, err
    19  	}
    20  	defer appDescriptorFile.Close()
    21  
    22  	appDescriptorData, err := ioutil.ReadAll(appDescriptorFile)
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  
    27  	var appDescriptor app.Config
    28  	err = json.Unmarshal([]byte(appDescriptorData), &appDescriptor)
    29  	if err != nil {
    30  		return nil, err
    31  	}
    32  
    33  	return &appDescriptor, nil
    34  }
    35  
    36  func writeAppDescriptor(project common.AppProject, appDescriptor *app.Config) error {
    37  
    38  	appDescriptorUpdated, err := json.MarshalIndent(appDescriptor, "", "  ")
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	appDescriptorUpdatedJson := string(appDescriptorUpdated)
    44  
    45  	err = ioutil.WriteFile(filepath.Join(project.Dir(), fileFlogoJson), []byte(appDescriptorUpdatedJson), 0644)
    46  	if err != nil {
    47  		return err
    48  	}
    49  
    50  	return nil
    51  }
    52  
    53  func backupMain(project common.AppProject) error {
    54  	mainGo := filepath.Join(project.SrcDir(), fileMainGo)
    55  	mainGoBak := filepath.Join(project.SrcDir(), fileMainGo+".bak")
    56  
    57  	if _, err := os.Stat(mainGo); err == nil {
    58  		//main found, check for backup main in case we have to remove it
    59  		if _, err := os.Stat(mainGoBak); err == nil {
    60  
    61  			//remove old main backup
    62  			if Verbose() {
    63  				fmt.Printf("Removing old main backup: %s\n", mainGoBak)
    64  			}
    65  			err = os.Rename(mainGoBak, mainGo)
    66  			if err != nil {
    67  				return err
    68  			}
    69  		}
    70  		if Verbose() {
    71  			fmt.Println("Backing up main.go")
    72  		}
    73  		err = os.Rename(mainGo, mainGoBak)
    74  		if err != nil {
    75  			return err
    76  		}
    77  	}
    78  
    79  	return nil
    80  }
    81  
    82  func restoreMain(project common.AppProject) error {
    83  
    84  	mainGo := filepath.Join(project.SrcDir(), fileMainGo)
    85  	mainGoBak := filepath.Join(project.SrcDir(), fileMainGo+".bak")
    86  
    87  	if _, err := os.Stat(mainGo); err != nil {
    88  		//main not found, check for backup main
    89  		if _, err := os.Stat(mainGoBak); err == nil {
    90  			if Verbose() {
    91  				fmt.Printf("Restoring main from: %s\n", mainGoBak)
    92  			}
    93  			err = os.Rename(mainGoBak, mainGo)
    94  			if err != nil {
    95  				return err
    96  			}
    97  		} else if _, err := os.Stat(mainGo); err != nil {
    98  			return fmt.Errorf("project corrupt, main missing")
    99  		}
   100  	}
   101  
   102  	return nil
   103  }