package Package
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"PackageManager/Archive"
|
|
"PackageManager/Client/Filesystem"
|
|
"PackageManager/Color"
|
|
"PackageManager/Helper"
|
|
)
|
|
|
|
func CreatePackage() error {
|
|
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
|
|
}
|
|
|
|
fmt.Println("\nModified files...")
|
|
for i, file := range dirtyFiles {
|
|
fmt.Printf(
|
|
"\t%d - %s\n",
|
|
i,
|
|
Color.Red(file),
|
|
)
|
|
}
|
|
|
|
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()
|
|
|
|
if choices == "" {
|
|
for i, file := range dirtyFiles {
|
|
pkgFiles[i] = file
|
|
}
|
|
for i, file := range newFiles {
|
|
pkgFiles[i] = file
|
|
}
|
|
} 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
|
|
}
|
|
|
|
fmt.Printf(
|
|
Color.Green("\nSuccessfully created package %s\n"),
|
|
pkgNameVersion,
|
|
)
|
|
|
|
return nil
|
|
}
|