internal/cli/gitaly/subcmd_bundleuri.go (63 lines of code) (raw):
package gitaly
import (
"context"
"fmt"
"time"
"github.com/urfave/cli/v3"
"gitlab.com/gitlab-org/gitaly/v16/internal/log"
"gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb"
)
func newBundleURICommand() *cli.Command {
return &cli.Command{
Name: "bundle-uri",
Usage: "Generate bundle URI bundle",
UsageText: `gitaly bundle-uri --storage=<storage-name> --repository=<relative-path> --config=<gitaly_config_file>
Example: gitaly bundle-uri --storage=default --repository=ab/cd/ef012345678901234567890 --config=config.toml`,
Description: "Generate a bundle for bundle-URI for the given repository.",
Action: bundleURIAction,
Flags: []cli.Flag{
&cli.StringFlag{
Name: flagStorage,
Usage: "storage containing the repository",
},
&cli.StringFlag{
Name: flagRepository,
Usage: "repository to generate bundle-URI for",
Required: true,
},
gitalyConfigFlag(),
},
}
}
func bundleURIAction(ctx context.Context, cmd *cli.Command) error {
log.ConfigureCommand()
cfg, err := loadConfig(cmd.String(flagConfig))
if err != nil {
return fmt.Errorf("load config: %w", err)
}
storage := cmd.String(flagStorage)
if storage == "" {
if len(cfg.Storages) != 1 {
return fmt.Errorf("multiple storages configured: use --storage to target storage explicitly")
}
storage = cfg.Storages[0].Name
}
address, err := getAddressWithScheme(cfg)
if err != nil {
return fmt.Errorf("get Gitaly address: %w", err)
}
conn, err := dial(ctx, address, cfg.Auth.Token, 10*time.Second)
if err != nil {
return fmt.Errorf("connect to Gitaly: %w", err)
}
defer conn.Close()
req := gitalypb.GenerateBundleURIRequest{
Repository: &gitalypb.Repository{
StorageName: storage,
RelativePath: cmd.String(flagRepository),
},
}
repoClient := gitalypb.NewRepositoryServiceClient(conn)
_, err = repoClient.GenerateBundleURI(ctx, &req)
return err
}