aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cli/internal/cmd
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:55 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:55 +0800
commitfc8c5fdce62fb229202659408798a7b6c98f6e8b (patch)
tree7554f80e50de4af6fd255afa7c21bcdd58a7af34 /cli/internal/cmd
parentdd84b9d64fb98746a230cd24233ff50a562c39c9 (diff)
downloadHydroRoll-fc8c5fdce62fb229202659408798a7b6c98f6e8b.tar.gz
HydroRoll-fc8c5fdce62fb229202659408798a7b6c98f6e8b.zip
Diffstat (limited to 'cli/internal/cmd')
-rw-r--r--cli/internal/cmd/root.go157
1 files changed, 0 insertions, 157 deletions
diff --git a/cli/internal/cmd/root.go b/cli/internal/cmd/root.go
deleted file mode 100644
index d8d0e33..0000000
--- a/cli/internal/cmd/root.go
+++ /dev/null
@@ -1,157 +0,0 @@
-// Package cmd holds the root cobra command for turbo
-package cmd
-
-import (
- "context"
- "fmt"
- "os"
- "runtime/pprof"
- "runtime/trace"
-
- "github.com/pkg/errors"
- "github.com/vercel/turbo/cli/internal/cmdutil"
- "github.com/vercel/turbo/cli/internal/daemon"
- "github.com/vercel/turbo/cli/internal/process"
- "github.com/vercel/turbo/cli/internal/prune"
- "github.com/vercel/turbo/cli/internal/run"
- "github.com/vercel/turbo/cli/internal/signals"
- "github.com/vercel/turbo/cli/internal/turbostate"
- "github.com/vercel/turbo/cli/internal/util"
-)
-
-func initializeOutputFiles(helper *cmdutil.Helper, parsedArgs *turbostate.ParsedArgsFromRust) error {
- if parsedArgs.Trace != "" {
- cleanup, err := createTraceFile(parsedArgs.Trace)
- if err != nil {
- return fmt.Errorf("failed to create trace file: %v", err)
- }
- helper.RegisterCleanup(cleanup)
- }
- if parsedArgs.Heap != "" {
- cleanup, err := createHeapFile(parsedArgs.Heap)
- if err != nil {
- return fmt.Errorf("failed to create heap file: %v", err)
- }
- helper.RegisterCleanup(cleanup)
- }
- if parsedArgs.CPUProfile != "" {
- cleanup, err := createCpuprofileFile(parsedArgs.CPUProfile)
- if err != nil {
- return fmt.Errorf("failed to create CPU profile file: %v", err)
- }
- helper.RegisterCleanup(cleanup)
- }
-
- return nil
-}
-
-// RunWithArgs runs turbo with the ParsedArgsFromRust that is passed from the Rust side.
-func RunWithArgs(args *turbostate.ParsedArgsFromRust, turboVersion string) int {
- util.InitPrintf()
- // TODO: replace this with a context
- signalWatcher := signals.NewWatcher()
- helper := cmdutil.NewHelper(turboVersion, args)
- ctx := context.Background()
-
- err := initializeOutputFiles(helper, args)
- if err != nil {
- fmt.Printf("%v", err)
- return 1
- }
- defer helper.Cleanup(args)
-
- doneCh := make(chan struct{})
- var execErr error
- go func() {
- command := args.Command
- if command.Daemon != nil {
- execErr = daemon.ExecuteDaemon(ctx, helper, signalWatcher, args)
- } else if command.Prune != nil {
- execErr = prune.ExecutePrune(helper, args)
- } else if command.Run != nil {
- execErr = run.ExecuteRun(ctx, helper, signalWatcher, args)
- } else {
- execErr = fmt.Errorf("unknown command: %v", command)
- }
-
- close(doneCh)
- }()
-
- // Wait for either our command to finish, in which case we need to clean up,
- // or to receive a signal, in which case the signal handler above does the cleanup
- select {
- case <-doneCh:
- // We finished whatever task we were running
- signalWatcher.Close()
- exitErr := &process.ChildExit{}
- if errors.As(execErr, &exitErr) {
- return exitErr.ExitCode
- } else if execErr != nil {
- fmt.Printf("Turbo error: %v\n", execErr)
- return 1
- }
- return 0
- case <-signalWatcher.Done():
- // We caught a signal, which already called the close handlers
- return 1
- }
-}
-
-type profileCleanup func() error
-
-// Close implements io.Close for profileCleanup
-func (pc profileCleanup) Close() error {
- return pc()
-}
-
-// To view a CPU trace, use "go tool trace [file]". Note that the trace
-// viewer doesn't work under Windows Subsystem for Linux for some reason.
-func createTraceFile(traceFile string) (profileCleanup, error) {
- f, err := os.Create(traceFile)
- if err != nil {
- return nil, errors.Wrapf(err, "failed to create trace file: %v", traceFile)
- }
- if err := trace.Start(f); err != nil {
- return nil, errors.Wrap(err, "failed to start tracing")
- }
- return func() error {
- trace.Stop()
- return f.Close()
- }, nil
-}
-
-// To view a heap trace, use "go tool pprof [file]" and type "top". You can
-// also drop it into https://speedscope.app and use the "left heavy" or
-// "sandwich" view modes.
-func createHeapFile(heapFile string) (profileCleanup, error) {
- f, err := os.Create(heapFile)
- if err != nil {
- return nil, errors.Wrapf(err, "failed to create heap file: %v", heapFile)
- }
- return func() error {
- if err := pprof.WriteHeapProfile(f); err != nil {
- // we don't care if we fail to close the file we just failed to write to
- _ = f.Close()
- return errors.Wrapf(err, "failed to write heap file: %v", heapFile)
- }
- return f.Close()
- }, nil
-}
-
-// To view a CPU profile, drop the file into https://speedscope.app.
-// Note: Running the CPU profiler doesn't work under Windows subsystem for
-// Linux. The profiler has to be built for native Windows and run using the
-// command prompt instead.
-func createCpuprofileFile(cpuprofileFile string) (profileCleanup, error) {
- f, err := os.Create(cpuprofileFile)
- if err != nil {
- return nil, errors.Wrapf(err, "failed to create cpuprofile file: %v", cpuprofileFile)
- }
- if err := pprof.StartCPUProfile(f); err != nil {
- return nil, errors.Wrap(err, "failed to start CPU profiling")
- }
- return func() error {
- pprof.StopCPUProfile()
- return f.Close()
- }, nil
-}