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 projectName() *cobra.Command {
14 cmd := &cobra.Command{
15 Use: "project-name REPOSITORY [NAME]",
16 Aliases: []string{"project"},
17 Short: "Set or get the project name 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 pn, err := be.ProjectName(ctx, rn)
30 if err != nil {
31 return err
32 }
33
34 co.Println(pn)
35 default:
36 if !cmd.CheckUserHasAccess(co, rn, access.ReadWriteAccess) {
37 return proto.ErrUnauthorized
38 }
39
40 if err := be.SetProjectName(ctx, rn, strings.Join(args[1:], " ")); err != nil {
41 return err
42 }
43 }
44
45 return nil
46 },
47 }
48
49 return cmd
50}