changed old manifest.toml to Packet.lua and some improvements for future 100% Packet.lua implementation

This commit is contained in:
2025-10-25 12:44:40 -03:00
parent 5ba30c617a
commit ecce74d2e9
11 changed files with 420 additions and 130 deletions

View File

@@ -1,9 +1,11 @@
package utils_lua
import (
"fmt"
"os"
"github.com/go-git/go-git"
"github.com/go-git/go-git/v6"
"github.com/go-git/go-git/v6/plumbing"
lua "github.com/yuin/gopher-lua"
)
@@ -11,9 +13,15 @@ func LGitClone(L *lua.LState) int {
uri := L.CheckString(1)
output := L.CheckString(2)
_, err := git.PlainClone(output, false, &git.CloneOptions{
depth := 1
if L.GetTop() > 2 {
depth = L.CheckInt(3)
}
_, err := git.PlainClone(output, &git.CloneOptions{
URL: uri,
Progress: os.Stdout,
Depth: depth,
})
if err != nil {
L.Push(lua.LFalse)
@@ -25,4 +33,95 @@ func LGitClone(L *lua.LState) int {
return 2
}
func LGitCheckout(L)
func LGitCheckout(L *lua.LState) int {
dir := L.CheckString(1)
branchorid := L.CheckString(2)
repo, err := git.PlainOpen(dir)
if err != nil {
L.Push(lua.LFalse)
L.Push(lua.LString(err.Error()))
return 2
}
worktree, err := repo.Worktree()
if err != nil {
L.Push(lua.LFalse)
L.Push(lua.LString(err.Error()))
return 2
}
if err := tryCheckout(*worktree, branchorid); err != nil {
L.Push(lua.LFalse)
L.Push(lua.LString(err.Error()))
return 2
}
L.Push(lua.LTrue)
L.Push(lua.LNil)
return 2
}
func LGitPUll(L *lua.LState) int {
dir := L.CheckString(1)
depth := 1
if L.GetTop() > 1 {
depth = L.CheckInt(2)
}
repo, err := git.PlainOpen(dir)
if err != nil {
L.Push(lua.LFalse)
L.Push(lua.LString(err.Error()))
return 2
}
worktree, err := repo.Worktree()
if err != nil {
L.Push(lua.LFalse)
L.Push(lua.LString(err.Error()))
return 2
}
if err := worktree.Pull(&git.PullOptions{Depth: depth}); err != nil {
L.Push(lua.LFalse)
L.Push(lua.LString(err.Error()))
return 2
}
L.Push(lua.LTrue)
L.Push(lua.LNil)
return 2
}
func tryCheckout(worktree git.Worktree, reference string) error {
err := worktree.Checkout(&git.CheckoutOptions{
Branch: plumbing.ReferenceName(reference),
})
if err == nil {
return nil
}
err = worktree.Checkout(&git.CheckoutOptions{
Branch: plumbing.ReferenceName("refs/heads/" + reference),
})
if err == nil {
return nil
}
err = worktree.Checkout(&git.CheckoutOptions{
Branch: plumbing.ReferenceName("refs/tags/" + reference),
})
if err == nil {
return nil
}
hash := plumbing.NewHash(reference)
err = worktree.Checkout(&git.CheckoutOptions{
Hash: hash,
})
if err == nil {
return nil
}
return fmt.Errorf("cannot checkout '%s' as branch, tag, or commit", reference)
}

View File

@@ -1,8 +1,6 @@
package utils
import (
"archive/tar"
"bytes"
"crypto/ed25519"
"database/sql"
"fmt"
@@ -17,12 +15,9 @@ import (
"strings"
"syscall"
"packets/configs"
"packets/internal/consts"
errors_packets "packets/internal/errors"
"github.com/klauspost/compress/zstd"
"github.com/pelletier/go-toml/v2"
"packets/internal/packet"
)
type Package struct {
@@ -39,11 +34,11 @@ type Package struct {
Size int64
Dependencies map[string]string
Manifest packet.PacketLua
Signature []byte
PublicKey ed25519.PublicKey
Manifest configs.Manifest
Serial int
}
@@ -65,40 +60,6 @@ func GetFileHTTP(url string) ([]byte, error) {
return fileBytes, nil
}
// ReadManifest is crucial to get package metadata it reads manifest.toml from a package file (tar.zst)
func ReadManifest(file io.Reader) (configs.Manifest, error) {
zstdReader, err := zstd.NewReader(file)
if err != nil {
return configs.Manifest{}, err
}
defer zstdReader.Close()
tarReader := tar.NewReader(zstdReader)
for {
header, err := tarReader.Next()
if err == io.EOF {
break
}
if err != nil {
return configs.Manifest{}, err
}
if filepath.Base(header.Name) == "manifest.toml" {
decoder := toml.NewDecoder(tarReader)
var manifest configs.Manifest
if err := decoder.Decode(&manifest); err != nil {
return configs.Manifest{}, nil
}
return manifest, nil
}
}
return configs.Manifest{}, errors_packets.ErrCantFindManifestTOML
}
// CopyDir copies a directory from source to destination
func CopyDir(src string, dest string) error {
if stats, err := os.Stat(src); err != nil {
@@ -190,6 +151,7 @@ func CopyFile(source string, destination string) error {
}
// Write writes the package file to the cache directory and returns the path to it
func (p *Package) Write() (string, error) {
if err := os.WriteFile(filepath.Join(consts.DefaultCache_d, p.Filename), p.PackageF, 0o644); err != nil {
_ = os.Remove(filepath.Join(consts.DefaultCache_d, p.Filename))
@@ -210,7 +172,7 @@ func (p *Package) AddToInstalledDB(inCache int, packagePath string) error {
defer func() {
if !success {
_, err := db.Exec("DELETE FROM packages WHERE id = ?", p.Manifest.Package.Id)
_, err := db.Exec("DELETE FROM packages WHERE id = ?", p.Manifest.Id)
if err != nil {
log.Println("failed to rollback package addition:", err)
}
@@ -218,12 +180,12 @@ func (p *Package) AddToInstalledDB(inCache int, packagePath string) error {
}()
_, err = db.Exec(`
INSERT INTO packages (
query_name, id, version, description,
serial, package_d, filename, os, arch, in_cache
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
INSERT INTO packages (
query_name, id, version, description,
serial, package_d, filename, os, arch, in_cache
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
p.QueryName,
p.Manifest.Package.Id,
p.Manifest.Id,
p.Version,
p.Description,
p.Serial,
@@ -238,7 +200,7 @@ func (p *Package) AddToInstalledDB(inCache int, packagePath string) error {
}
for depnName, versionConstraint := range p.Dependencies {
_, err = db.Exec("INSERT INTO package_dependencies (package_id, dependency_name, version_constraint) VALUES (?, ?, ?)", p.Manifest.Package.Id, depnName, versionConstraint)
_, err = db.Exec("INSERT INTO package_dependencies (package_id, dependency_name, version_constraint) VALUES (?, ?, ?)", p.Manifest.Id, depnName, versionConstraint)
}
success = true
@@ -343,18 +305,6 @@ func ResolvDependencies(depnList map[string]string) ([]string, error) {
return resolved, nil
}
func ManifestFileRead(file io.Reader) (configs.Manifest, error) {
decoder := toml.NewDecoder(file)
var manifest configs.Manifest
if err := decoder.Decode(&manifest); err != nil {
return configs.Manifest{}, nil
}
return manifest, nil
}
func RemoveFromInstalledDB(id string) error {
db, err := sql.Open("sqlite", consts.InstalledDB)
if err != nil {
@@ -468,8 +418,7 @@ func GetPackage(id string) (Package, error) {
skipping:
reader := bytes.NewReader(this.PackageF)
this.Manifest, err = ReadManifest(reader)
this.Manifest, err = packet.ReadPacket(this.PackageF)
if err != nil {
return Package{}, err
}
@@ -510,3 +459,21 @@ func ChangeToNoPermission() error {
}
func ElevatePermission() error { return syscall.Setresuid(0, 0, 0) }
func getFileHTTP(url string) ([]byte, error) {
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
if resp.StatusCode != http.StatusOK {
return nil, errors_packets.ErrResponseNot200OK
}
fileBytes, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return fileBytes, nil
}