@@ -25,22 +25,28 @@ func infocmd(opt Options) error {
25
25
}
26
26
27
27
// Find regular git tags.
28
- tags , err := Tags (user , repo , token )
28
+ foundTags , err := Tags (user , repo , token )
29
29
if err != nil {
30
30
return fmt .Errorf ("could not fetch tags, %v" , err )
31
31
}
32
- if len (tags ) == 0 {
32
+ if len (foundTags ) == 0 {
33
33
return fmt .Errorf ("no tags available for %v/%v" , user , repo )
34
34
}
35
35
36
- fmt . Println ( " tags:" )
37
- for _ , t := range tags {
36
+ tags := foundTags [: 0 ]
37
+ for _ , t := range foundTags {
38
38
// If the user only requested one tag, filter out the rest.
39
39
if tag == "" || t .Name == tag {
40
- fmt . Println ( "-" , & t )
40
+ tags = append ( tags , t )
41
41
}
42
42
}
43
43
44
+ renderer := renderInfoText
45
+
46
+ if opt .Info .JSON {
47
+ renderer = renderInfoJSON
48
+ }
49
+
44
50
// List releases + assets.
45
51
var releases []Release
46
52
if tag == "" {
@@ -60,6 +66,15 @@ func infocmd(opt Options) error {
60
66
releases = []Release {* release }
61
67
}
62
68
69
+ return renderer (tags , releases )
70
+ }
71
+
72
+ func renderInfoText (tags []Tag , releases []Release ) error {
73
+ fmt .Println ("tags:" )
74
+ for _ , tag := range tags {
75
+ fmt .Println ("-" , & tag )
76
+ }
77
+
63
78
fmt .Println ("releases:" )
64
79
for _ , release := range releases {
65
80
fmt .Println ("-" , & release )
@@ -68,6 +83,20 @@ func infocmd(opt Options) error {
68
83
return nil
69
84
}
70
85
86
+ func renderInfoJSON (tags []Tag , releases []Release ) error {
87
+ out := struct {
88
+ Tags []Tag
89
+ Releases []Release
90
+ }{
91
+ Tags : tags ,
92
+ Releases : releases ,
93
+ }
94
+
95
+ enc := json .NewEncoder (os .Stdout )
96
+ enc .SetIndent ("" , " " )
97
+ return enc .Encode (& out )
98
+ }
99
+
71
100
func uploadcmd (opt Options ) error {
72
101
user := nvls (opt .Upload .User , EnvUser )
73
102
repo := nvls (opt .Upload .Repo , EnvRepo )
0 commit comments