8
8
"path/filepath"
9
9
10
10
"github.com/lima-vm/lima/cmd/limactl/editflags"
11
+ "github.com/lima-vm/lima/cmd/limactl/guessarg"
11
12
"github.com/lima-vm/lima/pkg/editutil"
12
13
"github.com/lima-vm/lima/pkg/instance"
13
14
"github.com/lima-vm/lima/pkg/limayaml"
@@ -34,24 +35,43 @@ func newEditCommand() *cobra.Command {
34
35
}
35
36
36
37
func editAction (cmd * cobra.Command , args []string ) error {
37
- instName := DefaultInstanceName
38
+ var arg string
38
39
if len (args ) > 0 {
39
- instName = args [0 ]
40
+ arg = args [0 ]
40
41
}
41
42
42
- inst , err := store .Inspect (instName )
43
- if err != nil {
44
- if errors .Is (err , os .ErrNotExist ) {
45
- return fmt .Errorf ("instance %q not found" , instName )
43
+ var filePath string
44
+ var err error
45
+ var inst * store.Instance
46
+ switch {
47
+ case guessarg .SeemsYAMLPath (arg ):
48
+ // absolute path is required for `limayaml.Validate`
49
+ filePath , err = filepath .Abs (arg )
50
+ if err != nil {
51
+ return err
52
+ }
53
+ default :
54
+ var instName string
55
+ if arg != "" {
56
+ instName = arg
57
+ } else {
58
+ instName = DefaultInstanceName
46
59
}
47
- return err
48
- }
49
60
50
- if inst .Status == store .StatusRunning {
51
- return errors .New ("cannot edit a running instance" )
61
+ inst , err = store .Inspect (instName )
62
+ if err != nil {
63
+ if errors .Is (err , os .ErrNotExist ) {
64
+ return fmt .Errorf ("instance %q not found" , instName )
65
+ }
66
+ return err
67
+ }
68
+
69
+ if inst .Status == store .StatusRunning {
70
+ return errors .New ("cannot edit a running instance" )
71
+ }
72
+ filePath = filepath .Join (inst .Dir , filenames .LimaYAML )
52
73
}
53
74
54
- filePath := filepath .Join (inst .Dir , filenames .LimaYAML )
55
75
yContent , err := os .ReadFile (filePath )
56
76
if err != nil {
57
77
return err
@@ -73,7 +93,12 @@ func editAction(cmd *cobra.Command, args []string) error {
73
93
return err
74
94
}
75
95
} else if tty {
76
- hdr := fmt .Sprintf ("# Please edit the following configuration for Lima instance %q\n " , instName )
96
+ var hdr string
97
+ if inst != nil {
98
+ hdr = fmt .Sprintf ("# Please edit the following configuration for Lima instance %q\n " , inst .Name )
99
+ } else {
100
+ hdr = fmt .Sprintf ("# Please edit the following configuration %q\n " , filePath )
101
+ }
77
102
hdr += "# and an empty file will abort the edit.\n "
78
103
hdr += "\n "
79
104
hdr += editutil .GenerateEditorWarningHeader ()
@@ -105,12 +130,18 @@ func editAction(cmd *cobra.Command, args []string) error {
105
130
if err := os .WriteFile (filePath , yBytes , 0o644 ); err != nil {
106
131
return err
107
132
}
108
- logrus .Infof ("Instance %q configuration edited" , instName )
133
+ if inst != nil {
134
+ logrus .Infof ("Instance %q configuration edited" , inst .Name )
135
+ }
109
136
110
137
if ! tty {
111
138
// use "start" to start it
112
139
return nil
113
140
}
141
+ if inst == nil {
142
+ // edited a limayaml file directly
143
+ return nil
144
+ }
114
145
startNow , err := askWhetherToStart ()
115
146
if err != nil {
116
147
return err
0 commit comments