repo.go

  1package cmd
  2
  3import (
  4	"fmt"
  5	"strings"
  6
  7	"github.com/charmbracelet/soft-serve/server/backend"
  8	"github.com/charmbracelet/soft-serve/server/proto"
  9	"github.com/spf13/cobra"
 10)
 11
 12func repoCommand() *cobra.Command {
 13	cmd := &cobra.Command{
 14		Use:     "repo",
 15		Aliases: []string{"repos", "repository", "repositories"},
 16		Short:   "Manage repositories",
 17	}
 18
 19	cmd.AddCommand(
 20		blobCommand(),
 21		branchCommand(),
 22		collabCommand(),
 23		commitCommand(),
 24		createCommand(),
 25		deleteCommand(),
 26		descriptionCommand(),
 27		hiddenCommand(),
 28		importCommand(),
 29		listCommand(),
 30		mirrorCommand(),
 31		privateCommand(),
 32		projectName(),
 33		renameCommand(),
 34		tagCommand(),
 35		treeCommand(),
 36	)
 37
 38	cmd.AddCommand(
 39		&cobra.Command{
 40			Use:               "info REPOSITORY",
 41			Short:             "Get information about a repository",
 42			Args:              cobra.ExactArgs(1),
 43			PersistentPreRunE: checkIfReadable,
 44			RunE: func(cmd *cobra.Command, args []string) error {
 45				ctx := cmd.Context()
 46				be := backend.FromContext(ctx)
 47				rn := args[0]
 48				rr, err := be.Repository(ctx, rn)
 49				if err != nil {
 50					return err
 51				}
 52
 53				r, err := rr.Open()
 54				if err != nil {
 55					return err
 56				}
 57
 58				head, err := r.HEAD()
 59				if err != nil {
 60					return err
 61				}
 62
 63				var owner proto.User
 64				if rr.UserID() > 0 {
 65					owner, err = be.UserByID(ctx, rr.UserID())
 66					if err != nil {
 67						return err
 68					}
 69				}
 70
 71				branches, _ := r.Branches()
 72				tags, _ := r.Tags()
 73
 74				// project name and description are optional, handle trailing
 75				// whitespace to avoid breaking tests.
 76				cmd.Println(strings.TrimSpace(fmt.Sprint("Project Name: ", rr.ProjectName())))
 77				cmd.Println("Repository:", rr.Name())
 78				cmd.Println(strings.TrimSpace(fmt.Sprint("Description: ", rr.Description())))
 79				cmd.Println("Private:", rr.IsPrivate())
 80				cmd.Println("Hidden:", rr.IsHidden())
 81				cmd.Println("Mirror:", rr.IsMirror())
 82				if owner != nil {
 83					cmd.Println(strings.TrimSpace(fmt.Sprint("Owner: ", owner.Username())))
 84				}
 85				cmd.Println("Default Branch:", head.Name().Short())
 86				if len(branches) > 0 {
 87					cmd.Println("Branches:")
 88					for _, b := range branches {
 89						cmd.Println("  -", b)
 90					}
 91				}
 92				if len(tags) > 0 {
 93					cmd.Println("Tags:")
 94					for _, t := range tags {
 95						cmd.Println("  -", t)
 96					}
 97				}
 98
 99				return nil
100			},
101		},
102	)
103
104	return cmd
105}