summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--git-shell-commands.go103
1 files changed, 63 insertions, 40 deletions
diff --git a/git-shell-commands.go b/git-shell-commands.go
index 1b530f0..ccb940a 100644
--- a/git-shell-commands.go
+++ b/git-shell-commands.go
@@ -23,24 +23,26 @@ func checkRepoName(name string) (string, error) {
return name, nil
}
-func create() error {
- flag.Usage = func() {
- fmt.Fprintf(os.Stderr, `Usage: create [REPO]
-Create a new git repo named REPO.
-`)
- }
- flag.Parse()
- args := flag.Args()
+func checkRepoNames(args []string) ([]string, error) {
if len(args) == 0 {
- return fmt.Errorf("missing positional argument\nUse create -help for usage info")
+ return nil, fmt.Errorf("missing operand\nUse %s -help for usage info", filepath.Base(os.Args[0]))
}
- if len(args) > 1 {
- return fmt.Errorf("too many positional arguments\nUse create -help for usage info")
+ names := make([]string, len(args))
+ var errs []error
+ for i, arg := range args {
+ var err error
+ names[i], err = checkRepoName(arg)
+ if err != nil {
+ errs = append(errs, err)
+ }
}
- name, err := checkRepoName(args[0])
- if err != nil {
- return err
+ if len(errs) > 0 {
+ return nil, errors.Join(errs...)
}
+ return names, nil
+}
+
+func createRepo(name string) error {
dir := filepath.Join(codeDir, name)
fmt.Printf("mkdir %s\n", dir)
if err := os.Mkdir(dir, 0755); err != nil {
@@ -63,29 +65,34 @@ Create a new git repo named REPO.
return nil
}
-func fileExists(path string) bool {
- _, err := os.Stat(path)
- return !errors.Is(err, fs.ErrNotExist)
-}
-
-func delete() error {
+func create() {
flag.Usage = func() {
- fmt.Fprintf(os.Stderr, `Usage: delete [REPO]
-Delete the git repo named REPO.
+ fmt.Fprintf(os.Stderr, `Usage: create [REPO]...
+Create a new git repo named REPO.
`)
}
flag.Parse()
- args := flag.Args()
- if len(args) == 0 {
- return fmt.Errorf("missing positional argument\nUse delete -help for usage info")
- }
- if len(args) > 1 {
- return fmt.Errorf("too many positional arguments\nUse delete -help for usage info")
- }
- name, err := checkRepoName(args[0])
+ names, err := checkRepoNames(flag.Args())
if err != nil {
- return err
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+ exitCode := 0
+ for _, name := range names {
+ if err := createRepo(name); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ exitCode = 1
+ }
}
+ os.Exit(exitCode)
+}
+
+func fileExists(path string) bool {
+ _, err := os.Stat(path)
+ return !errors.Is(err, fs.ErrNotExist)
+}
+
+func deleteRepo(name string) error {
dir := filepath.Join(codeDir, name)
fmt.Printf("rm -rf %s\n", dir)
if !fileExists(dir) {
@@ -97,6 +104,28 @@ Delete the git repo named REPO.
return nil
}
+func delete() {
+ flag.Usage = func() {
+ fmt.Fprintf(os.Stderr, `Usage: delete [REPO]...
+Delete the git repo named REPO.
+`)
+ }
+ flag.Parse()
+ names, err := checkRepoNames(flag.Args())
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+ exitCode := 0
+ for _, name := range names {
+ if err := deleteRepo(name); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ exitCode = 1
+ }
+ }
+ os.Exit(exitCode)
+}
+
func help() {
fmt.Printf(`Available commands:
create create a new git repo
@@ -106,18 +135,12 @@ func help() {
}
func main() {
- cmd := filepath.Base(os.Args[0])
- var err error
- switch cmd {
+ switch filepath.Base(os.Args[0]) {
case "create":
- err = create()
+ create()
case "delete":
- err = delete()
+ delete()
default:
help()
}
- if err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
}