Merge lp:~unity-api-team/unity-scope-snappy/add_gettext_to_vendors into lp:~unity-api-team/unity-scope-snappy/trunk

Proposed by Antti Kaijanmäki
Status: Needs review
Proposed branch: lp:~unity-api-team/unity-scope-snappy/add_gettext_to_vendors
Merge into: lp:~unity-api-team/unity-scope-snappy/trunk
Diff against target: 579 lines (+473/-10)
6 files modified
debian/copyright (+4/-0)
internal/github.com/gosexy/gettext/LICENSE (+20/-0)
internal/github.com/gosexy/gettext/README.md (+94/-0)
internal/github.com/gosexy/gettext/gettext.go (+207/-0)
internal/github.com/gosexy/gettext/gettext_test.go (+130/-0)
internal/vendor.json (+18/-10)
To merge this branch: bzr merge lp:~unity-api-team/unity-scope-snappy/add_gettext_to_vendors
Reviewer Review Type Date Requested Status
Kyle Fazzari (community) Needs Fixing
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+269290@code.launchpad.net

Commit message

Add github.com/gosexy/gettext to vendors.

Description of the change

-

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Kyle Fazzari (kyrofa) wrote :

Add this to debian/copyright, as well. Another comment is in the diff.

review: Needs Fixing
35. By Antti Kaijanmäki

merge trunk, resolve conflict in internal/vendor.json

Revision history for this message
Antti Kaijanmäki (kaijanmaki) wrote :

OK, will modify debian/copyright.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
36. By Antti Kaijanmäki

update debian/copyright

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Kyle Fazzari (kyrofa) wrote :

A few more things that might need fixing here.

review: Needs Fixing

Unmerged revisions

36. By Antti Kaijanmäki

update debian/copyright

35. By Antti Kaijanmäki

merge trunk, resolve conflict in internal/vendor.json

34. By Antti Kaijanmäki

Add github.com/gosexy/gettext to vendors.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/copyright'
--- debian/copyright 2015-07-21 17:39:16 +0000
+++ debian/copyright 2015-08-27 16:20:17 +0000
@@ -54,6 +54,10 @@
54 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE54 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
55 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.55 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5656
57Files: internal/gihub.com/gosexy/gettext/*
58Copyright: 2012-2013 José Carlos Nieto, http://xiam.menteslibres.org/
59License: MIT
60
57Files: internal/golang.org/*61Files: internal/golang.org/*
58Copyright: 2012 The Go Authors62Copyright: 2012 The Go Authors
59License: BSD-3-clause63License: BSD-3-clause
6064
=== added directory 'internal/github.com/gosexy'
=== added directory 'internal/github.com/gosexy/gettext'
=== added file 'internal/github.com/gosexy/gettext/LICENSE'
--- internal/github.com/gosexy/gettext/LICENSE 1970-01-01 00:00:00 +0000
+++ internal/github.com/gosexy/gettext/LICENSE 2015-08-27 16:20:17 +0000
@@ -0,0 +1,20 @@
1Copyright (c) 2012-2013 José Carlos Nieto, http://xiam.menteslibres.org/
2
3Permission is hereby granted, free of charge, to any person obtaining
4a copy of this software and associated documentation files (the
5"Software"), to deal in the Software without restriction, including
6without limitation the rights to use, copy, modify, merge, publish,
7distribute, sublicense, and/or sell copies of the Software, and to
8permit persons to whom the Software is furnished to do so, subject to
9the following conditions:
10
11The above copyright notice and this permission notice shall be
12included in all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
021
=== added file 'internal/github.com/gosexy/gettext/README.md'
--- internal/github.com/gosexy/gettext/README.md 1970-01-01 00:00:00 +0000
+++ internal/github.com/gosexy/gettext/README.md 2015-08-27 16:20:17 +0000
@@ -0,0 +1,94 @@
1# gosexy/gettext
2
3Go bindings for [GNU gettext][1], an internationalization and localization
4library for writing multilingual systems.
5
6## Requeriments
7
8The GNU C library. If you're using GNU/Linux, FreeBSD or OSX you should already
9have it.
10
11## Installation
12
13Use `go get` to download and install the binding:
14
15```sh
16go get github.com/gosexy/gettext
17```
18
19## Usage
20
21```go
22package main
23
24import (
25 "github.com/gosexy/gettext"
26 "fmt"
27 "os"
28)
29
30func main() {
31 gettext.BindTextdomain("example", ".")
32 gettext.Textdomain("example")
33
34 os.Setenv("LANGUAGE", "es_MX.utf8")
35
36 gettext.SetLocale(gettext.LC_ALL, "")
37
38 fmt.Println(gettext.Gettext("Hello, world!"))
39}
40```
41
42You can use `os.Setenv` to set the `LANGUAGE` environment variable or set it
43on a terminal:
44
45```sh
46export LANGUAGE="es_MX.utf8"
47./gettext-program
48```
49
50Note that `xgettext` does not officially support Go syntax yet, however, you
51can generate a valid `.pot` file by forcing `xgettest` to use the C++
52syntax:
53
54```sh
55xgettext -d example -s gettext_test.go -o example.pot -L c++ -i \
56--keyword=NGettext:1,2 --keyword=Gettext
57```
58
59This will generate a `example.pot` file.
60
61After translating the `.pot` file, you must generate `.po` and `.mo` files and
62remember to set the UTF-8 charset.
63
64```sh
65msginit -l es_MX -o example.po -i example.pot
66msgfmt -c -v -o example.mo example.po
67```
68
69Finally, move the `.mo` file to an appropriate location.
70
71```sh
72mv example.mo examples/es_MX.utf8/LC_MESSAGES/example.mo
73```
74
75## Documentation
76
77You can read `gosexy/gettext` documentation from a terminal
78
79```sh
80go doc github.com/gosexy/gettext
81```
82
83Or you can [browse it](http://godoc.org/github.com/gosexy/gettext) online.
84
85The original gettext documentation could be very useful as well:
86
87```sh
88man 3 gettext
89```
90
91Here's another [good tutorial][2] on using gettext.
92
93[1]: http://www.gnu.org/software/gettext/
94[2]: http://oriya.sarovar.org/docs/gettext_single.html
095
=== added file 'internal/github.com/gosexy/gettext/gettext.go'
--- internal/github.com/gosexy/gettext/gettext.go 1970-01-01 00:00:00 +0000
+++ internal/github.com/gosexy/gettext/gettext.go 2015-08-27 16:20:17 +0000
@@ -0,0 +1,207 @@
1/*
2 Copyright (c) 2012 José Carlos Nieto, http://xiam.menteslibres.org/
3
4 Permission is hereby granted, free of charge, to any person obtaining
5 a copy of this software and associated documentation files (the
6 "Software"), to deal in the Software without restriction, including
7 without limitation the rights to use, copy, modify, merge, publish,
8 distribute, sublicense, and/or sell copies of the Software, and to
9 permit persons to whom the Software is furnished to do so, subject to
10 the following conditions:
11
12 The above copyright notice and this permission notice shall be
13 included in all copies or substantial portions of the Software.
14
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22*/
23
24package gettext
25
26/*
27
28#include <libintl.h>
29#include <locale.h>
30#include <stdlib.h>
31*/
32import "C"
33
34import (
35 "fmt"
36 "strings"
37 "unsafe"
38)
39
40var (
41 // For all of the locale.
42 LC_ALL = uint(C.LC_ALL)
43
44 // For regular expression matching (it determines the meaning of range
45 // expressions and equivalence classes) and string collation.
46 LC_COLATE = uint(C.LC_ALL)
47
48 // For regular expression matching, character classification, conversion,
49 // case-sensitive comparison, and wide character functions.
50 LC_CTYPE = uint(C.LC_CTYPE)
51
52 // For localizable natural-language messages.
53 LC_MESSAGES = uint(C.LC_MESSAGES)
54
55 // For monetary formatting.
56 LC_MONETARY = uint(C.LC_MONETARY)
57
58 // For number formatting (such as the decimal point and the thousands
59 // separator).
60 LC_NUMERIC = uint(C.LC_NUMERIC)
61
62 // For time and date formatting.
63 LC_TIME = uint(C.LC_TIME)
64)
65
66// Sets or queries the program's current locale.
67func SetLocale(category uint, locale string) string {
68 clocale := C.CString(locale)
69
70 res := C.GoString(C.setlocale(C.int(category), clocale))
71
72 C.free(unsafe.Pointer(clocale))
73 return res
74}
75
76// Sets directory containing message catalogs.
77func BindTextdomain(domainname string, dirname string) string {
78 cdirname := C.CString(dirname)
79 cdomainname := C.CString(domainname)
80
81 res := C.GoString(C.bindtextdomain(cdomainname, cdirname))
82
83 C.free(unsafe.Pointer(cdirname))
84 C.free(unsafe.Pointer(cdomainname))
85 return res
86}
87
88// Sets the output codeset for message catalogs for domain domainname.
89func BindTextdomainCodeset(domainname string, codeset string) string {
90 cdomainname := C.CString(domainname)
91 ccodeset := C.CString(codeset)
92
93 res := C.GoString(C.bind_textdomain_codeset(cdomainname, ccodeset))
94
95 C.free(unsafe.Pointer(cdomainname))
96 C.free(unsafe.Pointer(ccodeset))
97 return res
98}
99
100// Sets or retrieves the current message domain.
101func Textdomain(domainname string) string {
102 cdomainname := C.CString(domainname)
103
104 res := C.GoString(C.textdomain(cdomainname))
105
106 C.free(unsafe.Pointer(cdomainname))
107 return res
108}
109
110// Attempt to translate a text string into the user's native language, by
111// looking up the translation in a message catalog.
112func Gettext(msgid string) string {
113 cmsgid := C.CString(msgid)
114
115 res := C.GoString(C.gettext(cmsgid))
116
117 C.free(unsafe.Pointer(cmsgid))
118 return res
119}
120
121// Like Gettext(), but looking up the message in the specified domain.
122func DGettext(domain string, msgid string) string {
123 cdomain := C.CString(domain)
124 cmsgid := C.CString(msgid)
125
126 res := C.GoString(C.dgettext(cdomain, cmsgid))
127
128 C.free(unsafe.Pointer(cdomain))
129 C.free(unsafe.Pointer(cmsgid))
130 return res
131}
132
133// Like Gettext(), but looking up the message in the specified domain and
134// category.
135func DCGettext(domain string, msgid string, category uint) string {
136 cdomain := C.CString(domain)
137 cmsgid := C.CString(msgid)
138
139 res := C.GoString(C.dcgettext(cdomain, cmsgid, C.int(category)))
140
141 C.free(unsafe.Pointer(cdomain))
142 C.free(unsafe.Pointer(cmsgid))
143 return res
144}
145
146// Attempt to translate a text string into the user's native language, by
147// looking up the appropriate plural form of the translation in a message
148// catalog.
149func NGettext(msgid string, msgid_plural string, n uint64) string {
150 cmsgid := C.CString(msgid)
151 cmsgid_plural := C.CString(msgid_plural)
152
153 res := C.GoString(C.ngettext(cmsgid, cmsgid_plural, C.ulong(n)))
154
155 C.free(unsafe.Pointer(cmsgid))
156 C.free(unsafe.Pointer(cmsgid_plural))
157
158 return res
159}
160
161// Like fmt.Sprintf() but without %!(EXTRA) errors.
162func Sprintf(format string, a ...interface{}) string {
163 expects := strings.Count(format, "%") - strings.Count(format, "%%")
164
165 if expects > 0 {
166 arguments := make([]interface{}, expects)
167 for i := 0; i < expects; i++ {
168 if len(a) > i {
169 arguments[i] = a[i]
170 }
171 }
172 return fmt.Sprintf(format, arguments...)
173 }
174
175 return format
176}
177
178// Like NGettext(), but looking up the message in the specified domain.
179func DNGettext(domainname string, msgid string, msgid_plural string, n uint64) string {
180 cdomainname := C.CString(domainname)
181 cmsgid := C.CString(msgid)
182 cmsgid_plural := C.CString(msgid_plural)
183
184 res := C.GoString(C.dngettext(cdomainname, cmsgid, cmsgid_plural, C.ulong(n)))
185
186 C.free(unsafe.Pointer(cdomainname))
187 C.free(unsafe.Pointer(cmsgid))
188 C.free(unsafe.Pointer(cmsgid_plural))
189
190 return res
191}
192
193// Like NGettext(), but looking up the message in the specified domain and
194// category.
195func DCNGettext(domainname string, msgid string, msgid_plural string, n uint64, category uint) string {
196 cdomainname := C.CString(domainname)
197 cmsgid := C.CString(msgid)
198 cmsgid_plural := C.CString(msgid_plural)
199
200 res := C.GoString(C.dcngettext(cdomainname, cmsgid, cmsgid_plural, C.ulong(n), C.int(category)))
201
202 C.free(unsafe.Pointer(cdomainname))
203 C.free(unsafe.Pointer(cmsgid))
204 C.free(unsafe.Pointer(cmsgid_plural))
205
206 return res
207}
0208
=== added file 'internal/github.com/gosexy/gettext/gettext_test.go'
--- internal/github.com/gosexy/gettext/gettext_test.go 1970-01-01 00:00:00 +0000
+++ internal/github.com/gosexy/gettext/gettext_test.go 2015-08-27 16:20:17 +0000
@@ -0,0 +1,130 @@
1package gettext
2
3import (
4 "fmt"
5 "os"
6 "testing"
7)
8
9/*
10 NOTE:
11
12 xgettext does not officially support Go syntax, however, you can generate a valid .pot file by forcing
13 xgettest to use the C++ syntax:
14
15 % xgettext -d example -s gettext_test.go -o example.pot -L c++ -i --keyword=NGettext:1,2 --keyword=Gettext
16
17 This will generate a example.pot file.
18
19 After translating the .pot file, you must generate .po and .mo files.
20
21 Remember to set the UTF-8 charset.
22
23 % msginit -l es_MX -o example.po -i example.pot
24 % msgfmt -c -v -o example.mo example.po
25
26 And finally, move the .mo file to an appropriate location.
27
28 % mv example.mo examples/es_MX.utf8/LC_MESSAGES/example.mo
29
30*/
31
32func TestSpanishMexico(t *testing.T) {
33
34 os.Setenv("LANGUAGE", "es_MX.utf8")
35
36 SetLocale(LC_ALL, "")
37 BindTextdomain("example", "./examples/")
38 Textdomain("example")
39
40 t1 := Gettext("Hello, world!")
41
42 fmt.Println(t1)
43
44 if t1 != "¡Hola mundo!" {
45 t.Errorf("Failed translation.")
46 }
47
48 t2 := Sprintf(NGettext("An apple", "%d apples", 1), 1, "garbage")
49
50 fmt.Println(t2)
51
52 if t2 != "Una manzana" {
53 t.Errorf("Failed translation.")
54 }
55
56 t3 := Sprintf(NGettext("An apple", "%d apples", 3), 3)
57
58 fmt.Println(t3)
59
60 if t3 != "3 manzanas" {
61 t.Errorf("Failed translation.")
62 }
63
64 t4 := Gettext("Good morning")
65
66 fmt.Println(t4)
67
68 if t4 != "Buenos días" {
69 t.Errorf("Failed translation.")
70 }
71
72 t5 := Gettext("Good bye!")
73
74 fmt.Println(t5)
75
76 if t5 != "¡Hasta luego!" {
77 t.Errorf("Failed translation.")
78 }
79
80}
81
82func TestGermanDeutschland(t *testing.T) {
83
84 os.Setenv("LANGUAGE", "de_DE.utf8")
85
86 SetLocale(LC_ALL, "")
87 BindTextdomain("example", "./examples/")
88 Textdomain("example")
89
90 t1 := Gettext("Hello, world!")
91
92 fmt.Println(t1)
93
94 if t1 != "Hallo, Welt!" {
95 t.Errorf("Failed translation.")
96 }
97
98 t2 := Sprintf(NGettext("An apple", "%d apples", 1), 1, "garbage")
99
100 fmt.Println(t2)
101
102 if t2 != "Ein Apfel" {
103 t.Errorf("Failed translation.")
104 }
105
106 t3 := Sprintf(NGettext("An apple", "%d apples", 3), 3)
107
108 fmt.Println(t3)
109
110 if t3 != "3 Äpfel" {
111 t.Errorf("Failed translation.")
112 }
113
114 t4 := Gettext("Good morning")
115
116 fmt.Println(t4)
117
118 if t4 != "Guten morgen" {
119 t.Errorf("Failed translation.")
120 }
121
122 t5 := Gettext("Good bye!")
123
124 fmt.Println(t5)
125
126 if t5 != "Aufwiedersehen!" {
127 t.Errorf("Failed translation.")
128 }
129
130}
0131
=== modified file 'internal/vendor.json'
--- internal/vendor.json 2015-07-30 14:22:57 +0000
+++ internal/vendor.json 2015-08-27 16:20:17 +0000
@@ -1,68 +1,76 @@
1{1{
2 "comment": "",2 "comment": "",
3 "ignore": "",
3 "package": [4 "package": [
4 {5 {
5 "canonical": "github.com/AlekSi/gocov-xml",6 "canonical": "github.com/AlekSi/gocov-xml",
6 "comment": "",7 "comment": "",
7 "local": "launchpad.net/unity-scope-snappy/internal/github.com/AlekSi/gocov-xml",8 "local": "github.com/AlekSi/gocov-xml",
8 "revision": "d2f6da892a0d5e0b587526abf51349ad654ade51",9 "revision": "d2f6da892a0d5e0b587526abf51349ad654ade51",
9 "revisionTime": "2013-09-03T17:40:06+04:00"10 "revisionTime": "2013-09-03T17:40:06+04:00"
10 },11 },
11 {12 {
12 "canonical": "github.com/axw/gocov",13 "canonical": "github.com/axw/gocov",
13 "comment": "",14 "comment": "",
14 "local": "launchpad.net/unity-scope-snappy/internal/github.com/axw/gocov",15 "local": "github.com/axw/gocov",
15 "revision": "3b045e0eb61013ff134e6752184febc47d119f3a",16 "revision": "3b045e0eb61013ff134e6752184febc47d119f3a",
16 "revisionTime": "2014-11-11T18:30:33+08:00"17 "revisionTime": "2014-11-11T18:30:33+08:00"
17 },18 },
18 {19 {
19 "canonical": "github.com/axw/gocov/gocov",20 "canonical": "github.com/axw/gocov/gocov",
20 "comment": "",21 "comment": "",
21 "local": "launchpad.net/unity-scope-snappy/internal/github.com/axw/gocov/gocov",22 "local": "github.com/axw/gocov/gocov",
22 "revision": "3b045e0eb61013ff134e6752184febc47d119f3a",23 "revision": "3b045e0eb61013ff134e6752184febc47d119f3a",
23 "revisionTime": "2014-11-11T18:30:33+08:00"24 "revisionTime": "2014-11-11T18:30:33+08:00"
24 },25 },
25 {26 {
26 "canonical": "github.com/axw/gocov/gocovutil",27 "canonical": "github.com/axw/gocov/gocovutil",
27 "comment": "",28 "comment": "",
28 "local": "launchpad.net/unity-scope-snappy/internal/github.com/axw/gocov/gocovutil",29 "local": "github.com/axw/gocov/gocovutil",
29 "revision": "3b045e0eb61013ff134e6752184febc47d119f3a",30 "revision": "3b045e0eb61013ff134e6752184febc47d119f3a",
30 "revisionTime": "2014-11-11T18:30:33+08:00"31 "revisionTime": "2014-11-11T18:30:33+08:00"
31 },32 },
32 {33 {
33 "canonical": "github.com/dustin/go-humanize",34 "canonical": "github.com/dustin/go-humanize",
34 "comment": "",35 "comment": "",
35 "local": "launchpad.net/unity-scope-snappy/internal/github.com/dustin/go-humanize",36 "local": "github.com/dustin/go-humanize",
36 "revision": "c128122e0b9b93799aef8181a537e5d8fd7081d6",37 "revision": "c128122e0b9b93799aef8181a537e5d8fd7081d6",
37 "revisionTime": "2015-06-22T22:54:03-07:00"38 "revisionTime": "2015-06-22T22:54:03-07:00"
38 },39 },
39 {40 {
40 "canonical": "github.com/godbus/dbus",41 "canonical": "github.com/godbus/dbus",
41 "comment": "",42 "comment": "",
42 "local": "launchpad.net/unity-scope-snappy/internal/github.com/godbus/dbus",43 "local": "github.com/godbus/dbus",
43 "revision": "25c3068a42a0b50b877953fb249dbcffc6bd1bca",44 "revision": "25c3068a42a0b50b877953fb249dbcffc6bd1bca",
44 "revisionTime": "2015-07-29T16:15:27-07:00"45 "revisionTime": "2015-07-29T16:15:27-07:00"
45 },46 },
46 {47 {
47 "canonical": "github.com/godbus/dbus/introspect",48 "canonical": "github.com/godbus/dbus/introspect",
48 "comment": "",49 "comment": "",
49 "local": "launchpad.net/unity-scope-snappy/internal/github.com/godbus/dbus/introspect",50 "local": "github.com/godbus/dbus/introspect",
50 "revision": "25c3068a42a0b50b877953fb249dbcffc6bd1bca",51 "revision": "25c3068a42a0b50b877953fb249dbcffc6bd1bca",
51 "revisionTime": "2015-07-29T16:15:27-07:00"52 "revisionTime": "2015-07-29T16:15:27-07:00"
52 },53 },
53 {54 {
55 "canonical": "github.com/gosexy/gettext",
56 "comment": "",
57 "local": "github.com/gosexy/gettext",
58 "revision": "98b7b91596d20b96909e6b60d57411547dd9959c",
59 "revisionTime": "2013-02-21T06:21:43-05:00"
60 },
61 {
54 "canonical": "golang.org/x/tools/cover",62 "canonical": "golang.org/x/tools/cover",
55 "comment": "",63 "comment": "",
56 "local": "launchpad.net/unity-scope-snappy/internal/golang.org/x/tools/cover",64 "local": "golang.org/x/tools/cover",
57 "revision": "af817890aa7b628234075a6cb01a3a435fb8317d",65 "revision": "af817890aa7b628234075a6cb01a3a435fb8317d",
58 "revisionTime": "2015-06-17T17:25:35-07:00"66 "revisionTime": "2015-06-17T17:25:35-07:00"
59 },67 },
60 {68 {
61 "canonical": "launchpad.net/go-unityscopes/v2",69 "canonical": "launchpad.net/go-unityscopes/v2",
62 "comment": "",70 "comment": "",
63 "local": "launchpad.net/unity-scope-snappy/internal/launchpad.net/go-unityscopes/v2",71 "local": "launchpad.net/go-unityscopes/v2",
64 "revision": "69",72 "revision": "69",
65 "revisionTime": "2015-06-02T10:39:20+02:00"73 "revisionTime": "2015-06-02T10:39:20+02:00"
66 }74 }
67 ]75 ]
68}
69\ No newline at end of file76\ No newline at end of file
77}

Subscribers

People subscribed via source and target branches