1package cmd23import (4 "fmt"5 "strings"67 "github.com/charmbracelet/soft-serve/pkg/backend"8 "github.com/charmbracelet/soft-serve/pkg/proto"9 "github.com/spf13/cobra"10)1112// RepoCommand returns a command for managing repositories.13func RepoCommand() *cobra.Command {14 cmd := &cobra.Command{15 Use: "repo",16 Aliases: []string{"repos", "repository", "repositories"},17 Short: "Manage repositories",18 }1920 cmd.AddCommand(21 blobCommand(),22 branchCommand(),23 collabCommand(),24 commitCommand(),25 createCommand(),26 deleteCommand(),27 descriptionCommand(),28 hiddenCommand(),29 importCommand(),30 listCommand(),31 mirrorCommand(),32 privateCommand(),33 projectName(),34 renameCommand(),35 tagCommand(),36 treeCommand(),37 webhookCommand(),38 )3940 cmd.AddCommand(41 &cobra.Command{42 Use: "info REPOSITORY",43 Short: "Get information about a repository",44 Args: cobra.ExactArgs(1),45 PersistentPreRunE: checkIfReadable,46 RunE: func(cmd *cobra.Command, args []string) error {47 ctx := cmd.Context()48 be := backend.FromContext(ctx)49 rn := args[0]50 rr, err := be.Repository(ctx, rn)51 if err != nil {52 return err53 }5455 r, err := rr.Open()56 if err != nil {57 return err58 }5960 head, err := r.HEAD()61 if err != nil {62 return err63 }6465 var owner proto.User66 if rr.UserID() > 0 {67 owner, err = be.UserByID(ctx, rr.UserID())68 if err != nil {69 return err70 }71 }7273 branches, _ := r.Branches()74 tags, _ := r.Tags()7576 // project name and description are optional, handle trailing77 // whitespace to avoid breaking tests.78 cmd.Println(strings.TrimSpace(fmt.Sprint("Project Name: ", rr.ProjectName())))79 cmd.Println("Repository:", rr.Name())80 cmd.Println(strings.TrimSpace(fmt.Sprint("Description: ", rr.Description())))81 cmd.Println("Private:", rr.IsPrivate())82 cmd.Println("Hidden:", rr.IsHidden())83 cmd.Println("Mirror:", rr.IsMirror())84 if owner != nil {85 cmd.Println(strings.TrimSpace(fmt.Sprint("Owner: ", owner.Username())))86 }87 cmd.Println("Default Branch:", head.Name().Short())88 if len(branches) > 0 {89 cmd.Println("Branches:")90 for _, b := range branches {91 cmd.Println(" -", b)92 }93 }94 if len(tags) > 0 {95 cmd.Println("Tags:")96 for _, t := range tags {97 cmd.Println(" -", t)98 }99 }100101 return nil102 },103 },104 )105106 return cmd107}