Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 13 additions & 28 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,18 @@ jobs:
with:
go-version: 1.26.x
- name: Run GoReleaser (dry run)
env:
PACKAGE_NAME: github.com/lets-cli/lets
GOLANG_CROSS_VERSION: v1.26
run: |
docker run \
--rm \
-e CGO_ENABLED=1 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v `pwd`:/go/src/${PACKAGE_NAME}\
-v `pwd`/sysroot:/sysroot \
-w /go/src/${PACKAGE_NAME} \
ghcr.io/goreleaser/goreleaser-cross:${GOLANG_CROSS_VERSION} \
--clean --skip=validate --skip=publish
uses: goreleaser/goreleaser-action@v7
with:
distribution: goreleaser
version: '~> v2' # latest
args: release --clean --skip=validate --skip=publish
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v7
with:
distribution: goreleaser
version: '~> v2' # latest
args: release --clean
env:
PACKAGE_NAME: github.com/lets-cli/lets
GOLANG_CROSS_VERSION: v1.26
run: |
docker run \
--rm \
-e CGO_ENABLED=1 \
-e GITHUB_TOKEN="${{secrets.GITHUB_TOKEN}}" \
-e HOMEBREW_TAP_GITHUB_TOKEN="${{secrets.GH_PAT}}" \
-e AUR_GITHUB_TOKEN="${{secrets.AUR_SSH_PRIVATE_KEY}}" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v `pwd`:/go/src/${PACKAGE_NAME}\
-v `pwd`/sysroot:/sysroot \
-w /go/src/${PACKAGE_NAME} \
ghcr.io/goreleaser/goreleaser-cross:${GOLANG_CROSS_VERSION} \
release --clean
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.GH_PAT }}
AUR_GITHUB_TOKEN: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
13 changes: 0 additions & 13 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,6 @@ builds:
- darwin
goarch:
- amd64
env:
- PKG_CONFIG_SYSROOT_DIR=/sysroot/macos/amd64
- PKG_CONFIG_PATH=/sysroot/macos/amd64/usr/local/lib/pkgconfig
- CC=o64-clang
- CXX=o64-clang++
flags:
- -mod=readonly
ldflags:
Expand All @@ -30,11 +25,6 @@ builds:
- darwin
goarch:
- arm64
env:
- PKG_CONFIG_SYSROOT_DIR=/sysroot/macos/arm64
- PKG_CONFIG_PATH=/sysroot/macos/arm64/usr/local/lib/pkgconfig
- CC=oa64-clang
- CXX=oa64-clang++
flags:
- -mod=readonly
ldflags:
Expand All @@ -45,9 +35,6 @@ builds:
- linux
goarch:
- amd64
env:
- CC=x86_64-linux-gnu-gcc
- CXX=x86_64-linux-gnu-g++
flags:
- -mod=readonly
ldflags:
Expand Down
6 changes: 2 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
FROM golang:1.26-bookworm AS builder

ENV GOPROXY=https://proxy.golang.org
ENV CGO_ENABLED=1
# disable all compiler errors
ENV CGO_CFLAGS=-w
ENV CGO_ENABLED=0

WORKDIR /app

RUN apt-get update && apt-get install -y \
git gcc \
git \
zsh # for zsh completion tests

RUN cd /tmp && \
Comment thread
kindermax marked this conversation as resolved.
Expand Down
1 change: 1 addition & 0 deletions cmd/lets/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ func main() {
if errors.As(err, &depErr) {
executor.PrintDependencyTree(depErr, os.Stderr)
}

log.Errorf("lets: %s", err.Error())
os.Exit(getExitCode(err, 1))
}
Expand Down
1 change: 1 addition & 0 deletions docs/docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ title: Changelog
* `[Removed]` Drop deprecated `eval_env` directive. Use `env` with `sh` execution mode instead.
* `[Added]` When a command or its `depends` chain fails, print an indented tree to stderr showing the full chain with the failing command highlighted
* `[Added]` Support `env_file` in global config and commands. File names are expanded after `env` is resolved, and values loaded from env files override values from `env`.
* `[Changed]` Migrate the LSP YAML parser from the CGO-based tree-sitter bindings to pure-Go [`gotreesitter`](https://github.com/odvcencio/gotreesitter), removing the C toolchain requirement from normal builds and release packaging.

## [0.0.59](https://github.com/lets-cli/lets/releases/tag/v0.0.59)

Expand Down
4 changes: 1 addition & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@ require (
github.com/coreos/go-semver v0.3.1
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
github.com/fatih/color v1.16.0
github.com/odvcencio/gotreesitter v0.9.2
github.com/pkg/errors v0.9.1
github.com/sirupsen/logrus v1.9.3
github.com/spf13/cobra v1.8.0
github.com/tliron/commonlog v0.2.8
github.com/tliron/glsp v0.2.2
github.com/tree-sitter-grammars/tree-sitter-yaml v0.7.0
github.com/tree-sitter/go-tree-sitter v0.24.0
golang.org/x/sync v0.3.0
)

Expand All @@ -26,7 +25,6 @@ require (
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-pointer v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
github.com/muesli/termenv v0.15.2 // indirect
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
Expand Down
35 changes: 3 additions & 32 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ github.com/mattn/go-isatty v0.0.0-20160806122752-66b8e73f3f5c/go.mod h1:M+lRXTBq
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0=
github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc=
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U=
github.com/odvcencio/gotreesitter v0.9.2 h1:ZROpRS+bTcC1mwofBp53l66Jv00FH0ccViSwGVmaBBM=
github.com/odvcencio/gotreesitter v0.9.2/go.mod h1:Sx+iYJBfw5xSWkSttLSuFvguJctlH+ma1BTxZ0MPCqo=
Comment on lines +82 to +83
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Transitive testify version downgrade

Replacing go-tree-sitter with gotreesitter has caused stretchr/testify to drop from v1.9.0 to v1.7.0 as a transitive dependency (via gotreesitter's own test dependencies). Since testify is not directly imported anywhere in this module, the behavioral impact is minimal. However, this is worth being aware of in case any of the module's own transitive dependencies require v1.9.0 or above, which could cause unexpected go mod tidy conflicts down the line.

github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ=
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
Expand All @@ -101,43 +101,14 @@ github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyh
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tliron/commonlog v0.2.8 h1:vpKrEsZX4nlneC9673pXpeKqv3cFLxwpzNEZF1qiaQQ=
github.com/tliron/commonlog v0.2.8/go.mod h1:HgQZrJEuiKLLRvUixtPWGcmTmWWtKkCtywF6x9X5Spw=
github.com/tliron/glsp v0.2.2 h1:IKPfwpE8Lu8yB6Dayta+IyRMAbTVunudeauEgjXBt+c=
github.com/tliron/glsp v0.2.2/go.mod h1:GMVWDNeODxHzmDPvYbYTCs7yHVaEATfYtXiYJ9w1nBg=
github.com/tliron/kutil v0.3.11 h1:kongR0dhrrn9FR/3QRFoUfQe27t78/xQvrU9aXIy5bk=
github.com/tliron/kutil v0.3.11/go.mod h1:4IqOAAdpJuDxYbJxMv4nL8LSH0mPofSrdwIv8u99PDc=
github.com/tree-sitter-grammars/tree-sitter-yaml v0.7.0 h1:bfSjXf9nNPbZH09as6k9+/fbMPyQEHD9IJXzGMdQc0o=
github.com/tree-sitter-grammars/tree-sitter-yaml v0.7.0/go.mod h1:ioP5ekY1SBtpcsagA3mQ4GNUBunkPhtVgqplC5Nffc8=
github.com/tree-sitter/go-tree-sitter v0.24.0 h1:kRZb6aBNfcI/u0Qh8XEt3zjNVnmxTisDBN+kXK0xRYQ=
github.com/tree-sitter/go-tree-sitter v0.24.0/go.mod h1:x681iFVoLMEwOSIHA1chaLkXlroXEN7WY+VHGFaoDbk=
github.com/tree-sitter/tree-sitter-c v0.21.5-0.20240818205408-927da1f210eb h1:A8425heRM8mylnv4H58FPUiH+aYivyitre0PzxrfmWs=
github.com/tree-sitter/tree-sitter-c v0.21.5-0.20240818205408-927da1f210eb/go.mod h1:dOF6gtQiF9UwNh995T5OphYmtIypkjsp3ap7r9AN/iA=
github.com/tree-sitter/tree-sitter-cpp v0.22.4-0.20240818224355-b1a4e2b25148 h1:AfFPZwtwGN01BW1jDdqBVqscTwetvMpydqYZz57RSlc=
github.com/tree-sitter/tree-sitter-cpp v0.22.4-0.20240818224355-b1a4e2b25148/go.mod h1:Bh6U3viD57rFXRYIQ+kmiYtr+1Bx0AceypDLJJSyi9s=
github.com/tree-sitter/tree-sitter-embedded-template v0.21.1-0.20240819044651-ffbf64942c33 h1:TwqSV3qLp3tKSqirGLRHnjFk9Tc2oy57LIl+FQ4GjI4=
github.com/tree-sitter/tree-sitter-embedded-template v0.21.1-0.20240819044651-ffbf64942c33/go.mod h1:CvCKCt3v04Ufos1zZnNCelBDeCGRpPucaN8QczoUsN4=
github.com/tree-sitter/tree-sitter-go v0.21.3-0.20240818010209-8c0f0e7a6012 h1:Xvxck3tE5FW7F7bTS97iNM2ADMyCMJztVqn5HYKdJGo=
github.com/tree-sitter/tree-sitter-go v0.21.3-0.20240818010209-8c0f0e7a6012/go.mod h1:T40D0O1cPvUU/+AmiXVXy1cncYQT6wem4Z0g4SfAYvY=
github.com/tree-sitter/tree-sitter-html v0.20.5-0.20240818004741-d11201a263d0 h1:c46K6uh5Dz00zJeU9BfjXdb8I+E4RkUdfnWJpQADXFo=
github.com/tree-sitter/tree-sitter-html v0.20.5-0.20240818004741-d11201a263d0/go.mod h1:hcNt/kOJHcIcuMvouE7LJcYdeFUFbVpBJ6d4wmOA+tU=
github.com/tree-sitter/tree-sitter-java v0.21.1-0.20240824015150-576d8097e495 h1:jrt4qbJVEFs4H93/ITxygHc6u0TGqAkkate7TQ4wFSA=
github.com/tree-sitter/tree-sitter-java v0.21.1-0.20240824015150-576d8097e495/go.mod h1:oyaR7fLnRV0hT9z6qwE9GkaeTom/hTDwK3H2idcOJFc=
github.com/tree-sitter/tree-sitter-javascript v0.21.5-0.20240818005344-15887341e5b5 h1:om4X9AVg3asL8gxNJDcz4e/Wp+VpQj1PY3uJXKr6EOg=
github.com/tree-sitter/tree-sitter-javascript v0.21.5-0.20240818005344-15887341e5b5/go.mod h1:nNqgPoV/h9uYWk6kYEFdEAhNVOacpfpRW5SFmdaP4tU=
github.com/tree-sitter/tree-sitter-json v0.21.1-0.20240818005659-bdd69eb8c8a5 h1:pfV3G3k7NCKqKk8THBmyuh2zA33lgYHS3GVrzRR8ry4=
github.com/tree-sitter/tree-sitter-json v0.21.1-0.20240818005659-bdd69eb8c8a5/go.mod h1:GbMKRjLfk0H+PI7nLi1Sx5lHf5wCpLz9al8tQYSxpEk=
github.com/tree-sitter/tree-sitter-php v0.22.9-0.20240819002312-a552625b56c1 h1:ZXZMDwE+IhUtGug4Brv6NjJWUU3rfkZBKpemf6RY8/g=
github.com/tree-sitter/tree-sitter-php v0.22.9-0.20240819002312-a552625b56c1/go.mod h1:UKCLuYnJ312Mei+3cyTmGOHzn0YAnaPRECgJmHtzrqs=
github.com/tree-sitter/tree-sitter-python v0.21.1-0.20240818005537-55a9b8a4fbfb h1:EXEM82lFM7JjJb6qiKZXkpIDaCcbV2obNn82ghwj9lw=
github.com/tree-sitter/tree-sitter-python v0.21.1-0.20240818005537-55a9b8a4fbfb/go.mod h1:lXCF1nGG5Dr4J3BTS0ObN4xJCCICiSu/b+Xe/VqMV7g=
github.com/tree-sitter/tree-sitter-ruby v0.21.1-0.20240818211811-7dbc1e2d0e2d h1:fcYCvoXdcP1uRQYXqJHRy6Hec+uKScQdKVtMwK9JeCI=
github.com/tree-sitter/tree-sitter-ruby v0.21.1-0.20240818211811-7dbc1e2d0e2d/go.mod h1:T1nShQ4v5AJtozZ8YyAS4uzUtDAJj/iv4YfwXSbUHzg=
github.com/tree-sitter/tree-sitter-rust v0.21.3-0.20240818005432-2b43eafe6447 h1:o9alBu1J/WjrcTKEthYtXmdkDc5OVXD+PqlvnEZ0Lzc=
github.com/tree-sitter/tree-sitter-rust v0.21.3-0.20240818005432-2b43eafe6447/go.mod h1:1Oh95COkkTn6Ezp0vcMbvfhRP5gLeqqljR0BYnBzWvc=
golang.org/x/crypto v0.0.0-20180214000028-650f4a345ab4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
Expand Down
1 change: 1 addition & 0 deletions internal/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ func PrintRootHelpMessage(cmd *cobra.Command) error {

// General
builder.WriteString("Usage:\n")

if cmd.Runnable() {
fmt.Fprintf(&builder, " %s\n", cmd.UseLine())
}
Expand Down
16 changes: 7 additions & 9 deletions internal/config/config/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"encoding/json"
"errors"
"fmt"
"maps"
"path/filepath"
"strings"

Expand Down Expand Up @@ -92,6 +93,7 @@ func (c *Command) UnmarshalYAML(unmarshal func(any) error) error {
if c.Env == nil {
c.Env = &Envs{}
}

c.EnvFiles = cmd.EnvFiles
if c.EnvFiles == nil {
c.EnvFiles = &EnvFiles{}
Expand Down Expand Up @@ -145,30 +147,26 @@ func (c *Command) GetEnv(cfg Config, builtinEnv map[string]string) (map[string]s
if baseEnv == nil {
baseEnv = make(map[string]string)
}
for key, value := range cfg.GetEnv() {
baseEnv[key] = value
}

maps.Copy(baseEnv, cfg.GetEnv())

envs := c.Env.Clone()
if err := envs.Execute(cfg, baseEnv); err != nil {
return nil, err
}

filenameEnv := cloneMap(baseEnv)
for key, value := range envs.Dump() {
filenameEnv[key] = value
}
maps.Copy(filenameEnv, envs.Dump())

envFiles := c.EnvFiles.Clone()

envFileEnv, err := envFiles.Load(cfg, filenameEnv)
if err != nil {
return nil, fmt.Errorf("lets: failed to resolve env_file for command '%s': %w", c.Name, err)
}

resolvedEnv := envs.Dump()
for key, value := range envFileEnv {
resolvedEnv[key] = value
}
maps.Copy(resolvedEnv, envFileEnv)

return resolvedEnv, nil
}
Expand Down
10 changes: 4 additions & 6 deletions internal/config/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"bytes"
"errors"
"fmt"
"maps"
"os"
"path/filepath"
"strings"
Expand Down Expand Up @@ -100,6 +101,7 @@ func (c *Config) UnmarshalYAML(unmarshal func(any) error) error {
if c.Env == nil {
c.Env = &Envs{}
}

c.EnvFiles = config.EnvFiles
if c.EnvFiles == nil {
c.EnvFiles = &EnvFiles{}
Expand Down Expand Up @@ -314,19 +316,15 @@ func (c *Config) SetupEnv() error {
}

filenameEnv := c.BuiltinEnv(c.Shell)
for key, value := range c.Env.Dump() {
filenameEnv[key] = value
}
maps.Copy(filenameEnv, c.Env.Dump())

envFileEnv, err := c.EnvFiles.Load(*c, filenameEnv)
if err != nil {
return fmt.Errorf("failed to resolve global env_file: %w", err)
}

c.cachedEnv = c.Env.Dump()
for key, value := range envFileEnv {
c.cachedEnv[key] = value
}
maps.Copy(c.cachedEnv, envFileEnv)

// expand env for args
for _, cmd := range c.Commands {
Expand Down
12 changes: 8 additions & 4 deletions internal/config/config/env_file.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package config
import (
"errors"
"fmt"
"maps"
"os"
"path/filepath"
"strings"
Expand All @@ -23,11 +24,12 @@ type EnvFiles struct {
ready bool
}

func (e *EnvFile) UnmarshalYAML(unmarshal func(interface{}) error) error {
func (e *EnvFile) UnmarshalYAML(unmarshal func(any) error) error {
var filename string
// try parse as scalar
if err := unmarshal(&filename); err == nil {
e.Name = normalizeEnvFilename(filename)

e.Required = !isOptionalEnvFilename(filename)
if e.Name == "" {
return errors.New("env_file name can not be empty")
Expand All @@ -54,6 +56,7 @@ func (e *EnvFile) UnmarshalYAML(unmarshal func(interface{}) error) error {
}

e.Name = raw.Name

e.Required = true
if raw.Required != nil {
e.Required = *raw.Required
Expand All @@ -71,6 +74,7 @@ func (e *EnvFiles) UnmarshalYAML(node *yaml.Node) error {
}

e.Items = []EnvFile{item}

return nil
case yaml.SequenceNode:
items := make([]EnvFile, 0, len(node.Content))
Expand All @@ -79,10 +83,12 @@ func (e *EnvFiles) UnmarshalYAML(node *yaml.Node) error {
if err := itemNode.Decode(&item); err != nil {
return err
}

items = append(items, item)
}

e.Items = items

return nil
default:
return errors.New("env_file must be a string, map, or sequence")
Expand Down Expand Up @@ -144,9 +150,7 @@ func (e *EnvFiles) Load(cfg Config, envMap map[string]string) (map[string]string
return nil, fmt.Errorf("failed to parse env_file %q: %w", filename, err)
}

for key, value := range values {
loaded[key] = value
}
maps.Copy(loaded, values)
}

e.loaded = loaded
Expand Down
Loading
Loading