1package cmd
2
3import (
4 "strings"
5
6 "github.com/spf13/cobra"
7)
8
9func tagCommand() *cobra.Command {
10 cmd := &cobra.Command{
11 Use: "tag",
12 Short: "Manage repository tags",
13 }
14
15 cmd.AddCommand(
16 tagListCommand(),
17 tagDeleteCommand(),
18 )
19
20 return cmd
21}
22
23func tagListCommand() *cobra.Command {
24 cmd := &cobra.Command{
25 Use: "list REPOSITORY",
26 Aliases: []string{"ls"},
27 Short: "List repository tags",
28 Args: cobra.ExactArgs(1),
29 PersistentPreRunE: checkIfReadable,
30 RunE: func(cmd *cobra.Command, args []string) error {
31 ctx := cmd.Context()
32 be, _ := fromContext(cmd)
33 rn := strings.TrimSuffix(args[0], ".git")
34 rr, err := be.Repository(ctx, rn)
35 if err != nil {
36 return err
37 }
38
39 r, err := rr.Open()
40 if err != nil {
41 return err
42 }
43
44 tags, _ := r.Tags()
45 for _, t := range tags {
46 cmd.Println(t)
47 }
48
49 return nil
50 },
51 }
52
53 return cmd
54}
55
56func tagDeleteCommand() *cobra.Command {
57 cmd := &cobra.Command{
58 Use: "delete REPOSITORY TAG",
59 Aliases: []string{"remove", "rm", "del"},
60 Short: "Delete a tag",
61 Args: cobra.ExactArgs(2),
62 PersistentPreRunE: checkIfCollab,
63 RunE: func(cmd *cobra.Command, args []string) error {
64 ctx := cmd.Context()
65 be, _ := fromContext(cmd)
66 rn := strings.TrimSuffix(args[0], ".git")
67 rr, err := be.Repository(ctx, rn)
68 if err != nil {
69 return err
70 }
71
72 r, err := rr.Open()
73 if err != nil {
74 return err
75 }
76
77 return r.DeleteTag(args[1])
78 },
79 }
80
81 return cmd
82}