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}