changed old manifest.toml to Packet.lua and some improvements for future 100% Packet.lua implementation
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user