148 lines
3.4 KiB
Go
148 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
/* ---BPM | Bubble Package Manager--- */
|
|
/* Made By CapCreeperGR */
|
|
/* A simple-to-use package manager */
|
|
/* ---------------------------------- */
|
|
|
|
var bpmVer = "0.0.1"
|
|
var rootDir string = "/"
|
|
|
|
func main() {
|
|
fmt.Printf("Running %s %s\n", getKernel(), getArch())
|
|
resolveCommand()
|
|
/*_, err := readPackage("test_hello_package/hello.bpm")
|
|
err := installPackage("test_hello_package/hello.bpm", rootDir)
|
|
if err != nil {
|
|
log.Fatalf("Could not read package\nError: %s\n", err)
|
|
}
|
|
removePackage("hello")*/
|
|
}
|
|
|
|
func getArgs() []string {
|
|
return os.Args[1:]
|
|
}
|
|
|
|
type commandType uint8
|
|
|
|
const (
|
|
help commandType = iota
|
|
version
|
|
info
|
|
list
|
|
install
|
|
remove
|
|
cleanup
|
|
)
|
|
|
|
func getCommandType() commandType {
|
|
if len(getArgs()) == 0 {
|
|
return help
|
|
}
|
|
cmd := getArgs()[0]
|
|
switch cmd {
|
|
case "version":
|
|
return version
|
|
case "info":
|
|
return info
|
|
case "list":
|
|
return list
|
|
case "install":
|
|
return install
|
|
case "remove":
|
|
return remove
|
|
case "cleanup":
|
|
return cleanup
|
|
default:
|
|
return help
|
|
}
|
|
}
|
|
|
|
func resolveCommand() {
|
|
switch getCommandType() {
|
|
case version:
|
|
fmt.Println("Bubble Package Manager (BPM)")
|
|
fmt.Println("Version: " + bpmVer)
|
|
case info:
|
|
packages := getArgs()[1:]
|
|
if len(packages) == 0 {
|
|
fmt.Println("No packages were given")
|
|
return
|
|
}
|
|
for n, pkg := range packages {
|
|
info := getPackageInfo(pkg)
|
|
if info == nil {
|
|
fmt.Printf("Package (%s) could not be found\n", pkg)
|
|
continue
|
|
}
|
|
fmt.Print("---------------\n" + createInfoFile(*info))
|
|
if n == len(packages)-1 {
|
|
fmt.Println("---------------")
|
|
}
|
|
}
|
|
case install:
|
|
files := getArgs()[1:]
|
|
if len(files) == 0 {
|
|
fmt.Println("No files were given to install")
|
|
return
|
|
}
|
|
for _, file := range files {
|
|
pkgInfo, err := readPackage(file)
|
|
if err != nil {
|
|
log.Fatalf("Could not read package\nError: %s\n", err)
|
|
}
|
|
fmt.Print("---------------\n" + createInfoFile(*pkgInfo))
|
|
fmt.Println("---------------")
|
|
reader := bufio.NewReader(os.Stdin)
|
|
fmt.Print("Do you wish to install this package? [y\\N] ")
|
|
text, _ := reader.ReadString('\n')
|
|
if strings.TrimSpace(strings.ToLower(text)) != "y" && strings.TrimSpace(strings.ToLower(text)) != "yes" {
|
|
fmt.Printf("Skipping package (%s)...\n", pkgInfo.name)
|
|
continue
|
|
}
|
|
err = installPackage(file, rootDir)
|
|
if err != nil {
|
|
log.Fatalf("Could not install package\nError: %s\n", err)
|
|
}
|
|
fmt.Printf("Package (%s) was successfully installed!\n", pkgInfo.name)
|
|
}
|
|
case remove:
|
|
packages := getArgs()[1:]
|
|
if len(packages) == 0 {
|
|
fmt.Println("No packages were given")
|
|
return
|
|
}
|
|
for _, pkg := range packages {
|
|
pkgInfo := getPackageInfo(pkg)
|
|
if pkgInfo == nil {
|
|
fmt.Printf("Package (%s) could not be found\n", pkg)
|
|
continue
|
|
}
|
|
fmt.Print("---------------\n" + createInfoFile(*pkgInfo))
|
|
fmt.Println("---------------")
|
|
reader := bufio.NewReader(os.Stdin)
|
|
fmt.Print("Do you wish to remove this package? [y\\N] ")
|
|
text, _ := reader.ReadString('\n')
|
|
if strings.TrimSpace(strings.ToLower(text)) != "y" && strings.TrimSpace(strings.ToLower(text)) != "yes" {
|
|
fmt.Printf("Skipping package (%s)...\n", pkgInfo.name)
|
|
continue
|
|
}
|
|
err := removePackage(pkg)
|
|
if err != nil {
|
|
log.Fatalf("Could not remove package\nError: %s\n", err)
|
|
}
|
|
fmt.Printf("Package (%s) was successfully removed!\n", pkgInfo.name)
|
|
}
|
|
default:
|
|
fmt.Println("help...")
|
|
}
|
|
}
|