Skip to content

Commit 6a815f4

Browse files
authored
Merge pull request #150 from Peefy/kcl-go-lib-home
refactor: kcl lib home and install lock
2 parents 7e88a1e + b50e88a commit 6a815f4

20 files changed

+179
-23
lines changed

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
module kcl-lang.io/lib
22

3-
go 1.19
3+
go 1.23
44

55
require (
66
github.com/ebitengine/purego v0.7.1
7+
github.com/gofrs/flock v0.12.1
78
google.golang.org/protobuf v1.34.2
89
)
910

go.sum

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
1+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
13
github.com/ebitengine/purego v0.7.1 h1:6/55d26lG3o9VCZX8lping+bZcmShseiqlh2bnUDiPA=
24
github.com/ebitengine/purego v0.7.1/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ=
5+
github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
6+
github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
37
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
8+
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
9+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
10+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
11+
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
12+
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
413
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
514
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
615
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
16+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
717
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
818
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
19+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
20+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

go/install/install.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"path/filepath"
88
"runtime"
99

10-
lib "kcl-lang.io/lib/go/lib"
10+
"github.com/gofrs/flock"
1111
)
1212

1313
const KCLVM_VERSION = "v0.10.0"
@@ -54,16 +54,28 @@ func InstallKclvm(installRoot string) error {
5454
return err
5555
}
5656
versionMatched, err := checkVersion(installRoot)
57+
if err != nil {
58+
return err
59+
}
5760

61+
err = os.MkdirAll(installRoot, 0777)
5862
if err != nil {
5963
return err
6064
}
65+
// Create a lock file for installing.
66+
lockFilePath := filepath.Join(installRoot, "install.lock")
67+
fileLock := flock.New(lockFilePath)
6168

62-
// Install kclvm binary.
63-
err = installBin(installRoot, "kclvm_cli", lib.CliBin, versionMatched)
69+
// Try to obtain a lock with a timeout.
70+
locked, err := fileLock.TryLock()
6471
if err != nil {
6572
return err
6673
}
74+
if !locked {
75+
return fmt.Errorf("another installation is already in progress")
76+
}
77+
defer fileLock.Unlock() // Ensure the lock is released when done.
78+
6779
// Install kclvm libs.
6880
err = installLib(installRoot, "kclvm_cli_cdylib", versionMatched)
6981
if err != nil {

go/lib/darwin-amd64/kclvm_cli

-398 KB
Binary file not shown.

go/lib/darwin-arm64/kclvm_cli

-386 KB
Binary file not shown.

go/lib/kclvm_cli_shared_lib_darwin_amd64.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,3 @@ import (
66

77
//go:embed darwin-amd64/libkclvm_cli_cdylib.dylib
88
var CliLib []byte
9-
10-
//go:embed darwin-amd64/kclvm_cli
11-
var CliBin []byte

go/lib/kclvm_cli_shared_lib_darwin_arm64.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,3 @@ import (
66

77
//go:embed darwin-arm64/libkclvm_cli_cdylib.dylib
88
var CliLib []byte
9-
10-
//go:embed darwin-arm64/kclvm_cli
11-
var CliBin []byte

go/lib/kclvm_cli_shared_lib_linux_amd64.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,3 @@ import (
66

77
//go:embed linux-amd64/libkclvm_cli_cdylib.so
88
var CliLib []byte
9-
10-
//go:embed linux-amd64/kclvm_cli
11-
var CliBin []byte

go/lib/kclvm_cli_shared_lib_linux_arm64.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,3 @@ import (
66

77
//go:embed linux-arm64/libkclvm_cli_cdylib.so
88
var CliLib []byte
9-
10-
//go:embed linux-arm64/kclvm_cli
11-
var CliBin []byte

go/lib/kclvm_cli_shared_lib_windows_amd64.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,3 @@ var CliLib []byte
99

1010
//go:embed windows-amd64/kclvm_cli_cdylib.lib
1111
var ExportLib []byte
12-
13-
//go:embed windows-amd64/kclvm_cli.exe
14-
var CliBin []byte

0 commit comments

Comments
 (0)