| @ -1,134 +1,154 @@ | |||||
| package Package | package Package | ||||
| import ( | |||||
| "errors" | |||||
| "fmt" | |||||
| "io/ioutil" | |||||
| "os" | |||||
| "os/exec" | |||||
| "path/filepath" | |||||
| "strconv" | |||||
| "strings" | |||||
| bolt "go.etcd.io/bbolt" | |||||
| "PackageManager/Archive" | |||||
| "PackageManager/Client/Database" | |||||
| "PackageManager/Client/Filesystem" | |||||
| "PackageManager/Color" | |||||
| "PackageManager/Helper" | |||||
| "PackageManager/Variables" | |||||
| ) | |||||
| func writeManifestFile(path, name, version string) error { | |||||
| var ( | |||||
| cmd *exec.Cmd | |||||
| manifest string | |||||
| filePath string | |||||
| e error | |||||
| ) | |||||
| manifest = fmt.Sprintf(`name: "%s" | |||||
| version: "%s" | |||||
| dependancies: | |||||
| - pkg1: v1.0.0 | |||||
| - pkg2: v1.0.0 | |||||
| `, name, version) | |||||
| filePath = filepath.Join(path, "manifest.yml") | |||||
| e = ioutil.WriteFile(filePath, []byte(manifest), 0644) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| cmd = exec.Command(Variables.Editor, filePath) | |||||
| cmd.Stdin = os.Stdin | |||||
| cmd.Stdout = os.Stdout | |||||
| return cmd.Run() | |||||
| } | |||||
| func CreatePackage() error { | func CreatePackage() error { | ||||
| return nil | |||||
| var ( | |||||
| picksBucket *bolt.Bucket | |||||
| pickedFiles []string | |||||
| pkgFiles []string | |||||
| choices string | |||||
| choicesSplit []string | |||||
| pkgName string | |||||
| pkgVersion string | |||||
| pkgNameVersion string | |||||
| tmpDir string | |||||
| index int | |||||
| e error | |||||
| ) | |||||
| fmt.Println("Initialising package creation...") | |||||
| e = Database.FsDB.View(func(tx *bolt.Tx) error { | |||||
| picksBucket = tx.Bucket(Variables.FsHashPicksBucket) | |||||
| picksBucket.ForEach(func(k, v []byte) error { | |||||
| pickedFiles = append(pickedFiles, string(k)) | |||||
| return nil | |||||
| }) | |||||
| /* | |||||
| var ( | |||||
| dirtyFiles map[int]string | |||||
| newFiles map[int]string | |||||
| pkgFiles map[int]string = make(map[int]string) | |||||
| choices string | |||||
| choicesSplit []string | |||||
| filePath string | |||||
| pkgName string | |||||
| pkgVersion string | |||||
| pkgNameVersion string | |||||
| tmpDir string | |||||
| index int | |||||
| ok bool | |||||
| e error | |||||
| ) | |||||
| fmt.Println("Initialising package creation...") | |||||
| dirtyFiles, newFiles, e = Filesystem.GetFilesystemDiff() | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| return nil | |||||
| }) | |||||
| fmt.Println("\nModified files...") | |||||
| for i, file := range dirtyFiles { | |||||
| fmt.Printf( | |||||
| "\t%d - %s\n", | |||||
| i, | |||||
| Color.Red(file), | |||||
| ) | |||||
| } | |||||
| fmt.Println("Added files:") | |||||
| Filesystem.PrintFiles(pickedFiles, Color.Green, true) | |||||
| fmt.Println("\nNew files...") | |||||
| for i, file := range newFiles { | |||||
| fmt.Printf( | |||||
| "\t%d - %s\n", | |||||
| i, | |||||
| Color.Red(file), | |||||
| ) | |||||
| } | |||||
| fmt.Println("Please select the files you would like to use to create the package. Leave empty for all.") | |||||
| choices = Helper.Input() | |||||
| fmt.Println("Please select the files you would like to use to create the package. Leave empty for all.") | |||||
| choices = Helper.Input() | |||||
| if choices == "" { | |||||
| pkgFiles = pickedFiles | |||||
| } else { | |||||
| choicesSplit = strings.Split(choices, ",") | |||||
| if choices == "" { | |||||
| for i, file := range dirtyFiles { | |||||
| pkgFiles[i] = file | |||||
| for _, i := range choicesSplit { | |||||
| index, e = strconv.Atoi(i) | |||||
| if e != nil { | |||||
| // TODO: Handle this error | |||||
| panic(e) | |||||
| } | } | ||||
| for i, file := range newFiles { | |||||
| pkgFiles[i] = file | |||||
| if len(pickedFiles) < index { | |||||
| return errors.New("Invalid choice") | |||||
| } | } | ||||
| } else { | |||||
| choicesSplit = strings.Split(choices, ",") | |||||
| for _, i := range choicesSplit { | |||||
| index, e = strconv.Atoi(i) | |||||
| if e != nil { | |||||
| // TODO: Handle this error | |||||
| panic(e) | |||||
| } | |||||
| filePath, ok = dirtyFiles[index] | |||||
| if !ok { | |||||
| filePath, ok = newFiles[index] | |||||
| if !ok { | |||||
| return errors.New("Invalid package selection") | |||||
| } | |||||
| } | |||||
| pkgFiles[index] = filePath | |||||
| } | |||||
| } | |||||
| fmt.Println("Please enter the package name:") | |||||
| pkgName = Helper.Input() | |||||
| if pkgName == "" { | |||||
| return errors.New("Invalid package name") | |||||
| } | |||||
| fmt.Println("Please enter the package version:") | |||||
| pkgVersion = Helper.Input() | |||||
| if pkgVersion == "" { | |||||
| return errors.New("Invalid package name") | |||||
| } | |||||
| fmt.Printf("Package Name: %s\n", pkgName) | |||||
| fmt.Printf("Package Version: %s\n", pkgVersion) | |||||
| fmt.Println("Files to be added") | |||||
| for i, file := range pkgFiles { | |||||
| fmt.Printf( | |||||
| "\t%d - %s\n", | |||||
| i, | |||||
| Color.Green(file), | |||||
| ) | |||||
| } | |||||
| fmt.Println("Is this correct? [y/N]") | |||||
| if strings.ToLower(Helper.Input()) != "y" { | |||||
| return errors.New("User aborted") | |||||
| } | |||||
| pkgNameVersion = fmt.Sprintf("%s-%s", pkgName, pkgVersion) | |||||
| tmpDir, e = ioutil.TempDir("/tmp", pkgNameVersion) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer os.RemoveAll(tmpDir) | |||||
| for _, file := range pkgFiles { | |||||
| Filesystem.CopyFile(file, filepath.Join(tmpDir, file)) | |||||
| } | |||||
| // TODO: Add dependancy management here | |||||
| e = Archive.TarGzip(tmpDir, pkgNameVersion+".tar.gz") | |||||
| if e != nil { | |||||
| return e | |||||
| pkgFiles = append(pkgFiles, pickedFiles[index]) | |||||
| } | } | ||||
| } | |||||
| fmt.Println("Please enter the package name:") | |||||
| pkgName = Helper.Input() | |||||
| if pkgName == "" { | |||||
| return errors.New("Invalid package name") | |||||
| } | |||||
| fmt.Println("Please enter the package version:") | |||||
| pkgVersion = Helper.Input() | |||||
| if pkgVersion == "" { | |||||
| return errors.New("Invalid package name") | |||||
| } | |||||
| fmt.Printf("Package Name: %s\n", pkgName) | |||||
| fmt.Printf("Package Version: %s\n", pkgVersion) | |||||
| fmt.Println("Files to be added") | |||||
| Filesystem.PrintFiles(pkgFiles, Color.Green, false) | |||||
| fmt.Println("Is this correct? [y/N]") | |||||
| if strings.ToLower(Helper.Input()) != "y" { | |||||
| return errors.New("User aborted") | |||||
| } | |||||
| pkgNameVersion = fmt.Sprintf("%s-%s", pkgName, pkgVersion) | |||||
| tmpDir, e = ioutil.TempDir("/tmp", pkgNameVersion) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer os.RemoveAll(tmpDir) | |||||
| for _, file := range pkgFiles { | |||||
| Filesystem.CopyFile(file, filepath.Join(tmpDir, file)) | |||||
| } | |||||
| e = writeManifestFile(tmpDir, pkgName, pkgVersion) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| e = Archive.TarGzip(tmpDir, pkgNameVersion+".tar.gz") | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| fmt.Printf( | |||||
| Color.Green("\nSuccessfully created package %s\n"), | |||||
| pkgNameVersion, | |||||
| ) | |||||
| fmt.Printf( | |||||
| Color.Green("\nSuccessfully created package %s\n"), | |||||
| pkgNameVersion, | |||||
| ) | |||||
| return nil | |||||
| */ | |||||
| return nil | |||||
| } | } | ||||