diff --git a/cmd/git-bundle-server/update-all.go b/cmd/git-bundle-server/update-all.go index 51bada7..4978ba6 100644 --- a/cmd/git-bundle-server/update-all.go +++ b/cmd/git-bundle-server/update-all.go @@ -2,11 +2,12 @@ package main import ( "context" - "os" - "os/exec" + "fmt" "github.com/github/git-bundle-server/cmd/utils" "github.com/github/git-bundle-server/internal/argparse" + "github.com/github/git-bundle-server/internal/cmd" + "github.com/github/git-bundle-server/internal/common" "github.com/github/git-bundle-server/internal/core" "github.com/github/git-bundle-server/internal/log" ) @@ -37,13 +38,15 @@ func (u *updateAllCmd) Run(ctx context.Context, args []string) error { parser.Parse(ctx, args) repoProvider := utils.GetDependency[core.RepositoryProvider](ctx, u.container) + fileSystem := utils.GetDependency[common.FileSystem](ctx, u.container) + commandExecutor := utils.GetDependency[cmd.CommandExecutor](ctx, u.container) repos, err := repoProvider.GetRepositories(ctx) if err != nil { return u.logger.Error(ctx, err) } - exe, err := os.Executable() + exe, err := fileSystem.GetLocalExecutable("git-bundle-server") if err != nil { return u.logger.Errorf(ctx, "failed to get path to execuable: %w", err) } @@ -53,19 +56,14 @@ func (u *updateAllCmd) Run(ctx context.Context, args []string) error { for route := range repos { subargs[1] = route - cmd := exec.Command(exe, subargs...) - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stdout - - err := cmd.Start() - if err != nil { - return u.logger.Errorf(ctx, "git command failed to start: %w", err) - } - - err = cmd.Wait() + fmt.Printf("*** Updating %s ***\n", route) + exitCode, err := commandExecutor.RunStdout(ctx, exe, subargs...) if err != nil { - return u.logger.Errorf(ctx, "git command returned a failure: %w", err) + return u.logger.Error(ctx, err) + } else if exitCode != 0 { + return u.logger.Errorf(ctx, "git-bundle-server update exited with status %d", exitCode) } + fmt.Print("\n") } return nil diff --git a/cmd/git-bundle-server/update.go b/cmd/git-bundle-server/update.go index cbe6a5f..6c07b4b 100644 --- a/cmd/git-bundle-server/update.go +++ b/cmd/git-bundle-server/update.go @@ -52,7 +52,7 @@ func (u *updateCmd) Run(ctx context.Context, args []string) error { return u.logger.Errorf(ctx, "failed to load bundle list: %w", err) } - fmt.Printf("Creating new incremental bundle\n") + fmt.Printf("Checking for updates to %s\n", repo.Route) bundle, err := bundleProvider.CreateIncrementalBundle(ctx, repo, list) if err != nil { return u.logger.Error(ctx, err) @@ -60,22 +60,24 @@ func (u *updateCmd) Run(ctx context.Context, args []string) error { // Nothing new! if bundle == nil { + fmt.Printf("%s is up-to-date, no new bundles generated\n", repo.Route) return nil } list.Bundles[bundle.CreationToken] = *bundle - fmt.Printf("Collapsing bundle list\n") + fmt.Println("Updating bundle list") err = bundleProvider.CollapseList(ctx, repo, list) if err != nil { return u.logger.Error(ctx, err) } - fmt.Printf("Writing updated bundle list\n") + fmt.Println("Writing updated bundle list") listErr := bundleProvider.WriteBundleList(ctx, list, repo) if listErr != nil { return u.logger.Errorf(ctx, "failed to write bundle list: %w", listErr) } + fmt.Println("Update complete") return nil }