diff --git a/sandbox/sandbox.go b/sandbox/sandbox.go index e5aae200..cffc070d 100644 --- a/sandbox/sandbox.go +++ b/sandbox/sandbox.go @@ -200,14 +200,26 @@ func Make(ctx context.Context, cfg MakeConfig) error { } untarDedup.Add(to) - err := xfs.CreateParentDir(to) + err = xfs.CreateParentDir(to) if err != nil { return err } - err = os.Link(file.From, to) - if err != nil { - return fmt.Errorf("make: link %v to %v: %w", file.From, to, err) + target, err := os.Readlink(file.From) + if err == nil { + if !filepath.IsAbs(target) { + target = filepath.Join(filepath.Dir(file.From), target) + } + + err = os.Symlink(target, to) + if err != nil { + return err + } + } else { + err = os.Link(file.From, to) + if err != nil { + return fmt.Errorf("make: link %v to %v: %w", file.From, to, err) + } } if cfg.ProgressLinks != nil { diff --git a/utils/xstarlark/fmt/fmt.go b/utils/xstarlark/fmt/fmt.go index 71aad2aa..c05c4dba 100644 --- a/utils/xstarlark/fmt/fmt.go +++ b/utils/xstarlark/fmt/fmt.go @@ -300,6 +300,12 @@ func (f *formatter) formatStmt(w Writer, sstmt syntax.Stmt) error { return err } case *syntax.ReturnStmt: + if stmt.Result == nil { + w.WriteString("return") + + return nil + } + w.WriteString("return ") return f.formatExpr(w, stmt.Result) case *IfStmt: