From 6012f0f505d95b5bcd4d8faa5feee05fc0190cec Mon Sep 17 00:00:00 2001 From: Arsen Musayelyan Date: Fri, 30 Sep 2022 16:05:50 -0700 Subject: [PATCH] Move reading build vars to separate function --- build.go | 42 ++++++++++++++++++++++++++++++++++++++++++ info.go | 40 ++-------------------------------------- list.go | 41 ++--------------------------------------- upgrade.go | 39 ++------------------------------------- 4 files changed, 48 insertions(+), 114 deletions(-) diff --git a/build.go b/build.go index 31fe6e8..77e9c77 100644 --- a/build.go +++ b/build.go @@ -41,6 +41,7 @@ import ( "github.com/goreleaser/nfpm/v2/files" "go.arsenm.dev/lure/distro" "go.arsenm.dev/lure/download" + "go.arsenm.dev/lure/internal/shutils" "go.arsenm.dev/lure/internal/shutils/decoder" "go.arsenm.dev/lure/manager" "mvdan.cc/sh/v3/expand" @@ -492,6 +493,47 @@ func setScripts(vars *BuildVars, info *nfpm.Info, scriptDir string) { } } +// getBuildVars only gets the build variables, while disabling exec, stat, open, and readdir +func getBuildVars(ctx context.Context, script string, info *distro.OSRelease) (*BuildVars, error) { + fl, err := os.Open(script) + if err != nil { + return nil, err + } + + file, err := syntax.NewParser().Parse(fl, "lure.sh") + if err != nil { + return nil, err + } + + fl.Close() + + runner, err := interp.New( + interp.Env(expand.ListEnviron()), + interp.ExecHandler(shutils.NopExec), + interp.StatHandler(shutils.NopStat), + interp.OpenHandler(shutils.NopOpen), + interp.ReadDirHandler(shutils.NopReadDir), + ) + if err != nil { + return nil, err + } + + err = runner.Run(ctx, file) + if err != nil { + return nil, err + } + + dec := decoder.New(info, runner) + + var vars BuildVars + err = dec.DecodeVars(&vars) + if err != nil { + return nil, err + } + + return &vars, nil +} + func uniq(ss ...*[]string) { for _, s := range ss { slices.Sort(*s) diff --git a/info.go b/info.go index 834abfc..8e533a5 100644 --- a/info.go +++ b/info.go @@ -23,12 +23,7 @@ import ( "github.com/urfave/cli/v2" "go.arsenm.dev/lure/distro" - "go.arsenm.dev/lure/internal/shutils" - "go.arsenm.dev/lure/internal/shutils/decoder" "gopkg.in/yaml.v3" - "mvdan.cc/sh/v3/expand" - "mvdan.cc/sh/v3/interp" - "mvdan.cc/sh/v3/syntax" ) func infoCmd(c *cli.Context) error { @@ -50,40 +45,9 @@ func infoCmd(c *cli.Context) error { // if multiple are matched, only use the first one script := found[0] - fl, err := os.Open(script) + vars, err := getBuildVars(c.Context, script, info) if err != nil { - log.Fatal("Error opening script").Err(err).Send() - } - - file, err := syntax.NewParser().Parse(fl, "lure.sh") - if err != nil { - log.Fatal("Error parsing script").Err(err).Send() - } - - fl.Close() - - runner, err := interp.New( - interp.Env(expand.ListEnviron()), - interp.ExecHandler(shutils.NopExec), - interp.StatHandler(shutils.NopStat), - interp.OpenHandler(shutils.NopOpen), - interp.ReadDirHandler(shutils.NopReadDir), - ) - if err != nil { - log.Fatal("Error creating runner").Err(err).Send() - } - - err = runner.Run(c.Context, file) - if err != nil { - log.Fatal("Error running script").Err(err).Send() - } - - dec := decoder.New(info, runner) - - var vars BuildVars - err = dec.DecodeVars(&vars) - if err != nil { - log.Fatal("Error decoding script variables").Err(err).Send() + log.Fatal("Error getting build variables").Err(err).Send() } err = yaml.NewEncoder(os.Stdout).Encode(vars) diff --git a/list.go b/list.go index 458251e..a8f6daa 100644 --- a/list.go +++ b/list.go @@ -2,15 +2,9 @@ package main import ( "fmt" - "os" "github.com/urfave/cli/v2" "go.arsenm.dev/lure/distro" - "go.arsenm.dev/lure/internal/shutils" - "go.arsenm.dev/lure/internal/shutils/decoder" - "mvdan.cc/sh/v3/expand" - "mvdan.cc/sh/v3/interp" - "mvdan.cc/sh/v3/syntax" ) func listCmd(c *cli.Context) error { @@ -25,40 +19,9 @@ func listCmd(c *cli.Context) error { } for _, script := range pkgs { - fl, err := os.Open(script) + vars, err := getBuildVars(c.Context, script, info) if err != nil { - log.Fatal("Error opening script").Err(err).Send() - } - - file, err := syntax.NewParser().Parse(fl, "lure.sh") - if err != nil { - log.Fatal("Error parsing script").Err(err).Send() - } - - fl.Close() - - runner, err := interp.New( - interp.Env(expand.ListEnviron()), - interp.ExecHandler(shutils.NopExec), - interp.StatHandler(shutils.NopStat), - interp.OpenHandler(shutils.NopOpen), - interp.ReadDirHandler(shutils.NopReadDir), - ) - if err != nil { - log.Fatal("Error creating runner").Err(err).Send() - } - - err = runner.Run(c.Context, file) - if err != nil { - log.Fatal("Error running script").Err(err).Send() - } - - dec := decoder.New(info, runner) - - var vars BuildVars - err = dec.DecodeVars(&vars) - if err != nil { - log.Fatal("Error decoding script variables").Err(err).Send() + log.Fatal("Error getting build variables").Err(err).Send() } fmt.Println(vars.Name, vars.Version) diff --git a/upgrade.go b/upgrade.go index e0ec08f..e7a3566 100644 --- a/upgrade.go +++ b/upgrade.go @@ -21,16 +21,10 @@ package main import ( "context" "fmt" - "os" "github.com/urfave/cli/v2" "go.arsenm.dev/lure/distro" - "go.arsenm.dev/lure/internal/shutils" - "go.arsenm.dev/lure/internal/shutils/decoder" "go.arsenm.dev/lure/manager" - "mvdan.cc/sh/v3/expand" - "mvdan.cc/sh/v3/interp" - "mvdan.cc/sh/v3/syntax" ) func upgradeCmd(c *cli.Context) error { @@ -74,38 +68,9 @@ func checkForUpdates(ctx context.Context, mgr manager.Manager, info *distro.OSRe // since we're not using a glob, we can assume a single item script := scripts[0] - fl, err := os.Open(script) + vars, err := getBuildVars(ctx, script, info) if err != nil { - return nil, err - } - - file, err := syntax.NewParser().Parse(fl, "lure.sh") - if err != nil { - return nil, err - } - - runner, err := interp.New( - interp.Env(expand.ListEnviron()), - interp.ExecHandler(shutils.NopExec), - interp.StatHandler(shutils.NopStat), - interp.OpenHandler(shutils.NopOpen), - interp.ReadDirHandler(shutils.NopReadDir), - ) - if err != nil { - return nil, err - } - - err = runner.Run(ctx, file) - if err != nil { - return nil, err - } - - dec := decoder.New(info, runner) - - var vars BuildVars - err = dec.DecodeVars(&vars) - if err != nil { - return nil, err + log.Fatal("Error getting build variables").Err(err).Send() } repoVer := vars.Version