MCPcopy
hub / github.com/cli/cli / Logs

Method Logs

pkg/cmd/codespace/logs.go:35–115  ·  view source on GitHub ↗
(ctx context.Context, selector *CodespaceSelector, follow bool)

Source from the content-addressed store, hash-verified

33}
34
35func (a *App) Logs(ctx context.Context, selector *CodespaceSelector, follow bool) (err error) {
36 // Ensure all child tasks (port forwarding, remote exec) terminate before return.
37 ctx, cancel := context.WithCancel(ctx)
38 defer cancel()
39
40 codespace, err := selector.Select(ctx)
41 if err != nil {
42 return err
43 }
44
45 codespaceConnection, err := codespaces.GetCodespaceConnection(ctx, a, a.apiClient, codespace)
46 if err != nil {
47 return fmt.Errorf("error connecting to codespace: %w", err)
48 }
49
50 fwd, err := portforwarder.NewPortForwarder(ctx, codespaceConnection)
51 if err != nil {
52 return fmt.Errorf("failed to create port forwarder: %w", err)
53 }
54 defer safeClose(fwd, &err)
55
56 // Ensure local port is listening before client (getPostCreateOutput) connects.
57 listen, localPort, err := codespaces.ListenTCP(0, false)
58 if err != nil {
59 return err
60 }
61 defer listen.Close()
62
63 remoteSSHServerPort, sshUser := 0, ""
64 err = a.RunWithProgress("Fetching SSH Details", func() (err error) {
65 invoker, err := rpc.CreateInvoker(ctx, fwd)
66 if err != nil {
67 return
68 }
69 defer safeClose(invoker, &err)
70
71 remoteSSHServerPort, sshUser, err = invoker.StartSSHServer(ctx)
72 return
73 })
74 if err != nil {
75 return fmt.Errorf("error getting ssh server details: %w", err)
76 }
77
78 cmdType := "cat"
79 if follow {
80 cmdType = "tail -f"
81 }
82
83 dst := fmt.Sprintf("%s@localhost", sshUser)
84 cmd, err := codespaces.NewRemoteCommand(
85 ctx, localPort, dst, fmt.Sprintf("%s /workspaces/.codespaces/.persistedshare/creation.log", cmdType),
86 )
87 if err != nil {
88 return fmt.Errorf("remote command: %w", err)
89 }
90
91 tunnelClosed := make(chan error, 1)
92 go func() {

Callers 2

newLogsCmdFunction · 0.80

Calls 13

RunWithProgressMethod · 0.95
ForwardPortToListenerMethod · 0.95
GetCodespaceConnectionFunction · 0.92
NewPortForwarderFunction · 0.92
ListenTCPFunction · 0.92
CreateInvokerFunction · 0.92
NewRemoteCommandFunction · 0.92
safeCloseFunction · 0.70
SelectMethod · 0.65
ErrorfMethod · 0.65
CloseMethod · 0.65
StartSSHServerMethod · 0.65

Tested by 1