Skip to content

Commit

Permalink
优化 stdlib_os
Browse files Browse the repository at this point in the history
  • Loading branch information
lollipopkit committed Oct 24, 2022
1 parent 6e62a0d commit 5b73eab
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 35 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
lk
releases
*/*.lkc
*.lkc
*/*.ast.json
test/test.lk
9 changes: 6 additions & 3 deletions LANG.md
Original file line number Diff line number Diff line change
Expand Up @@ -472,13 +472,16 @@ print()
### `os`
- `os.exit([code])`
退出程序,`code` 为退出码,默认为 0。无返回值。
- `os.exec (exe, [args...])`
执行一个外部程序,`exe` 为可执行文件路径,`args` 为可选参数,为可执行文件的参数
- `os.exec(script)`
执行脚本,`script` 为脚本内容
返回两个值:`output` `err`,分别为输出和错误信息。
- `os.env(name)`
- `os.getenv(name)`
获取环境变量,`name` 为环境变量名。
返回值一个:`value`,为环境变量值。
如果当前环境不存在该环境变量,则返回 `nil`
- `os.setenv(key, value)`
设置环境变量,`key` 为环境变量名,`value` 为环境变量值。
返回值一个:`err`,如果没有错误则为 `nil`
- `os.tmp()`
获取临时文件夹路径。无返回值。
- `os.mv(src, dst)`
Expand Down
25 changes: 25 additions & 0 deletions build.lk
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
args := os.args
if #args < 2 {
print("Usage: lk build.lk <version>")
os.exit(1)
}

version := args[2]

archs = {'arm64', 'amd64'}
platforms = {'darwin', 'linux', 'windows'}

for _, arch in archs {
for _, platform in platforms {
suffix := platform == 'windows' ? '.exe' : ''
prefix := fmt('GOOS=%s GOARCH=%s', platform, arch)
output := fmt('releases/lk-%s-%s-v%s%s', platform, arch, version, suffix)
cmd = fmt('%s go build -o %s', prefix, output)
_, err := os.exec(cmd)
if err != nil {
print(fmt('Failed to build %s-%s', platform, arch))
os.exit()
}
print(fmt('Successfully built %s-%s', platform, arch))
}
}
21 changes: 0 additions & 21 deletions build.py

This file was deleted.

39 changes: 29 additions & 10 deletions stdlib/lib_os.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package stdlib

import (
"io/fs"
"io/ioutil"
"os"
"os/exec"
"path"
"time"

. "git.lolli.tech/lollipopkit/lk/api"
"git.lolli.tech/lollipopkit/lk/utils"
)

var sysLib = map[string]GoFunction{
Expand All @@ -16,7 +19,8 @@ var sysLib = map[string]GoFunction{
"mv": osRename,
"link": osLink,
"tmp": osTmpName,
"env": osGetEnv,
"getenv": osGetEnv,
"setenv": osSetEnv,
"exec": osExecute,
"exit": osExit,
"ls": osLs,
Expand Down Expand Up @@ -244,22 +248,37 @@ func osGetEnv(ls LkState) int {
return 1
}

// os.exec (exe, [args...])
func osSetEnv(ls LkState) int {
key := ls.CheckString(1)
value := ls.CheckString(2)
if err := os.Setenv(key, value); err != nil {
ls.PushString(err.Error())
return 1
}
ls.PushNil()
return 1
}

// os.exec (script)
func osExecute(ls LkState) int {
exe := ls.CheckString(1)
args := make([]string, 0, ls.GetTop()-1)
for i := 2; i <= ls.GetTop(); i++ {
args = append(args, ls.CheckString(i))
script := ls.CheckString(1)
tempDir := os.TempDir()
path := path.Join(tempDir, "lkscript" + utils.Md5([]byte(script)))
err := ioutil.WriteFile(path, []byte(script), 0744)
if err != nil {
ls.PushNil()
ls.PushString(err.Error())
return 2
}
cmd := exec.Command(exe, args...)
cmd := exec.Command("bash", path)
out, err := cmd.Output()
if err != nil {
ls.PushNil()
ls.PushString(err.Error())
return 2
} else {
ls.PushString(string(out))
ls.PushNil()
}
ls.PushString(string(out))
ls.PushNil()
return 2
}

Expand Down
3 changes: 2 additions & 1 deletion test/os.lk
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ pri('rm err: ', err)
result, ok := os.exec('ls', '-l', 'test')
pri('ls result: ', ok, result)

pri('env HOME: ', os.env('HOME'))
pri('set env: ', os.setenv('LKTEST', 'test'))
pri('env HOME: ', os.getenv('LKTEST'))
pri('date: ', os.date())

dirs, err := os.ls('test')
Expand Down
10 changes: 10 additions & 0 deletions utils/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package utils

import (
"crypto/md5"
"fmt"
)

func Md5(data []byte) string {
return fmt.Sprintf("%x", md5.Sum(data))
}

0 comments on commit 5b73eab

Please sign in to comment.