mirror of
https://github.com/EnumeratedDev/bpm.git
synced 2026-09-16 10:36:12 +00:00
Added a very basic argument system, a simple installation and removal system and the bpm test package
This commit is contained in:
+72
-1
@@ -5,6 +5,7 @@ import (
|
||||
"bufio"
|
||||
"compress/gzip"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path"
|
||||
@@ -17,6 +18,7 @@ type packageInfo struct {
|
||||
name string
|
||||
description string
|
||||
version string
|
||||
pkgType string
|
||||
depends []string
|
||||
provides []string
|
||||
}
|
||||
@@ -62,6 +64,9 @@ func readPackageInfo(contents string) (*packageInfo, error) {
|
||||
pkgInfo := packageInfo{}
|
||||
lines := strings.Split(contents, "\n")
|
||||
for num, line := range lines {
|
||||
if len(strings.TrimSpace(line)) == 0 {
|
||||
continue
|
||||
}
|
||||
split := strings.SplitN(line, ":", 2)
|
||||
if len(split) != 2 {
|
||||
return nil, errors.New("invalid pkg.info format at line " + strconv.Itoa(num))
|
||||
@@ -75,6 +80,8 @@ func readPackageInfo(contents string) (*packageInfo, error) {
|
||||
pkgInfo.description = split[1]
|
||||
case "version":
|
||||
pkgInfo.version = split[1]
|
||||
case "type":
|
||||
pkgInfo.pkgType = split[1]
|
||||
}
|
||||
}
|
||||
return &pkgInfo, nil
|
||||
@@ -85,6 +92,7 @@ func createInfoFile(pkgInfo packageInfo) string {
|
||||
ret = ret + "name: " + pkgInfo.name + "\n"
|
||||
ret = ret + "description: " + pkgInfo.description + "\n"
|
||||
ret = ret + "version: " + pkgInfo.version + "\n"
|
||||
ret = ret + "type: " + pkgInfo.pkgType + "\n"
|
||||
return ret
|
||||
}
|
||||
|
||||
@@ -198,7 +206,7 @@ func installPackage(filename, installDir string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func getInstalledPackages(rootDir string) ([]string, error) {
|
||||
func getInstalledPackages() ([]string, error) {
|
||||
dataDir := path.Join(rootDir, "var/lib/bpm/installed/")
|
||||
items, err := os.ReadDir(dataDir)
|
||||
if os.IsNotExist(err) {
|
||||
@@ -235,3 +243,66 @@ func getPackageFiles(pkg string) []string {
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func getPackageInfo(pkg string) *packageInfo {
|
||||
dataDir := path.Join(rootDir, "var/lib/bpm/installed/")
|
||||
pkgDir := path.Join(dataDir, pkg)
|
||||
files := path.Join(pkgDir, "info")
|
||||
if _, err := os.Stat(dataDir); os.IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
if _, err := os.Stat(pkgDir); os.IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
file, err := os.Open(files)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
bs, err := io.ReadAll(file)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
info, err := readPackageInfo(string(bs))
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return info
|
||||
}
|
||||
|
||||
func removePackage(pkg string) error {
|
||||
dataDir := path.Join(rootDir, "var/lib/bpm/installed/")
|
||||
pkgDir := path.Join(dataDir, pkg)
|
||||
files := getPackageFiles(pkg)
|
||||
for _, file := range files {
|
||||
file = path.Join(rootDir, file)
|
||||
stat, err := os.Stat(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if stat.IsDir() {
|
||||
dir, err := os.ReadDir(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(dir) == 0 {
|
||||
fmt.Println("Removing: " + file)
|
||||
err := os.Remove(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fmt.Println("Removing: " + file)
|
||||
err := os.Remove(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
err := os.RemoveAll(pkgDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("Removing: " + pkgDir)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user