eonlite/main.go

97 lines
4.1 KiB
Go

package main
import (
"fmt"
"gitea.com/oreonproject/eonlite/library"
"github.com/fatih/color"
"os"
"strconv"
)
func main() {
if len(os.Args) < 2 {
fmt.Println(color.GreenString("[INFO]"), "Usage: eonlite <path to rpm>")
return
}
filesInstalled, err, errorCode := library.InstallRPM(os.Args[1], func(severity string, content string, prompt bool) string {
var severityPretty string
switch severity {
case "INFO":
severityPretty = color.GreenString("[INFO]")
case "WARN":
severityPretty = color.YellowString("[WARN]")
case "ERROR":
severityPretty = color.HiYellowString("[ERROR]")
case "CRITICAL":
severityPretty = color.HiRedString("[CRITICAL]")
case "FATAL":
severityPretty = color.RedString("[FATAL]")
}
fmt.Println(severityPretty, content)
if prompt {
fmt.Print(": ")
var userInput string
_, err := fmt.Scanln(&userInput)
if err != nil {
fmt.Println(color.RedString("[FATAL]"), "Failed to read user input:", err)
os.Exit(17)
} else {
return userInput
}
}
return ""
})
if err != nil {
switch errorCode {
case 1:
fmt.Println(color.RedString("[FATAL]"), "Failed to open RPM", os.Args[1])
case 2:
fmt.Println(color.RedString("[FATAL]"), "Failed to create buffer:", err)
case 3:
fmt.Println(color.RedString("[FATAL]"), "Failed to read RPM at offset:", err)
case 4:
fmt.Println(color.RedString("[FATAL]"), "Failed to close RPM:", err)
case 5:
fmt.Println(color.RedString("[FATAL]"), "Failed to create ZStandard decoder:", err)
case 6:
fmt.Println(color.RedString("[FATAL]"), "Failed to un-CPIO file number", strconv.Itoa(filesInstalled)+":", err)
case 7:
fmt.Println(color.RedString("[FATAL]"), "Failed to create directory (are you running as root?):", err)
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
case 8:
fmt.Println(color.RedString("[FATAL]"), "Failed to read directory (are you running as root?):", err)
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
case 9:
fmt.Println(color.RedString("[FATAL]"), "You cannot put a file into a non-directory. Another file may be conflicting with a directory name of this RPM.")
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
case 10:
fmt.Println(color.RedString("[FATAL]"), "Failed to read file (are you running as root?):", err)
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
case 11:
fmt.Println(color.RedString("[FATAL]"), "You cannot write a file where a directory already exists. A directory name may be conflicting with a file in this RPM.")
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
case 12:
fmt.Println(color.RedString("[FATAL]"), "Failed to remove file:", err)
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
case 13:
fmt.Println(color.RedString("[FATAL]"), "Failed open file for writing:", err)
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
case 14:
fmt.Println(color.RedString("[FATAL]"), "Failed to write file:", err)
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
case 15:
fmt.Println(color.RedString("[FATAL]"), "Failed to close file after writing:", err)
fmt.Println(color.GreenString("[INFO]"), filesInstalled, "files were installed before the error occurred.")
default:
fmt.Println(color.RedString("[FATAL]"), "An impossible logic error has occurred. Please check if the laws of physics still apply, and if so, please move your computer to a location with less radiation, such as a lead nuclear bunker: value of", errorCode, "is not in library code")
errorCode = 16
}
os.Exit(errorCode)
} else {
fmt.Println(color.GreenString("[INFO]"), "Installation complete! Installed", filesInstalled, "files")
os.Exit(errorCode)
}
}