tag.go

 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}