Skip to content

Commit c4e2981

Browse files
committed
Add create command
* Move the silent workspace/env creation when editing to a dedicated create command * Starts to rework workspace manage tests
1 parent 93e9f38 commit c4e2981

File tree

5 files changed

+280
-133
lines changed

5 files changed

+280
-133
lines changed

cmd/create.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
Copyright © 2024 NAME HERE <EMAIL ADDRESS>
3+
*/
4+
package cmd
5+
6+
import (
7+
"github.com/antham/wo/cmd/internal/completion"
8+
"github.com/spf13/cobra"
9+
)
10+
11+
func newCreateCmd(workspaceManager workspaceManager) *cobra.Command {
12+
return &cobra.Command{
13+
Use: "create workspace [environment]",
14+
Short: "Create a workspace",
15+
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
16+
c := completion.New(workspaceManager)
17+
switch len(args) {
18+
case 0:
19+
workspaces, err := c.FindWorkspaces(toComplete)
20+
if err != nil {
21+
return []string{}, cobra.ShellCompDirectiveNoFileComp
22+
}
23+
return workspaces, cobra.ShellCompDirectiveNoFileComp
24+
}
25+
return []string{}, cobra.ShellCompDirectiveNoFileComp
26+
},
27+
RunE: func(cmd *cobra.Command, args []string) (err error) {
28+
switch len(args) {
29+
case 1:
30+
err = workspaceManager.Create(args[0])
31+
case 2:
32+
err = workspaceManager.CreateEnv(args[0], args[1])
33+
}
34+
return err
35+
},
36+
}
37+
}
38+
39+
func init() {
40+
rootCmd.AddCommand(newCreateCmd(newWorkspaceManager()))
41+
}

cmd/interface.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import "github.com/antham/wo/workspace"
44

55
type workspaceManager interface {
66
Get(string) (workspace.Workspace, error)
7+
Create(string) error
8+
CreateEnv(string, string) error
79
Edit(string) error
810
EditEnv(string, string) error
911
Load(string, string) error

cmd/mock_workspaceManager.go

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

workspace/workspace.go

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -145,28 +145,48 @@ func (s WorkspaceManager) Get(name string) (Workspace, error) {
145145
}, nil
146146
}
147147

148-
func (s WorkspaceManager) Edit(name string) error {
148+
func (s WorkspaceManager) Create(name string) error {
149149
err := s.createWorkspaceEnvFolder(name)
150150
if err != nil {
151151
return err
152152
}
153-
err = s.createWorkspaceDefaultEnv(name)
153+
err = s.createFile(s.resolveFunctionFile(name))
154154
if err != nil {
155155
return err
156156
}
157-
return s.edit(s.resolveFunctionFile(name))
157+
return s.createFile(s.resolveEnvFile(name, s.resolveEnv("")))
158+
}
159+
160+
func (s WorkspaceManager) CreateEnv(name string, env string) error {
161+
functionFile := s.resolveFunctionFile(name)
162+
_, err := os.Stat(functionFile)
163+
if err != nil {
164+
return fmt.Errorf(`check the workspace "%s" exists, create it first`, name)
165+
}
166+
return s.createFile(s.resolveEnvFile(name, env))
167+
}
168+
169+
func (s WorkspaceManager) Edit(name string) error {
170+
functionFile := s.resolveFunctionFile(name)
171+
_, err := os.Stat(functionFile)
172+
if err != nil {
173+
return fmt.Errorf(`check the workspace "%s" exists`, name)
174+
}
175+
return s.editFile(functionFile)
158176
}
159177

160178
func (s WorkspaceManager) EditEnv(name string, env string) error {
161-
err := s.createWorkspaceEnvFolder(name)
179+
functionFile := s.resolveFunctionFile(name)
180+
_, err := os.Stat(functionFile)
162181
if err != nil {
163-
return err
182+
return fmt.Errorf(`check the workspace "%s" exists`, name)
164183
}
165-
err = s.createWorkspaceDefaultEnv(name)
184+
envFile := s.resolveEnvFile(name, env)
185+
_, err = os.Stat(envFile)
166186
if err != nil {
167-
return err
187+
return fmt.Errorf(`check the environment "%s" exists`, env)
168188
}
169-
return s.edit(s.resolveWorkspaceEnvFile(name, env))
189+
return s.editFile(envFile)
170190
}
171191

172192
func (s WorkspaceManager) Load(name string, env string) error {
@@ -189,7 +209,7 @@ func (s WorkspaceManager) appendLoadStatement(name string, env string, functionA
189209
data := []string{}
190210
data = append(data, s.createEnvVariableStatement(fmt.Sprintf("%s_NAME", envVariablePrefix), name))
191211
data = append(data, s.createEnvVariableStatement(fmt.Sprintf("%s_ENV", envVariablePrefix), s.resolveEnv(env)))
192-
envFile := s.resolveWorkspaceEnvFile(name, env)
212+
envFile := s.resolveEnvFile(name, env)
193213
_, eerr := os.Stat(envFile)
194214
if eerr == nil {
195215
data = append(data, fmt.Sprintf("source %s", envFile))
@@ -213,10 +233,15 @@ func (s WorkspaceManager) appendLoadStatement(name string, env string, functionA
213233
return stmts
214234
}
215235

216-
func (s WorkspaceManager) edit(filepath string) error {
236+
func (s WorkspaceManager) editFile(filepath string) error {
217237
return s.execCommand("-c", fmt.Sprintf("%s %s", s.editor, filepath))
218238
}
219239

240+
func (s WorkspaceManager) createFile(filepath string) error {
241+
_, err := os.OpenFile(filepath, os.O_CREATE, 0o666)
242+
return err
243+
}
244+
220245
func (s WorkspaceManager) resolveEnv(env string) string {
221246
if env == "" {
222247
return "default"
@@ -246,7 +271,7 @@ func (s WorkspaceManager) resolveFunctionFile(name string) string {
246271
return fmt.Sprintf("%s/%s.%s", s.getFunctionDir(), name, s.getExtension())
247272
}
248273

249-
func (s WorkspaceManager) resolveWorkspaceEnvFile(name string, env string) string {
274+
func (s WorkspaceManager) resolveEnvFile(name string, env string) string {
250275
return fmt.Sprintf("%s/%s.%s", s.getWorkspaceEnvDir(name), s.resolveEnv(env), s.getExtension())
251276
}
252277

@@ -267,11 +292,6 @@ func (s WorkspaceManager) createWorkspaceEnvFolder(name string) error {
267292
return os.MkdirAll(s.getWorkspaceEnvDir(name), 0o777)
268293
}
269294

270-
func (s WorkspaceManager) createWorkspaceDefaultEnv(name string) error {
271-
_, err := os.OpenFile(s.resolveWorkspaceEnvFile(name, "default"), os.O_CREATE, 0o666)
272-
return err
273-
}
274-
275295
func (s WorkspaceManager) getFunctionDir() string {
276296
return fmt.Sprintf("%s/functions/%s", s.configDir, s.shell)
277297
}

0 commit comments

Comments
 (0)