Merge lp:~sergiusens/snappy/installFactorX into lp:~snappy-dev/snappy/snappy-moved-to-github

Proposed by Sergio Schvezov on 2015-04-13
Status: Merged
Approved by: John Lenton on 2015-04-13
Approved revision: 341
Merged at revision: 339
Proposed branch: lp:~sergiusens/snappy/installFactorX
Merge into: lp:~snappy-dev/snappy/snappy-moved-to-github
Diff against target: 225 lines (+61/-38)
5 files modified
cmd/snappy/cmd_install.go (+8/-7)
progress/progress.go (+1/-1)
snappy/install.go (+15/-19)
snappy/install_test.go (+7/-11)
snappy/parts.go (+30/-0)
To merge this branch: bzr merge lp:~sergiusens/snappy/installFactorX
Reviewer Review Type Date Requested Status
John Lenton 2015-04-13 Approve on 2015-04-13
Review via email: mp+256042@code.launchpad.net

Commit Message

Refactor Install to take a progress.Meter

To post a comment you must log in.
lp:~sergiusens/snappy/installFactorX updated on 2015-04-13
340. By Sergio Schvezov on 2015-04-13

Renaming variables

341. By Sergio Schvezov on 2015-04-13

Removing panic

John Lenton (chipaca) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'cmd/snappy/cmd_install.go'
2--- cmd/snappy/cmd_install.go 2015-04-13 02:35:57 +0000
3+++ cmd/snappy/cmd_install.go 2015-04-13 22:40:19 +0000
4@@ -23,6 +23,7 @@
5 "os"
6
7 "launchpad.net/snappy/priv"
8+ "launchpad.net/snappy/progress"
9 "launchpad.net/snappy/snappy"
10 )
11
12@@ -44,11 +45,11 @@
13 }
14
15 func (x *cmdInstall) Execute(args []string) (err error) {
16- possiblepkgName := x.Positional.PackageName
17+ pkgName := x.Positional.PackageName
18 configFile := x.Positional.ConfigFile
19
20 // FIXME patch goflags to allow for specific n required positional arguments
21- if possiblepkgName == "" {
22+ if pkgName == "" {
23 return errors.New("package name is required")
24 }
25
26@@ -66,18 +67,18 @@
27 flags |= snappy.AllowUnauthenticated
28 }
29
30- fmt.Printf("Installing %s\n", possiblepkgName)
31- var pkgName string
32+ fmt.Printf("Installing %s\n", pkgName)
33
34- pkgName, err = snappy.Install(possiblepkgName, flags)
35+ pbar := progress.NewTextProgress(pkgName)
36+ realPkgName, err := snappy.Install(pkgName, flags, pbar)
37 if err == snappy.ErrPackageNotFound {
38- return fmt.Errorf("No package '%s' for %s", possiblepkgName, ubuntuCoreChannel())
39+ return fmt.Errorf("No package '%s' for %s", pkgName, ubuntuCoreChannel())
40 } else if err != nil {
41 return err
42 }
43
44 if configFile != "" {
45- if _, err := configurePackage(pkgName, configFile); err != nil {
46+ if _, err := configurePackage(realPkgName, configFile); err != nil {
47 return err
48 }
49 }
50
51=== modified file 'progress/progress.go'
52--- progress/progress.go 2015-04-07 11:43:27 +0000
53+++ progress/progress.go 2015-04-13 22:40:19 +0000
54@@ -75,7 +75,7 @@
55
56 // Write does nothing
57 func (t *NullProgress) Write(p []byte) (n int, err error) {
58- return n, nil
59+ return len(p), nil
60 }
61
62 // Notify does nothing
63
64=== modified file 'snappy/install.go'
65--- snappy/install.go 2015-04-13 20:52:12 +0000
66+++ snappy/install.go 2015-04-13 22:40:19 +0000
67@@ -64,8 +64,8 @@
68
69 // Install the givens snap names provided via args. This can be local
70 // files or snaps that are queried from the store
71-func Install(name string, flags InstallFlags) (string, error) {
72- name, err := doInstall(name, flags)
73+func Install(name string, flags InstallFlags, meter progress.Meter) (string, error) {
74+ name, err := doInstall(name, flags, meter)
75 if err != nil {
76 return "", logger.LogError(err)
77 }
78@@ -73,7 +73,7 @@
79 return name, logger.LogError(GarbageCollect(name, flags))
80 }
81
82-func doInstall(name string, flags InstallFlags) (string, error) {
83+func doInstall(name string, flags InstallFlags, meter progress.Meter) (string, error) {
84 // consume local parts
85 if fi, err := os.Stat(name); err == nil && fi.Mode().IsRegular() {
86 // we allow unauthenticated package when in developer
87@@ -82,27 +82,23 @@
88 flags |= AllowUnauthenticated
89 }
90
91- pbar := progress.NewTextProgress(name)
92- return installClick(name, flags, pbar)
93+ return installClick(name, flags, meter)
94 }
95
96 // check repos next
97- m := NewMetaRepository()
98- found, _ := m.Details(name)
99+ mStore := NewMetaStoreRepository()
100+ installed, err := NewMetaLocalRepository().Installed()
101+ if err != nil {
102+ return "", err
103+ }
104+
105+ found, _ := mStore.Details(name)
106 for _, part := range found {
107- // act only on parts that are downloadable
108- if !part.IsInstalled() {
109- installed, err := m.Installed()
110- if err != nil {
111- return "", err
112- }
113- cur := FindSnapByNameAndVersion(part.Name(), part.Version(), installed)
114- if cur != nil {
115- return "", ErrAlreadyInstalled
116- }
117- pbar := progress.NewTextProgress(part.Name())
118- return part.Install(pbar, flags)
119+ cur := FindSnapByNameAndVersion(part.Name(), part.Version(), installed)
120+ if cur != nil {
121+ return "", ErrAlreadyInstalled
122 }
123+ return part.Install(meter, flags)
124 }
125
126 return "", ErrPackageNotFound
127
128=== modified file 'snappy/install_test.go'
129--- snappy/install_test.go 2015-04-13 02:35:57 +0000
130+++ snappy/install_test.go 2015-04-13 22:40:19 +0000
131@@ -27,6 +27,7 @@
132
133 . "launchpad.net/gocheck"
134 "launchpad.net/snappy/helpers"
135+ "launchpad.net/snappy/progress"
136 )
137
138 func makeCloudInitMetaData(c *C, content string) string {
139@@ -54,7 +55,7 @@
140
141 func (s *SnapTestSuite) TestInstallInstall(c *C) {
142 snapFile := makeTestSnapPackage(c, "")
143- name, err := Install(snapFile, AllowUnauthenticated|DoInstallGC)
144+ name, err := Install(snapFile, AllowUnauthenticated|DoInstallGC, &progress.NullProgress{})
145 c.Assert(err, IsNil)
146 c.Check(name, Equals, "foo")
147 }
148@@ -71,15 +72,15 @@
149 vendor: Foo Bar <foo@example.com>
150 `
151 snapFile := makeTestSnapPackage(c, packageYaml+"version: 1.0")
152- _, err = Install(snapFile, flags)
153+ _, err = Install(snapFile, flags, &progress.NullProgress{})
154 c.Assert(err, IsNil)
155
156 snapFile = makeTestSnapPackage(c, packageYaml+"version: 2.0")
157- _, err = Install(snapFile, flags)
158+ _, err = Install(snapFile, flags, &progress.NullProgress{})
159 c.Assert(err, IsNil)
160
161 snapFile = makeTestSnapPackage(c, packageYaml+"version: 3.0")
162- _, err = Install(snapFile, flags)
163+ _, err = Install(snapFile, flags, &progress.NullProgress{})
164 c.Assert(err, IsNil)
165 }
166
167@@ -129,15 +130,10 @@
168 c.Assert(mockServer, NotNil)
169 defer mockServer.Close()
170
171- // ugh, progress bars from tests
172- stdout := os.Stdout
173- defer func() { os.Stdout = stdout }()
174- os.Stdout = nil
175-
176- name, err := Install("foo", 0)
177+ name, err := Install("foo", 0, &progress.NullProgress{})
178 c.Assert(err, IsNil)
179 c.Check(name, Equals, "foo")
180
181- _, err = Install("foo", 0)
182+ _, err = Install("foo", 0, &progress.NullProgress{})
183 c.Assert(err, Equals, ErrAlreadyInstalled)
184 }
185
186=== modified file 'snappy/parts.go'
187--- snappy/parts.go 2015-04-13 03:48:11 +0000
188+++ snappy/parts.go 2015-04-13 22:40:19 +0000
189@@ -112,6 +112,36 @@
190 all []Repository
191 }
192
193+// NewMetaStoreRepository returns a MetaRepository of stores
194+func NewMetaStoreRepository() *MetaRepository {
195+ m := new(MetaRepository)
196+ m.all = []Repository{}
197+
198+ if repo := NewUbuntuStoreSnapRepository(); repo != nil {
199+ m.all = append(m.all, repo)
200+ }
201+
202+ return m
203+}
204+
205+// NewMetaLocalRepository returns a MetaRepository of stores
206+func NewMetaLocalRepository() *MetaRepository {
207+ m := new(MetaRepository)
208+ m.all = []Repository{}
209+
210+ if repo := NewSystemImageRepository(); repo != nil {
211+ m.all = append(m.all, repo)
212+ }
213+ if repo := NewLocalSnapRepository(snapAppsDir); repo != nil {
214+ m.all = append(m.all, repo)
215+ }
216+ if repo := NewLocalSnapRepository(snapOemDir); repo != nil {
217+ m.all = append(m.all, repo)
218+ }
219+
220+ return m
221+}
222+
223 // NewMetaRepository returns a new MetaRepository
224 func NewMetaRepository() *MetaRepository {
225 // FIXME: make this a configuration file

Subscribers

People subscribed via source and target branches