description.go

 1package repo
 2
 3import (
 4	"strings"
 5
 6	"github.com/charmbracelet/soft-serve/cmd"
 7	"github.com/charmbracelet/soft-serve/pkg/access"
 8	"github.com/charmbracelet/soft-serve/pkg/backend"
 9	"github.com/charmbracelet/soft-serve/pkg/proto"
10	"github.com/spf13/cobra"
11)
12
13func descriptionCommand() *cobra.Command {
14	cmd := &cobra.Command{
15		Use:     "description REPOSITORY [DESCRIPTION]",
16		Aliases: []string{"desc"},
17		Short:   "Set or get the description for a repository",
18		Args:    cobra.MinimumNArgs(1),
19		RunE: func(co *cobra.Command, args []string) error {
20			ctx := co.Context()
21			be := backend.FromContext(ctx)
22			rn := strings.TrimSuffix(args[0], ".git")
23			switch len(args) {
24			case 1:
25				if !cmd.CheckUserHasAccess(co, rn, access.ReadOnlyAccess) {
26					return proto.ErrUnauthorized
27				}
28
29				desc, err := be.Description(ctx, rn)
30				if err != nil {
31					return err
32				}
33
34				co.Println(desc)
35			default:
36				if !cmd.CheckUserHasAccess(co, rn, access.ReadWriteAccess) {
37					return proto.ErrUnauthorized
38				}
39
40				if err := be.SetDescription(ctx, rn, strings.Join(args[1:], " ")); err != nil {
41					return err
42				}
43			}
44
45			return nil
46		},
47	}
48
49	return cmd
50}