11package main
22
33import (
4+ "encoding/json"
45 "fmt"
56 "os"
67 "sort"
@@ -61,6 +62,54 @@ func createListCommand() *cobra.Command {
6162 return cmdList
6263}
6364
65+ func createShowCommand () * cobra.Command {
66+ var argDevcontainerName string
67+ cmd := & cobra.Command {
68+ Use : "show --name <name>" ,
69+ Short : "Show devcontainer info" ,
70+ Long : "Show information about a running dev container" ,
71+ RunE : func (cmd * cobra.Command , args []string ) error {
72+ devcontainers , err := devcontainers .ListDevcontainers ()
73+ if err != nil {
74+ return err
75+ }
76+ containerIDOrName := argDevcontainerName
77+
78+ // Get container ID
79+ for _ , devcontainer := range devcontainers {
80+ if devcontainer .ContainerName == containerIDOrName ||
81+ devcontainer .DevcontainerName == containerIDOrName ||
82+ devcontainer .ContainerID == containerIDOrName {
83+ output , err := json .MarshalIndent (devcontainer , "" , "\t " )
84+ if err != nil {
85+ return fmt .Errorf ("Failed to serialise devcontainer info: %s" , err )
86+ }
87+ fmt .Printf ("%s\n " , output )
88+ return nil
89+ }
90+ }
91+
92+ return fmt .Errorf ("Failed to find a matching (running) dev container for %q" , containerIDOrName )
93+ },
94+ }
95+ cmd .Flags ().StringVarP (& argDevcontainerName , "name" , "n" , "" , "name of dev container to exec into" )
96+
97+ _ = cmd .RegisterFlagCompletionFunc ("name" , func (cmd * cobra.Command , args []string , toComplete string ) ([]string , cobra.ShellCompDirective ) {
98+ devcontainers , err := devcontainers .ListDevcontainers ()
99+ if err != nil {
100+ os .Exit (1 )
101+ }
102+ names := []string {}
103+ for _ , devcontainer := range devcontainers {
104+ names = append (names , devcontainer .DevcontainerName )
105+ }
106+ sort .Strings (names )
107+ return names , cobra .ShellCompDirectiveNoFileComp
108+
109+ })
110+ return cmd
111+ }
112+
64113func countBooleans (values ... bool ) int {
65114 count := 0
66115 for _ , v := range values {
@@ -82,7 +131,7 @@ func createExecCommand() *cobra.Command {
82131 Short : "Execute a command in a devcontainer" ,
83132 Long : "Execute a command in a devcontainer, similar to `docker exec`" ,
84133 RunE : func (cmd * cobra.Command , args []string ) error {
85-
134+ fmt . Printf ( "*** %q \n \n \n " , argDevcontainerName )
86135 // Default to executing /bin/bash
87136 if len (args ) == 0 {
88137 args = []string {"/bin/bash" }
0 commit comments