diff options
Diffstat (limited to 'git-shell-commands.go')
| -rw-r--r-- | git-shell-commands.go | 103 |
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) - } } |
