diff --git a/cmd/git-bundle-server/subcommand.go b/cmd/git-bundle-server/subcommand.go index 0bc3c1d..42a85a0 100644 --- a/cmd/git-bundle-server/subcommand.go +++ b/cmd/git-bundle-server/subcommand.go @@ -9,5 +9,6 @@ func all() []Subcommand { return []Subcommand{ Init{}, Update{}, + UpdateAll{}, } } diff --git a/cmd/git-bundle-server/update-all.go b/cmd/git-bundle-server/update-all.go new file mode 100644 index 0000000..44b9a05 --- /dev/null +++ b/cmd/git-bundle-server/update-all.go @@ -0,0 +1,44 @@ +package main + +import ( + "fmt" + "git-bundle-server/internal/core" + "os" + "os/exec" +) + +type UpdateAll struct{} + +func (UpdateAll) subcommand() string { + return "update-all" +} + +func (UpdateAll) run(args []string) error { + exe, err := os.Executable() + if err != nil { + return fmt.Errorf("failed to get path to execuable: %w", err) + } + + repos, err := core.GetRepositories() + if err != nil { + return err + } + + for route := range repos { + cmd := exec.Command(exe, "update", route) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + + err := cmd.Start() + if err != nil { + return fmt.Errorf("git command failed to start: %w", err) + } + + err = cmd.Wait() + if err != nil { + return fmt.Errorf("git command returned a failure: %w", err) + } + } + + return nil +}