forked from canonical/pebble
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cmd_mkdir.go
88 lines (76 loc) · 2.27 KB
/
cmd_mkdir.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Copyright (c) 2022 Canonical Ltd
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 3 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package cli
import (
"fmt"
"os"
"strconv"
"github.com/canonical/go-flags"
"github.com/canonical/pebble/client"
)
const cmdMkdirSummary = "Create a directory"
const cmdMkdirDescription = `
The mkdir command creates the specified directory.
`
type cmdMkdir struct {
client *client.Client
MakeParents bool `short:"p"`
Permissions string `short:"m"`
UserID *int `long:"uid"`
User string `long:"user"`
GroupID *int `long:"gid"`
Group string `long:"group"`
Positional struct {
Path string `positional-arg-name:"<path>"`
} `positional-args:"yes" required:"yes"`
}
func init() {
AddCommand(&CmdInfo{
Name: "mkdir",
Summary: cmdMkdirSummary,
Description: cmdMkdirDescription,
ArgsHelp: map[string]string{
"-p": "Create parent directories as needed",
"-m": "Override permissions (3-digit octal)",
"--uid": "Use specified user ID",
"--user": "Use specified username",
"--gid": "Use specified group ID",
"--group": "Use specified group name",
},
New: func(opts *CmdOptions) flags.Commander {
return &cmdMkdir{client: opts.Client}
},
})
}
func (cmd *cmdMkdir) Execute(args []string) error {
if len(args) > 0 {
return ErrExtraArgs
}
opts := client.MakeDirOptions{
Path: cmd.Positional.Path,
MakeParents: cmd.MakeParents,
UserID: cmd.UserID,
User: cmd.User,
GroupID: cmd.GroupID,
Group: cmd.Group,
}
if cmd.Permissions != "" {
p, err := strconv.ParseUint(cmd.Permissions, 8, 32)
if err != nil {
return fmt.Errorf("invalid mode for directory: %q", cmd.Permissions)
}
opts.Permissions = os.FileMode(p)
}
return cmd.client.MakeDir(&opts)
}