@@ -3,16 +3,11 @@ package main
33import (
44 "fmt"
55 "os"
6- "os/exec"
7- "path"
8- "path/filepath"
96 "sort"
10- "strings"
117 "text/tabwriter"
128
139 "github.com/spf13/cobra"
1410 "github.com/stuartleeks/devcontainer-cli/internal/pkg/devcontainers"
15- "github.com/stuartleeks/devcontainer-cli/internal/pkg/wsl"
1611)
1712
1813func createListCommand () * cobra.Command {
@@ -103,19 +98,13 @@ func createExecCommand() *cobra.Command {
10398 return cmd .Usage ()
10499 }
105100
106- containerID := ""
101+ containerIDOrName := ""
107102 devcontainerList , err := devcontainers .ListDevcontainers ()
108103 if err != nil {
109104 return err
110105 }
111106 if argDevcontainerName != "" {
112- devcontainerName := argDevcontainerName
113- for _ , devcontainer := range devcontainerList {
114- if devcontainer .ContainerName == devcontainerName || devcontainer .DevcontainerName == devcontainerName {
115- containerID = devcontainer .ContainerID
116- break
117- }
118- }
107+ containerIDOrName = argDevcontainerName
119108 } else if argPromptForDevcontainer {
120109 // prompt user
121110 fmt .Println ("Specify the devcontainer to use:" )
@@ -127,85 +116,16 @@ func createExecCommand() *cobra.Command {
127116 if selection < 0 || selection >= len (devcontainerList ) {
128117 return fmt .Errorf ("Invalid option" )
129118 }
130- containerID = devcontainerList [selection ].ContainerID
119+ containerIDOrName = devcontainerList [selection ].ContainerID
131120 } else {
132121 devcontainerPath := argDevcontainerPath
133- if devcontainerPath == "" {
134- devcontainerPath = "."
135- }
136- absPath , err := filepath .Abs (devcontainerPath )
137- if err != nil {
138- return fmt .Errorf ("Error handling path %q: %s" , devcontainerPath , err )
139- }
140-
141- windowsPath := absPath
142- if wsl .IsWsl () {
143- var err error
144- windowsPath , err = wsl .ConvertWslPathToWindowsPath (windowsPath )
145- if err != nil {
146- return err
147- }
148- }
149- for _ , devcontainer := range devcontainerList {
150- if devcontainer .LocalFolderPath == windowsPath {
151- containerID = devcontainer .ContainerID
152- break
153- }
154- }
155- }
156-
157- if containerID == "" {
158- fmt .Println ("Failed to find a matching (running) dev container" )
159- return cmd .Usage ()
160- }
161-
162- localPath , err := devcontainers .GetLocalFolderFromDevContainer (containerID )
163- if err != nil {
164- return err
165- }
166-
167- mountPath := argWorkDir
168- if mountPath == "" {
169- mountPath , err = devcontainers .GetWorkspaceMountPath (localPath )
122+ containerIDOrName , err = devcontainers .GetContainerIDForPath (devcontainerPath )
170123 if err != nil {
171124 return err
172125 }
173126 }
174127
175- wslPath := localPath
176- if strings .HasPrefix (wslPath , "\\ \\ wsl$" ) && wsl .IsWsl () {
177- wslPath , err = wsl .ConvertWindowsPathToWslPath (wslPath )
178- if err != nil {
179- return fmt .Errorf ("error converting path: %s" , err )
180- }
181- }
182-
183- devcontainerJSONPath := path .Join (wslPath , ".devcontainer/devcontainer.json" )
184- userName , err := devcontainers .GetDevContainerUserName (devcontainerJSONPath )
185- if err != nil {
186- return err
187- }
188-
189- dockerArgs := []string {"exec" , "-it" , "--workdir" , mountPath }
190- if userName != "" {
191- dockerArgs = append (dockerArgs , "--user" , userName )
192- }
193- dockerArgs = append (dockerArgs , containerID )
194- dockerArgs = append (dockerArgs , args ... )
195-
196- dockerCmd := exec .Command ("docker" , dockerArgs ... )
197- dockerCmd .Stdin = os .Stdin
198- dockerCmd .Stdout = os .Stdout
199-
200- err = dockerCmd .Start ()
201- if err != nil {
202- return fmt .Errorf ("Exec: start error: %s" , err )
203- }
204- err = dockerCmd .Wait ()
205- if err != nil {
206- return fmt .Errorf ("Exec: wait error: %s" , err )
207- }
208- return nil
128+ return devcontainers .ExecInDevContainer (containerIDOrName , argWorkDir , args )
209129 },
210130 Args : cobra .ArbitraryArgs ,
211131 DisableFlagsInUseLine : true ,
0 commit comments