Merge lp:~chipaca/snappy/schmideload into lp:~snappy-dev/snappy/snappy-moved-to-github

Proposed by John Lenton on 2015-08-19
Status: Merged
Approved by: Michael Vogt on 2015-08-25
Approved revision: 636
Merged at revision: 637
Proposed branch: lp:~chipaca/snappy/schmideload
Merge into: lp:~snappy-dev/snappy/snappy-moved-to-github
Diff against target: 338 lines (+76/-49)
6 files modified
helpers/helpers.go (+15/-1)
helpers/helpers_test.go (+2/-2)
snappy/click.go (+14/-37)
snappy/click_test.go (+15/-5)
snappy/snapp.go (+17/-4)
snappy/sort_test.go (+13/-0)
To merge this branch: bzr merge lp:~chipaca/snappy/schmideload
Reviewer Review Type Date Requested Status
Michael Vogt 2015-08-19 Approve on 2015-08-25
Snappy Tarmac (community) continuous-integration Approve on 2015-08-20
Federico Gimenez (community) continuous-integration Approve on 2015-08-19
Review via email: mp+268498@code.launchpad.net

Commit Message

Override sideloaded package version.

Description of the Change

When sideloading a package use the base 36 numeral for the current utimestamp instead of the package-provided version.

To post a comment you must log in.
Federico Gimenez (fgimenez) wrote :

PASSED: Continuous integration, rev:634
http://10.55.60.183:8080/job/snappy-rolling-ci/22/
Executed test runs:

Click here to trigger a rebuild:
http://10.55.60.183:8080/job/snappy-rolling-ci/22/rebuild

review: Approve (continuous-integration)
Leo Arias (elopio) wrote :

sorry, ignore the spirit of federico. I'm going to shut down this jenkins and start a new one.

Snappy Tarmac (snappydevtarmac) wrote :

PASSED: Continuous integration, rev:634
$BUILD_URL
Executed test runs:

Click here to trigger a rebuild:
$BUILD_URL/rebuild

review: Approve (continuous-integration)
Leo Arias (elopio) wrote :

damn it with this url.

lp:~chipaca/snappy/schmideload updated on 2015-08-21
635. By John Lenton on 2015-08-21

oops, package version sorting chunks things around numbers; remove numbers from "random" versions.

636. By John Lenton on 2015-08-21

fix tests of random string

Michael Vogt (mvo) wrote :

Looks good, thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'helpers/helpers.go'
2--- helpers/helpers.go 2015-07-01 21:09:59 +0000
3+++ helpers/helpers.go 2015-08-21 12:14:29 +0000
4@@ -261,9 +261,10 @@
5 return fileInfo.IsDir()
6 }
7
8+const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxy"
9+
10 // MakeRandomString returns a random string of length length
11 func MakeRandomString(length int) string {
12- var letters = "abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXY"
13
14 out := ""
15 for i := 0; i < length; i++ {
16@@ -273,6 +274,19 @@
17 return out
18 }
19
20+// NewSideloadVersion returns a version number such that later calls
21+// should return versions that compare larger.
22+func NewSideloadVersion() string {
23+ n := time.Now().UTC().UnixNano()
24+ bs := make([]byte, 12)
25+ for i := 11; i >= 0; i-- {
26+ bs[i] = letters[n&31]
27+ n = n >> 5
28+ }
29+
30+ return string(bs)
31+}
32+
33 // AtomicWriteFile updates the filename atomically and works otherwise
34 // exactly like io/ioutil.WriteFile()
35 func AtomicWriteFile(filename string, data []byte, perm os.FileMode) (err error) {
36
37=== modified file 'helpers/helpers_test.go'
38--- helpers/helpers_test.go 2015-07-01 18:27:44 +0000
39+++ helpers/helpers_test.go 2015-08-21 12:14:29 +0000
40@@ -215,10 +215,10 @@
41 rand.Seed(1)
42
43 s1 := MakeRandomString(10)
44- c.Assert(s1, Equals, "GMWjGsAPga")
45+ c.Assert(s1, Equals, "gmwJgSapGA")
46
47 s2 := MakeRandomString(5)
48- c.Assert(s2, Equals, "TlmOD")
49+ c.Assert(s2, Equals, "tLMod")
50 }
51
52 func (ts *HTestSuite) TestAtomicWriteFile(c *C) {
53
54=== modified file 'snappy/click.go'
55--- snappy/click.go 2015-07-29 00:58:34 +0000
56+++ snappy/click.go 2015-08-21 12:14:29 +0000
57@@ -471,21 +471,7 @@
58 return dir[len(globalRootDir):]
59 }
60
61-func checkPackageForNameClashes(baseDir string) error {
62- m, err := parsePackageYamlFile(filepath.Join(baseDir, "meta", "package.yaml"))
63- if err != nil {
64- return err
65- }
66-
67- return m.checkForNameClashes()
68-}
69-
70-func addPackageServices(baseDir string, inhibitHooks bool, inter interacter) error {
71- m, err := parsePackageYamlFile(filepath.Join(baseDir, "meta", "package.yaml"))
72- if err != nil {
73- return err
74- }
75-
76+func (m *packageYaml) addPackageServices(baseDir string, inhibitHooks bool, inter interacter) error {
77 for _, service := range m.ServiceYamls {
78 aaProfile, err := getSecurityProfile(m, service.Name, baseDir)
79 if err != nil {
80@@ -547,11 +533,7 @@
81 return nil
82 }
83
84-func removePackageServices(baseDir string, inter interacter) error {
85- m, err := parsePackageYamlFile(filepath.Join(baseDir, "meta", "package.yaml"))
86- if err != nil {
87- return err
88- }
89+func (m *packageYaml) removePackageServices(baseDir string, inter interacter) error {
90 sysd := systemd.New(globalRootDir, inter)
91 for _, service := range m.ServiceYamls {
92 serviceName := filepath.Base(generateServiceFileName(m, service))
93@@ -589,12 +571,7 @@
94 return nil
95 }
96
97-func addPackageBinaries(baseDir string) error {
98- m, err := parsePackageYamlFile(filepath.Join(baseDir, "meta", "package.yaml"))
99- if err != nil {
100- return err
101- }
102-
103+func (m *packageYaml) addPackageBinaries(baseDir string) error {
104 if err := os.MkdirAll(snapBinariesDir, 0755); err != nil {
105 return err
106 }
107@@ -622,11 +599,7 @@
108 return nil
109 }
110
111-func removePackageBinaries(baseDir string) error {
112- m, err := parsePackageYamlFile(filepath.Join(baseDir, "meta", "package.yaml"))
113- if err != nil {
114- return err
115- }
116+func (m *packageYaml) removePackageBinaries(baseDir string) error {
117 for _, binary := range m.Binaries {
118 os.Remove(generateBinaryName(m, binary))
119 }
120@@ -634,7 +607,7 @@
121 return nil
122 }
123
124-func addOneSecurityPolicy(m *packageYaml, name string, sd SecurityDefinitions, baseDir string) error {
125+func (m *packageYaml) addOneSecurityPolicy(name string, sd SecurityDefinitions, baseDir string) error {
126 profileName, err := getSecurityProfile(m, filepath.Base(name), baseDir)
127 if err != nil {
128 return err
129@@ -658,13 +631,13 @@
130 // it all here
131
132 for _, svc := range m.ServiceYamls {
133- if err := addOneSecurityPolicy(m, svc.Name, svc.SecurityDefinitions, baseDir); err != nil {
134+ if err := m.addOneSecurityPolicy(svc.Name, svc.SecurityDefinitions, baseDir); err != nil {
135 return err
136 }
137 }
138
139 for _, bin := range m.Binaries {
140- if err := addOneSecurityPolicy(m, bin.Name, bin.SecurityDefinitions, baseDir); err != nil {
141+ if err := m.addOneSecurityPolicy(bin.Name, bin.SecurityDefinitions, baseDir); err != nil {
142 return err
143 }
144 }
145@@ -672,7 +645,7 @@
146 return nil
147 }
148
149-func removeOneSecurityPolicy(m *packageYaml, name, baseDir string) error {
150+func (m *packageYaml) removeOneSecurityPolicy(name, baseDir string) error {
151 profileName, err := getSecurityProfile(m, filepath.Base(name), baseDir)
152 if err != nil {
153 return err
154@@ -688,13 +661,13 @@
155 func (m *packageYaml) removeSecurityPolicy(baseDir string) error {
156 // TODO: move apparmor policy removal here
157 for _, service := range m.ServiceYamls {
158- if err := removeOneSecurityPolicy(m, service.Name, baseDir); err != nil {
159+ if err := m.removeOneSecurityPolicy(service.Name, baseDir); err != nil {
160 return err
161 }
162 }
163
164 for _, binary := range m.Binaries {
165- if err := removeOneSecurityPolicy(m, binary.Name, baseDir); err != nil {
166+ if err := m.removeOneSecurityPolicy(binary.Name, baseDir); err != nil {
167 return err
168 }
169 }
170@@ -724,6 +697,10 @@
171 cm.Name = fmt.Sprintf("%s.%s", cm.Name, origin)
172 }
173
174+ if origin == sideloadedOrigin {
175+ cm.Version = filepath.Base(filepath.Join(clickMetaDir, "..", ".."))
176+ }
177+
178 outStr, err := json.MarshalIndent(cm, "", " ")
179 if err != nil {
180 return err
181
182=== modified file 'snappy/click_test.go'
183--- snappy/click_test.go 2015-07-29 00:58:34 +0000
184+++ snappy/click_test.go 2015-08-21 12:14:29 +0000
185@@ -1134,8 +1134,10 @@
186
187 yamlFile, err := makeInstalledMockSnap(s.tempdir, "")
188 c.Assert(err, IsNil)
189+ m, err := parsePackageYamlFile(yamlFile)
190+ c.Assert(err, IsNil)
191 baseDir := filepath.Dir(filepath.Dir(yamlFile))
192- err = addPackageServices(baseDir, false, nil)
193+ err = m.addPackageServices(baseDir, false, nil)
194 c.Assert(err, IsNil)
195
196 content, err := ioutil.ReadFile(filepath.Join(s.tempdir, "/etc/systemd/system/hello-app_svc1_1.10.service"))
197@@ -1161,8 +1163,10 @@
198 `
199 yamlFile, err := makeInstalledMockSnap(s.tempdir, yaml)
200 c.Assert(err, IsNil)
201+ m, err := parsePackageYamlFile(yamlFile)
202+ c.Assert(err, IsNil)
203 baseDir := filepath.Dir(filepath.Dir(yamlFile))
204- err = addPackageServices(baseDir, false, nil)
205+ err = m.addPackageServices(baseDir, false, nil)
206 c.Assert(err, IsNil)
207
208 content, err := ioutil.ReadFile(filepath.Join(s.tempdir, "/etc/dbus-1/system.d/foo_bar_1.conf"))
209@@ -1181,8 +1185,10 @@
210 `
211 yamlFile, err := makeInstalledMockSnap(s.tempdir, yaml)
212 c.Assert(err, IsNil)
213+ m, err := parsePackageYamlFile(yamlFile)
214+ c.Assert(err, IsNil)
215 baseDir := filepath.Dir(filepath.Dir(yamlFile))
216- err = addPackageServices(baseDir, false, nil)
217+ err = m.addPackageServices(baseDir, false, nil)
218 c.Assert(err, IsNil)
219
220 _, err = ioutil.ReadFile(filepath.Join(s.tempdir, "/etc/dbus-1/system.d/foo_bar_1.conf"))
221@@ -1197,8 +1203,10 @@
222
223 yamlFile, err := makeInstalledMockSnap(s.tempdir, "")
224 c.Assert(err, IsNil)
225+ m, err := parsePackageYamlFile(yamlFile)
226+ c.Assert(err, IsNil)
227 baseDir := filepath.Dir(filepath.Dir(yamlFile))
228- err = addPackageBinaries(baseDir)
229+ err = m.addPackageBinaries(baseDir)
230 c.Assert(err, IsNil)
231
232 content, err := ioutil.ReadFile(filepath.Join(s.tempdir, "/apps/bin/hello-app.hello"))
233@@ -1523,8 +1531,10 @@
234 stop-timeout: 25
235 `)
236 c.Assert(err, IsNil)
237+ m, err := parsePackageYamlFile(yamlFile)
238+ c.Assert(err, IsNil)
239 inter := &MockProgressMeter{}
240- c.Check(removePackageServices(filepath.Dir(filepath.Dir(yamlFile)), inter), IsNil)
241+ c.Check(m.removePackageServices(filepath.Dir(filepath.Dir(yamlFile)), inter), IsNil)
242 c.Assert(len(inter.notified) > 0, Equals, true)
243 c.Check(inter.notified[len(inter.notified)-1], Equals, "wat_wat_42.service refused to stop, killing.")
244 c.Assert(len(sysdLog) >= 3, Equals, true)
245
246=== modified file 'snappy/snapp.go'
247--- snappy/snapp.go 2015-07-23 11:05:37 +0000
248+++ snappy/snapp.go 2015-08-21 12:14:29 +0000
249@@ -571,6 +571,11 @@
250 if m.Type == pkg.TypeOem {
251 targetDir = snapOemDir
252 }
253+
254+ if origin == sideloadedOrigin {
255+ m.Version = helpers.NewSideloadVersion()
256+ }
257+
258 fullName := m.qualifiedName(origin)
259 instDir := filepath.Join(targetDir, fullName, m.Version)
260
261@@ -594,6 +599,10 @@
262 m: m,
263 }
264
265+ if origin == sideloadedOrigin {
266+ m.Version = filepath.Base(part.basedir)
267+ }
268+
269 // check if the part is active
270 allVersionsDir := filepath.Dir(part.basedir)
271 p, err := filepath.EvalSymlinks(filepath.Join(allVersionsDir, "current"))
272@@ -658,6 +667,10 @@
273
274 // Version returns the version
275 func (s *SnapPart) Version() string {
276+ if s.basedir != "" {
277+ return filepath.Base(s.basedir)
278+ }
279+
280 return s.m.Version
281 }
282
283@@ -988,11 +1001,11 @@
284 }
285
286 // add the "binaries:" from the package.yaml
287- if err := addPackageBinaries(s.basedir); err != nil {
288+ if err := s.m.addPackageBinaries(s.basedir); err != nil {
289 return err
290 }
291 // add the "services:" from the package.yaml
292- if err := addPackageServices(s.basedir, inhibitHooks, inter); err != nil {
293+ if err := s.m.addPackageServices(s.basedir, inhibitHooks, inter); err != nil {
294 return err
295 }
296
297@@ -1020,11 +1033,11 @@
298 }
299
300 // remove generated services, binaries, clickHooks, security policy
301- if err := removePackageBinaries(s.basedir); err != nil {
302+ if err := s.m.removePackageBinaries(s.basedir); err != nil {
303 return err
304 }
305
306- if err := removePackageServices(s.basedir, inter); err != nil {
307+ if err := s.m.removePackageServices(s.basedir, inter); err != nil {
308 return err
309 }
310
311
312=== modified file 'snappy/sort_test.go'
313--- snappy/sort_test.go 2015-06-02 20:46:07 +0000
314+++ snappy/sort_test.go 2015-08-21 12:14:29 +0000
315@@ -22,6 +22,8 @@
316 import (
317 "sort"
318
319+ "launchpad.net/snappy/helpers"
320+
321 . "gopkg.in/check.v1"
322 )
323
324@@ -88,3 +90,14 @@
325 c.Assert(snaps[0].Version(), Equals, "1.0")
326 c.Assert(snaps[1].Version(), Equals, "2.0")
327 }
328+
329+func (s *SortTestSuite) TestSideloadVersion(c *C) {
330+ n := 1000
331+ vs := make(ByVersion, n)
332+
333+ for i := 0; i < n; i++ {
334+ vs[i] = helpers.NewSideloadVersion()
335+ }
336+
337+ c.Check(sort.IsSorted(vs), Equals, true)
338+}

Subscribers

People subscribed via source and target branches