Merge lp:~dave-cheney/juju-core/102-cmd-init-context into lp:~juju/juju-core/trunk

Proposed by Dave Cheney
Status: Work in progress
Proposed branch: lp:~dave-cheney/juju-core/102-cmd-init-context
Merge into: lp:~juju/juju-core/trunk
Diff against target: 797 lines (+91/-75)
43 files modified
cmd/cmd.go (+2/-2)
cmd/filevar.go (+11/-2)
cmd/juju/addunit.go (+1/-1)
cmd/juju/addunit_test.go (+3/-2)
cmd/juju/bootstrap.go (+1/-1)
cmd/juju/cmd_test.go (+19/-18)
cmd/juju/deploy.go (+2/-2)
cmd/juju/deploy_test.go (+3/-2)
cmd/juju/destroyenvironment.go (+1/-1)
cmd/juju/expose.go (+1/-1)
cmd/juju/expose_test.go (+3/-2)
cmd/juju/get.go (+1/-1)
cmd/juju/set.go (+3/-3)
cmd/juju/status.go (+1/-1)
cmd/juju/unexpose.go (+1/-1)
cmd/juju/unexpose_test.go (+3/-2)
cmd/juju/upgradejuju.go (+1/-1)
cmd/juju/upgradejuju_test.go (+6/-4)
cmd/jujuc/main_test.go (+1/-1)
cmd/jujuc/server/config-get.go (+1/-1)
cmd/jujuc/server/config-get_test.go (+1/-1)
cmd/jujuc/server/juju-log.go (+1/-1)
cmd/jujuc/server/juju-log_test.go (+1/-1)
cmd/jujuc/server/ports.go (+1/-1)
cmd/jujuc/server/ports_test.go (+1/-1)
cmd/jujuc/server/relation-get.go (+1/-1)
cmd/jujuc/server/relation-ids.go (+1/-1)
cmd/jujuc/server/relation-list.go (+1/-1)
cmd/jujuc/server/relation-set.go (+1/-1)
cmd/jujuc/server/relation-set_test.go (+1/-1)
cmd/jujuc/server/server_test.go (+1/-1)
cmd/jujuc/server/unit-get.go (+1/-1)
cmd/jujuc/server/unit-get_test.go (+2/-2)
cmd/jujud/bootstrap.go (+1/-1)
cmd/jujud/machine.go (+1/-1)
cmd/jujud/provisioning.go (+1/-1)
cmd/jujud/unit.go (+1/-1)
cmd/jujud/util_test.go (+1/-1)
cmd/jujud/version.go (+1/-1)
cmd/output_test.go (+1/-1)
cmd/supercommand.go (+2/-2)
cmd/supercommand_test.go (+2/-2)
cmd/util_test.go (+1/-1)
To merge this branch: bzr merge lp:~dave-cheney/juju-core/102-cmd-init-context
Reviewer Review Type Date Requested Status
The Go Language Gophers Pending
Review via email: mp+124899@code.launchpad.net

Description of the change

cmd: add cmd.Context to command.Init

Pass cmd.Context to command.Init. This is mostly unused, although most invocations of command.Run do not use their Context either.

https://codereview.appspot.com/6532045/

To post a comment you must log in.
Revision history for this message
William Reade (fwereade) wrote :

If I were implementing it I think I would have gone for something more
like c.Config.Open(ctx) inside Run, but I can't come up with a really
convincing case for that being *better*. (OK, it'd be less work, but the
work's already done.) So: LGTM.

https://codereview.appspot.com/6532045/

Unmerged revisions

519. By Dave Cheney

context strawman

518. By Dave Cheney

add context to command.init

517. By Dave Cheney

cmd/juju: add juju set subcommand

This proposal only includes the command parsing, a following CL
will include --config parsing and config updating.

R=fwereade
CC=
https://codereview.appspot.com/6494131

516. By Aram Hăvărneanu

mstate: add services watcher

R=niemeyer
CC=
https://codereview.appspot.com/6496132

515. By Dave Cheney

mstate: fix ssh tests

Wait until the sshd process is listening before returning from sshDaemon()

R=rog
CC=
https://codereview.appspot.com/6497146

514. By Gustavo Niemeyer

mstate/watcher: fix trivial test race

R=dfc
CC=
https://codereview.appspot.com/6499126

513. By William Reade

update mstate charm usage

Service/Unit now have charm-related methods that match state

R=niemeyer
CC=
https://codereview.appspot.com/6506124

512. By Aram Hăvărneanu

mstate: improve error reporting in watcher test

R=niemeyer
CC=
https://codereview.appspot.com/6492131

511. By Aram Hăvărneanu

mstate: add machines watcher

R=niemeyer
CC=
https://codereview.appspot.com/6496131

510. By Dave Cheney

cmd: add FileVar flag and use it

PyJuJu had a nice construct that allowed a flag that was a file, or more
specifically the contents of a file to be handled nicely. As deploy ended
up implementing this, and I need it now for juju set, it made sense to
pretty it up.

R=niemeyer
CC=
https://codereview.appspot.com/6490121

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'cmd/cmd.go'
2--- cmd/cmd.go 2012-09-10 03:51:34 +0000
3+++ cmd/cmd.go 2012-09-18 11:54:19 +0000
4@@ -24,7 +24,7 @@
5
6 // Init initializes the Command before running. The command may add options
7 // to f before processing args.
8- Init(f *gnuflag.FlagSet, args []string) error
9+ Init(f *gnuflag.FlagSet, args []string, ctx *Context) error
10
11 // Run will execute the Command as directed by the options and positional
12 // arguments passed to Init.
13@@ -100,7 +100,7 @@
14 func Main(c Command, ctx *Context, args []string) int {
15 f := gnuflag.NewFlagSet(c.Info().Name, gnuflag.ContinueOnError)
16 f.SetOutput(ioutil.Discard)
17- if err := c.Init(f, args); err != nil {
18+ if err := c.Init(f, args, ctx); err != nil {
19 if err == gnuflag.ErrHelp {
20 ctx.Stderr.Write(c.Info().Help(f))
21 return 0
22
23=== modified file 'cmd/filevar.go'
24--- cmd/filevar.go 2012-09-17 14:05:50 +0000
25+++ cmd/filevar.go 2012-09-18 11:54:19 +0000
26@@ -3,19 +3,22 @@
27 import (
28 "io"
29 "os"
30+
31+ "launchpad.net/gnuflag"
32 )
33
34 // FileVar represents a path to a file. If the flag is
35 // valid FileVar.ReadCloser will be non nil and FileVar
36 // will be usable as an io.ReadCloser.
37 type FileVar struct {
38+ ctx *Context
39 io.ReadCloser
40 Path string
41 }
42
43-// Set opens the file.
44+// Set opens the file, resolving the path relative to Context.Dir
45 func (f *FileVar) Set(v string) error {
46- file, err := os.Open(v)
47+ file, err := os.Open(f.ctx.AbsPath(v))
48 if err != nil {
49 return err
50 }
51@@ -28,3 +31,9 @@
52 func (f *FileVar) String() string {
53 return f.Path
54 }
55+
56+// AddFlags injects the command line flags into f.
57+func (f *FileVar) AddFlags(fs *gnuflag.FlagSet, name, desc string, ctx *Context) {
58+ f.ctx = ctx
59+ fs.Var(f, name, desc)
60+}
61
62=== modified file 'cmd/juju/addunit.go'
63--- cmd/juju/addunit.go 2012-09-03 17:35:44 +0000
64+++ cmd/juju/addunit.go 2012-09-18 11:54:19 +0000
65@@ -19,7 +19,7 @@
66 return &cmd.Info{"add-unit", "", "add a service unit", ""}
67 }
68
69-func (c *AddUnitCommand) Init(f *gnuflag.FlagSet, args []string) error {
70+func (c *AddUnitCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
71 addEnvironFlags(&c.EnvName, f)
72 f.IntVar(&c.NumUnits, "n", 1, "number of service units to add")
73 f.IntVar(&c.NumUnits, "num-units", 1, "")
74
75=== modified file 'cmd/juju/addunit_test.go'
76--- cmd/juju/addunit_test.go 2012-09-12 22:31:00 +0000
77+++ cmd/juju/addunit_test.go 2012-09-18 11:54:19 +0000
78@@ -16,9 +16,10 @@
79
80 func runAddUnit(c *C, args ...string) error {
81 com := &AddUnitCommand{}
82- err := com.Init(newFlagSet(), args)
83+ ctx := &cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}}
84+ err := com.Init(newFlagSet(), args, ctx)
85 c.Assert(err, IsNil)
86- return com.Run(&cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}})
87+ return com.Run(ctx)
88 }
89
90 func (s *AddUnitSuite) TestAddUnit(c *C) {
91
92=== modified file 'cmd/juju/bootstrap.go'
93--- cmd/juju/bootstrap.go 2012-09-03 14:07:19 +0000
94+++ cmd/juju/bootstrap.go 2012-09-18 11:54:19 +0000
95@@ -17,7 +17,7 @@
96 return &cmd.Info{"bootstrap", "", "start up an environment from scratch", ""}
97 }
98
99-func (c *BootstrapCommand) Init(f *gnuflag.FlagSet, args []string) error {
100+func (c *BootstrapCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
101 addEnvironFlags(&c.EnvName, f)
102 f.BoolVar(&c.UploadTools, "upload-tools", false, "upload local version of tools before bootstrapping")
103 if err := f.Parse(true, args); err != nil {
104
105=== modified file 'cmd/juju/cmd_test.go'
106--- cmd/juju/cmd_test.go 2012-09-17 15:30:34 +0000
107+++ cmd/juju/cmd_test.go 2012-09-18 11:54:19 +0000
108@@ -1,9 +1,9 @@
109 package main
110
111 import (
112+ "bytes"
113 "net/http"
114 "os"
115- "path/filepath"
116 "reflect"
117
118 "launchpad.net/gnuflag"
119@@ -52,7 +52,7 @@
120 // testInit checks that a command initialises correctly
121 // with the given set of arguments.
122 func testInit(c *C, com cmd.Command, args []string, errPat string) {
123- err := com.Init(newFlagSet(), args)
124+ err := com.Init(newFlagSet(), args, nil)
125 if errPat != "" {
126 c.Assert(err, ErrorMatches, errPat)
127 } else {
128@@ -113,14 +113,15 @@
129 go func() {
130 // signal that we're done with this ops channel.
131 defer dummy.Listen(nil)
132+ ctx := cmd.DefaultContext()
133
134- err := com.Init(newFlagSet(), args)
135+ err := com.Init(newFlagSet(), args, ctx)
136 if err != nil {
137 errc <- err
138 return
139 }
140
141- err = com.Run(cmd.DefaultContext())
142+ err = com.Run(ctx)
143 errc <- err
144 }()
145 return
146@@ -213,9 +214,9 @@
147 }
148 }
149
150-func initDeployCommand(args ...string) (*DeployCommand, error) {
151+func initDeployCommand(ctx *cmd.Context, args ...string) (*DeployCommand, error) {
152 com := &DeployCommand{}
153- return com, com.Init(newFlagSet(), args)
154+ return com, com.Init(newFlagSet(), args, ctx)
155 }
156
157 func (*CmdSuite) TestDeployCommandInit(c *C) {
158@@ -224,31 +225,31 @@
159
160 for _, t := range deployTests {
161 initExpectations(t.com)
162- com, err := initDeployCommand(t.args...)
163+ com, err := initDeployCommand(nil, t.args...)
164 c.Assert(err, IsNil)
165 c.Assert(com, DeepEquals, t.com)
166 }
167
168 // test --config path
169- dir := c.MkDir()
170- path := filepath.Join(dir, "testconfig.yaml")
171+ ctx := &cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}}
172+ path := ctx.AbsPath("testconfig.yaml")
173 file, err := os.Create(path)
174 c.Assert(err, IsNil)
175 file.Close()
176- com, err := initDeployCommand("--config", path, "charm-name")
177+ com, err := initDeployCommand(ctx, "--config", path, "charm-name")
178 c.Assert(err, IsNil)
179 defer com.Config.Close()
180 c.Assert(com.Config.Path, Equals, path)
181 c.Assert(com.Config.ReadCloser, NotNil)
182
183 // missing args
184- _, err = initDeployCommand()
185+ _, err = initDeployCommand(ctx)
186 c.Assert(err, ErrorMatches, "no charm specified")
187
188 // bad unit count
189- _, err = initDeployCommand("charm-name", "--num-units", "0")
190+ _, err = initDeployCommand(ctx, "charm-name", "--num-units", "0")
191 c.Assert(err, ErrorMatches, "must deploy at least one unit")
192- _, err = initDeployCommand("charm-name", "-n", "0")
193+ _, err = initDeployCommand(ctx, "charm-name", "-n", "0")
194 c.Assert(err, ErrorMatches, "must deploy at least one unit")
195
196 // environment tested elsewhere
197@@ -256,7 +257,7 @@
198
199 func initAddUnitCommand(args ...string) (*AddUnitCommand, error) {
200 com := &AddUnitCommand{}
201- return com, com.Init(newFlagSet(), args)
202+ return com, com.Init(newFlagSet(), args, nil)
203 }
204
205 func (*CmdSuite) TestAddUnitCommandInit(c *C) {
206@@ -275,7 +276,7 @@
207
208 func initExposeCommand(args ...string) (*ExposeCommand, error) {
209 com := &ExposeCommand{}
210- return com, com.Init(newFlagSet(), args)
211+ return com, com.Init(newFlagSet(), args, nil)
212 }
213
214 func (*CmdSuite) TestExposeCommandInit(c *C) {
215@@ -288,7 +289,7 @@
216
217 func initUnexposeCommand(args ...string) (*UnexposeCommand, error) {
218 com := &UnexposeCommand{}
219- return com, com.Init(newFlagSet(), args)
220+ return com, com.Init(newFlagSet(), args, nil)
221 }
222
223 func (*CmdSuite) TestUnexposeCommandInit(c *C) {
224@@ -301,7 +302,7 @@
225
226 func initGetCommand(args ...string) (*GetCommand, error) {
227 com := &GetCommand{}
228- return com, com.Init(newFlagSet(), args)
229+ return com, com.Init(newFlagSet(), args, nil)
230 }
231
232 func (*CmdSuite) TestGetCommandInit(c *C) {
233@@ -312,7 +313,7 @@
234
235 func initSetCommand(args ...string) (*SetCommand, error) {
236 com := &SetCommand{}
237- return com, com.Init(newFlagSet(), args)
238+ return com, com.Init(newFlagSet(), args, nil)
239 }
240
241 func (*CmdSuite) TestSetCommandInit(c *C) {
242
243=== modified file 'cmd/juju/deploy.go'
244--- cmd/juju/deploy.go 2012-09-17 14:05:50 +0000
245+++ cmd/juju/deploy.go 2012-09-18 11:54:19 +0000
246@@ -46,13 +46,13 @@
247 }
248 }
249
250-func (c *DeployCommand) Init(f *gnuflag.FlagSet, args []string) error {
251+func (c *DeployCommand) Init(f *gnuflag.FlagSet, args []string, ctx *cmd.Context) error {
252 addEnvironFlags(&c.EnvName, f)
253 f.IntVar(&c.NumUnits, "n", 1, "number of service units to deploy for principal charms")
254 f.IntVar(&c.NumUnits, "num-units", 1, "")
255 f.BoolVar(&c.BumpRevision, "u", false, "increment local charm directory revision")
256 f.BoolVar(&c.BumpRevision, "upgrade", false, "")
257- f.Var(&c.Config, "config", "path to yaml-formatted service config")
258+ c.Config.AddFlags(f, "config", "path to yaml-formatted service config", ctx)
259 f.StringVar(&c.RepoPath, "repository", os.Getenv("JUJU_REPOSITORY"), "local charm repository")
260 // TODO --constraints
261 if err := f.Parse(true, args); err != nil {
262
263=== modified file 'cmd/juju/deploy_test.go'
264--- cmd/juju/deploy_test.go 2012-09-12 22:31:00 +0000
265+++ cmd/juju/deploy_test.go 2012-09-18 11:54:19 +0000
266@@ -111,9 +111,10 @@
267
268 func runDeploy(c *C, args ...string) error {
269 com := &DeployCommand{}
270- err := com.Init(newFlagSet(), args)
271+ ctx := &cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}}
272+ err := com.Init(newFlagSet(), args, ctx)
273 c.Assert(err, IsNil)
274- return com.Run(&cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}})
275+ return com.Run(ctx)
276 }
277
278 func (s *DeploySuite) TestCharmDir(c *C) {
279
280=== modified file 'cmd/juju/destroyenvironment.go'
281--- cmd/juju/destroyenvironment.go 2012-09-06 10:44:58 +0000
282+++ cmd/juju/destroyenvironment.go 2012-09-18 11:54:19 +0000
283@@ -19,7 +19,7 @@
284 }
285 }
286
287-func (c *DestroyEnvironmentCommand) Init(f *gnuflag.FlagSet, args []string) error {
288+func (c *DestroyEnvironmentCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
289 addEnvironFlags(&c.EnvName, f)
290 if err := f.Parse(true, args); err != nil {
291 return err
292
293=== modified file 'cmd/juju/expose.go'
294--- cmd/juju/expose.go 2012-09-03 17:35:44 +0000
295+++ cmd/juju/expose.go 2012-09-18 11:54:19 +0000
296@@ -18,7 +18,7 @@
297 return &cmd.Info{"expose", "", "expose a service", ""}
298 }
299
300-func (c *ExposeCommand) Init(f *gnuflag.FlagSet, args []string) error {
301+func (c *ExposeCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
302 addEnvironFlags(&c.EnvName, f)
303 if err := f.Parse(true, args); err != nil {
304 return err
305
306=== modified file 'cmd/juju/expose_test.go'
307--- cmd/juju/expose_test.go 2012-09-12 22:31:00 +0000
308+++ cmd/juju/expose_test.go 2012-09-18 11:54:19 +0000
309@@ -16,9 +16,10 @@
310
311 func runExpose(c *C, args ...string) error {
312 com := &ExposeCommand{}
313- err := com.Init(newFlagSet(), args)
314+ ctx := &cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}}
315+ err := com.Init(newFlagSet(), args, ctx)
316 c.Assert(err, IsNil)
317- return com.Run(&cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}})
318+ return com.Run(ctx)
319 }
320
321 func (s *ExposeSuite) assertExposed(c *C, service string) {
322
323=== modified file 'cmd/juju/get.go'
324--- cmd/juju/get.go 2012-09-14 05:28:04 +0000
325+++ cmd/juju/get.go 2012-09-18 11:54:19 +0000
326@@ -21,7 +21,7 @@
327 return &cmd.Info{"get", "", "get service config options", ""}
328 }
329
330-func (c *GetCommand) Init(f *gnuflag.FlagSet, args []string) error {
331+func (c *GetCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
332 addEnvironFlags(&c.EnvName, f)
333 // TODO(dfc) add json formatting ?
334 c.out.AddFlags(f, "yaml", map[string]cmd.Formatter{
335
336=== modified file 'cmd/juju/set.go'
337--- cmd/juju/set.go 2012-09-13 07:22:45 +0000
338+++ cmd/juju/set.go 2012-09-18 11:54:19 +0000
339@@ -14,7 +14,7 @@
340 EnvName string
341 ServiceName string
342 Options []Option
343- ConfPath string
344+ Config cmd.FileVar
345 }
346
347 type Option struct {
348@@ -25,9 +25,9 @@
349 return &cmd.Info{"set", "", "set service config options", ""}
350 }
351
352-func (c *SetCommand) Init(f *gnuflag.FlagSet, args []string) error {
353+func (c *SetCommand) Init(f *gnuflag.FlagSet, args []string, ctx *cmd.Context) error {
354 addEnvironFlags(&c.EnvName, f)
355- f.StringVar(&c.ConfPath, "config", "", "path to yaml-formatted service config")
356+ c.Config.AddFlags(f, "config", "path to yaml-formatted service config", ctx)
357 if err := f.Parse(true, args); err != nil {
358 return err
359 }
360
361=== modified file 'cmd/juju/status.go'
362--- cmd/juju/status.go 2012-09-04 14:26:44 +0000
363+++ cmd/juju/status.go 2012-09-18 11:54:19 +0000
364@@ -24,7 +24,7 @@
365 }
366 }
367
368-func (c *StatusCommand) Init(f *gnuflag.FlagSet, args []string) error {
369+func (c *StatusCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
370 addEnvironFlags(&c.EnvName, f)
371 c.out.AddFlags(f, "yaml", map[string]cmd.Formatter{
372 "yaml": cmd.FormatYaml,
373
374=== modified file 'cmd/juju/unexpose.go'
375--- cmd/juju/unexpose.go 2012-09-03 17:35:44 +0000
376+++ cmd/juju/unexpose.go 2012-09-18 11:54:19 +0000
377@@ -18,7 +18,7 @@
378 return &cmd.Info{"unexpose", "", "unexpose a service", ""}
379 }
380
381-func (c *UnexposeCommand) Init(f *gnuflag.FlagSet, args []string) error {
382+func (c *UnexposeCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
383 addEnvironFlags(&c.EnvName, f)
384 if err := f.Parse(true, args); err != nil {
385 return err
386
387=== modified file 'cmd/juju/unexpose_test.go'
388--- cmd/juju/unexpose_test.go 2012-09-12 22:31:00 +0000
389+++ cmd/juju/unexpose_test.go 2012-09-18 11:54:19 +0000
390@@ -16,9 +16,10 @@
391
392 func runUnexpose(c *C, args ...string) error {
393 com := &UnexposeCommand{}
394- err := com.Init(newFlagSet(), args)
395+ ctx := &cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}}
396+ err := com.Init(newFlagSet(), args, ctx)
397 c.Assert(err, IsNil)
398- return com.Run(&cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}})
399+ return com.Run(ctx)
400 }
401
402 func (s *UnexposeSuite) assertExposed(c *C, service string, expected bool) {
403
404=== modified file 'cmd/juju/upgradejuju.go'
405--- cmd/juju/upgradejuju.go 2012-09-12 17:15:00 +0000
406+++ cmd/juju/upgradejuju.go 2012-09-18 11:54:19 +0000
407@@ -28,7 +28,7 @@
408 return &cmd.Info{"upgrade-juju", "", "upgrade the tools in a juju environment", ""}
409 }
410
411-func (c *UpgradeJujuCommand) Init(f *gnuflag.FlagSet, args []string) error {
412+func (c *UpgradeJujuCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
413 addEnvironFlags(&c.EnvName, f)
414 var vers string
415 f.BoolVar(&c.UploadTools, "upload-tools", false, "upload local version of tools")
416
417=== modified file 'cmd/juju/upgradejuju_test.go'
418--- cmd/juju/upgradejuju_test.go 2012-09-12 17:15:00 +0000
419+++ cmd/juju/upgradejuju_test.go 2012-09-18 11:54:19 +0000
420@@ -164,12 +164,13 @@
421
422 // Run the command
423 com := &UpgradeJujuCommand{}
424- err = com.Init(newFlagSet(), test.args)
425+ ctx := &cmd.Context{c.MkDir(), nil, ioutil.Discard, ioutil.Discard}
426+ err = com.Init(newFlagSet(), test.args, ctx)
427 if test.expectInitErr != "" {
428 c.Check(err, ErrorMatches, test.expectInitErr)
429 continue
430 }
431- err = com.Run(&cmd.Context{c.MkDir(), nil, ioutil.Discard, ioutil.Discard})
432+ err = com.Run(ctx)
433 if test.expectErr != "" {
434 c.Check(err, ErrorMatches, test.expectErr)
435 continue
436@@ -212,9 +213,10 @@
437 func (s *UpgradeJujuSuite) TestUpgradeJujuWithRealPutTools(c *C) {
438 s.Reset(c)
439 com := &UpgradeJujuCommand{}
440- err := com.Init(newFlagSet(), []string{"--upload-tools", "--dev"})
441+ ctx := &cmd.Context{c.MkDir(), nil, ioutil.Discard, ioutil.Discard}
442+ err := com.Init(newFlagSet(), []string{"--upload-tools", "--dev"}, ctx)
443 c.Assert(err, IsNil)
444- err = com.Run(&cmd.Context{c.MkDir(), nil, ioutil.Discard, ioutil.Discard})
445+ err = com.Run(ctx)
446 c.Assert(err, IsNil)
447 p := environs.ToolsStoragePath(version.Current)
448 r, err := s.Conn.Environ.Storage().Get(p)
449
450=== modified file 'cmd/jujuc/main_test.go'
451--- cmd/jujuc/main_test.go 2012-08-07 16:23:28 +0000
452+++ cmd/jujuc/main_test.go 2012-09-18 11:54:19 +0000
453@@ -49,7 +49,7 @@
454 "remote", "", "test jujuc", "here is some documentation"}
455 }
456
457-func (c *RemoteCommand) Init(f *gnuflag.FlagSet, args []string) error {
458+func (c *RemoteCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
459 f.StringVar(&c.msg, "error", "", "if set, fail")
460 if err := f.Parse(true, args); err != nil {
461 return err
462
463=== modified file 'cmd/jujuc/server/config-get.go'
464--- cmd/jujuc/server/config-get.go 2012-07-31 21:36:59 +0000
465+++ cmd/jujuc/server/config-get.go 2012-09-18 11:54:19 +0000
466@@ -24,7 +24,7 @@
467 }
468 }
469
470-func (c *ConfigGetCommand) Init(f *gnuflag.FlagSet, args []string) error {
471+func (c *ConfigGetCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
472 c.out.AddFlags(f, "smart", cmd.DefaultFormatters)
473 if err := f.Parse(true, args); err != nil {
474 return err
475
476=== modified file 'cmd/jujuc/server/config-get_test.go'
477--- cmd/jujuc/server/config-get_test.go 2012-07-31 21:36:59 +0000
478+++ cmd/jujuc/server/config-get_test.go 2012-09-18 11:54:19 +0000
479@@ -97,6 +97,6 @@
480 hctx := s.GetHookContext(c, -1, "")
481 com, err := hctx.NewCommand("config-get")
482 c.Assert(err, IsNil)
483- err = com.Init(dummyFlagSet(), []string{"multiple", "keys"})
484+ err = com.Init(dummyFlagSet(), []string{"multiple", "keys"}, nil)
485 c.Assert(err, ErrorMatches, `unrecognized args: \["keys"\]`)
486 }
487
488=== modified file 'cmd/jujuc/server/juju-log.go'
489--- cmd/jujuc/server/juju-log.go 2012-08-06 16:41:17 +0000
490+++ cmd/jujuc/server/juju-log.go 2012-09-18 11:54:19 +0000
491@@ -23,7 +23,7 @@
492 return &cmd.Info{"juju-log", "<message>", "write a message to the juju log", ""}
493 }
494
495-func (c *JujuLogCommand) Init(f *gnuflag.FlagSet, args []string) error {
496+func (c *JujuLogCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
497 f.BoolVar(&c.Debug, "debug", false, "log at debug level")
498 if err := f.Parse(true, args); err != nil {
499 return err
500
501=== modified file 'cmd/jujuc/server/juju-log_test.go'
502--- cmd/jujuc/server/juju-log_test.go 2012-08-01 15:48:38 +0000
503+++ cmd/jujuc/server/juju-log_test.go 2012-09-18 11:54:19 +0000
504@@ -82,6 +82,6 @@
505 ctx := &server.HookContext{}
506 com, err := ctx.NewCommand("juju-log")
507 c.Assert(err, IsNil)
508- err = com.Init(dummyFlagSet(), nil)
509+ err = com.Init(dummyFlagSet(), nil, nil)
510 c.Assert(err, ErrorMatches, "no message specified")
511 }
512
513=== modified file 'cmd/jujuc/server/ports.go'
514--- cmd/jujuc/server/ports.go 2012-07-30 14:30:00 +0000
515+++ cmd/jujuc/server/ports.go 2012-09-18 11:54:19 +0000
516@@ -28,7 +28,7 @@
517 return fmt.Errorf(`port must be in the range [1, 65535]; got "%v"`, value)
518 }
519
520-func (c *portCommand) Init(f *gnuflag.FlagSet, args []string) error {
521+func (c *portCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
522 if err := f.Parse(true, args); err != nil {
523 return err
524 }
525
526=== modified file 'cmd/jujuc/server/ports_test.go'
527--- cmd/jujuc/server/ports_test.go 2012-07-30 14:30:00 +0000
528+++ cmd/jujuc/server/ports_test.go 2012-09-18 11:54:19 +0000
529@@ -58,7 +58,7 @@
530 hctx := s.GetHookContext(c, -1, "")
531 com, err := hctx.NewCommand(name)
532 c.Assert(err, IsNil)
533- err = com.Init(dummyFlagSet(), t.args)
534+ err = com.Init(dummyFlagSet(), t.args, nil)
535 c.Assert(err, ErrorMatches, t.err)
536 }
537 }
538
539=== modified file 'cmd/jujuc/server/relation-get.go'
540--- cmd/jujuc/server/relation-get.go 2012-08-07 14:22:28 +0000
541+++ cmd/jujuc/server/relation-get.go 2012-09-18 11:54:19 +0000
542@@ -34,7 +34,7 @@
543 }
544 }
545
546-func (c *RelationGetCommand) Init(f *gnuflag.FlagSet, args []string) error {
547+func (c *RelationGetCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
548 // TODO FWER implement --format shell lp:1033511
549 c.out.AddFlags(f, "smart", cmd.DefaultFormatters)
550 f.Var(c.relationIdValue(&c.RelationId), "r", "specify a relation by id")
551
552=== modified file 'cmd/jujuc/server/relation-ids.go'
553--- cmd/jujuc/server/relation-ids.go 2012-08-07 12:41:54 +0000
554+++ cmd/jujuc/server/relation-ids.go 2012-09-18 11:54:19 +0000
555@@ -30,7 +30,7 @@
556 }
557 }
558
559-func (c *RelationIdsCommand) Init(f *gnuflag.FlagSet, args []string) error {
560+func (c *RelationIdsCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
561 c.out.AddFlags(f, "smart", cmd.DefaultFormatters)
562 if err := f.Parse(true, args); err != nil {
563 return err
564
565=== modified file 'cmd/jujuc/server/relation-list.go'
566--- cmd/jujuc/server/relation-list.go 2012-08-07 14:22:28 +0000
567+++ cmd/jujuc/server/relation-list.go 2012-09-18 11:54:19 +0000
568@@ -29,7 +29,7 @@
569 }
570 }
571
572-func (c *RelationListCommand) Init(f *gnuflag.FlagSet, args []string) (err error) {
573+func (c *RelationListCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) (err error) {
574 c.out.AddFlags(f, "smart", cmd.DefaultFormatters)
575 if err := f.Parse(true, args); err != nil {
576 return err
577
578=== modified file 'cmd/jujuc/server/relation-set.go'
579--- cmd/jujuc/server/relation-set.go 2012-08-07 14:22:28 +0000
580+++ cmd/jujuc/server/relation-set.go 2012-09-18 11:54:19 +0000
581@@ -24,7 +24,7 @@
582 }
583 }
584
585-func (c *RelationSetCommand) Init(f *gnuflag.FlagSet, args []string) error {
586+func (c *RelationSetCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
587 f.Var(c.relationIdValue(&c.RelationId), "r", "specify a relation by id")
588 if err := f.Parse(true, args); err != nil {
589 return err
590
591=== modified file 'cmd/jujuc/server/relation-set_test.go'
592--- cmd/jujuc/server/relation-set_test.go 2012-08-07 14:22:28 +0000
593+++ cmd/jujuc/server/relation-set_test.go 2012-09-18 11:54:19 +0000
594@@ -152,7 +152,7 @@
595 hctx := s.GetHookContext(c, t.ctxrelid, "")
596 com, err := hctx.NewCommand("relation-set")
597 c.Assert(err, IsNil)
598- err = com.Init(dummyFlagSet(), t.args)
599+ err = com.Init(dummyFlagSet(), t.args, nil)
600 if t.err == "" {
601 c.Assert(err, IsNil)
602 rset := com.(*server.RelationSetCommand)
603
604=== modified file 'cmd/jujuc/server/server_test.go'
605--- cmd/jujuc/server/server_test.go 2012-08-18 09:09:37 +0000
606+++ cmd/jujuc/server/server_test.go 2012-09-18 11:54:19 +0000
607@@ -24,7 +24,7 @@
608 return &cmd.Info{"remote", "", "act at a distance", "blah doc"}
609 }
610
611-func (c *RpcCommand) Init(f *gnuflag.FlagSet, args []string) error {
612+func (c *RpcCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
613 f.StringVar(&c.Value, "value", "", "doc")
614 f.BoolVar(&c.Slow, "slow", false, "doc")
615 if err := f.Parse(true, args); err != nil {
616
617=== modified file 'cmd/jujuc/server/unit-get.go'
618--- cmd/jujuc/server/unit-get.go 2012-07-31 21:36:59 +0000
619+++ cmd/jujuc/server/unit-get.go 2012-09-18 11:54:19 +0000
620@@ -24,7 +24,7 @@
621 }
622 }
623
624-func (c *UnitGetCommand) Init(f *gnuflag.FlagSet, args []string) error {
625+func (c *UnitGetCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
626 c.out.AddFlags(f, "smart", cmd.DefaultFormatters)
627 if err := f.Parse(true, args); err != nil {
628 return err
629
630=== modified file 'cmd/jujuc/server/unit-get_test.go'
631--- cmd/jujuc/server/unit-get_test.go 2012-07-31 21:36:59 +0000
632+++ cmd/jujuc/server/unit-get_test.go 2012-09-18 11:54:19 +0000
633@@ -83,7 +83,7 @@
634 hctx := s.GetHookContext(c, -1, "")
635 com, err := hctx.NewCommand("unit-get")
636 c.Assert(err, IsNil)
637- err = com.Init(dummyFlagSet(), []string{"protected-address"})
638+ err = com.Init(dummyFlagSet(), []string{"protected-address"}, nil)
639 c.Assert(err, ErrorMatches, `unknown setting "protected-address"`)
640 }
641
642@@ -91,6 +91,6 @@
643 hctx := s.GetHookContext(c, -1, "")
644 com, err := hctx.NewCommand("unit-get")
645 c.Assert(err, IsNil)
646- err = com.Init(dummyFlagSet(), []string{"private-address", "blah"})
647+ err = com.Init(dummyFlagSet(), []string{"private-address", "blah"}, nil)
648 c.Assert(err, ErrorMatches, `unrecognized args: \["blah"\]`)
649 }
650
651=== modified file 'cmd/jujud/bootstrap.go'
652--- cmd/jujud/bootstrap.go 2012-09-09 20:10:46 +0000
653+++ cmd/jujud/bootstrap.go 2012-09-18 11:54:19 +0000
654@@ -21,7 +21,7 @@
655 }
656
657 // Init initializes the command for running.
658-func (c *BootstrapCommand) Init(f *gnuflag.FlagSet, args []string) error {
659+func (c *BootstrapCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
660 stateInfoVar(f, &c.StateInfo, "zookeeper-servers", []string{"127.0.0.1:2181"}, "address of zookeeper to initialize")
661 f.StringVar(&c.InstanceId, "instance-id", "", "instance id of this machine")
662 yamlBase64Var(f, &c.EnvConfig, "env-config", "", "initial environment configuration (yaml, base64 encoded)")
663
664=== modified file 'cmd/jujud/machine.go'
665--- cmd/jujud/machine.go 2012-09-12 15:35:55 +0000
666+++ cmd/jujud/machine.go 2012-09-18 11:54:19 +0000
667@@ -25,7 +25,7 @@
668 }
669
670 // Init initializes the command for running.
671-func (a *MachineAgent) Init(f *gnuflag.FlagSet, args []string) error {
672+func (a *MachineAgent) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
673 a.Conf.addFlags(f)
674 f.IntVar(&a.MachineId, "machine-id", -1, "id of the machine to run")
675 if err := f.Parse(true, args); err != nil {
676
677=== modified file 'cmd/jujud/provisioning.go'
678--- cmd/jujud/provisioning.go 2012-08-27 23:27:57 +0000
679+++ cmd/jujud/provisioning.go 2012-09-18 11:54:19 +0000
680@@ -31,7 +31,7 @@
681 }
682
683 // Init initializes the command for running.
684-func (a *ProvisioningAgent) Init(f *gnuflag.FlagSet, args []string) error {
685+func (a *ProvisioningAgent) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
686 a.Conf.addFlags(f)
687 if err := f.Parse(true, args); err != nil {
688 return err
689
690=== modified file 'cmd/jujud/unit.go'
691--- cmd/jujud/unit.go 2012-09-12 17:26:56 +0000
692+++ cmd/jujud/unit.go 2012-09-18 11:54:19 +0000
693@@ -25,7 +25,7 @@
694 }
695
696 // Init initializes the command for running.
697-func (a *UnitAgent) Init(f *gnuflag.FlagSet, args []string) error {
698+func (a *UnitAgent) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
699 a.Conf.addFlags(f)
700 f.StringVar(&a.UnitName, "unit-name", "", "name of the unit to run")
701 if err := f.Parse(true, args); err != nil {
702
703=== modified file 'cmd/jujud/util_test.go'
704--- cmd/jujud/util_test.go 2012-09-12 17:10:28 +0000
705+++ cmd/jujud/util_test.go 2012-09-18 11:54:19 +0000
706@@ -12,7 +12,7 @@
707 func initCmd(c cmd.Command, args []string) error {
708 f := gnuflag.NewFlagSet("", gnuflag.ContinueOnError)
709 f.SetOutput(ioutil.Discard)
710- return c.Init(f, args)
711+ return c.Init(f, args, nil)
712 }
713
714 // CheckAgentCommand is a utility function for verifying that common agent
715
716=== modified file 'cmd/jujud/version.go'
717--- cmd/jujud/version.go 2012-08-16 17:09:22 +0000
718+++ cmd/jujud/version.go 2012-09-18 11:54:19 +0000
719@@ -15,7 +15,7 @@
720 return &cmd.Info{"version", "", "print the current version", ""}
721 }
722
723-func (v *VersionCommand) Init(f *gnuflag.FlagSet, args []string) error {
724+func (v *VersionCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
725 v.out.AddFlags(f, "smart", cmd.DefaultFormatters)
726 if err := f.Parse(true, args); err != nil {
727 return err
728
729=== modified file 'cmd/output_test.go'
730--- cmd/output_test.go 2012-08-07 16:23:28 +0000
731+++ cmd/output_test.go 2012-09-18 11:54:19 +0000
732@@ -16,7 +16,7 @@
733 return &cmd.Info{"output", "<something>", "I like to output", "output"}
734 }
735
736-func (c *OutputCommand) Init(f *gnuflag.FlagSet, args []string) error {
737+func (c *OutputCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
738 c.out.AddFlags(f, "smart", cmd.DefaultFormatters)
739 if err := f.Parse(true, args); err != nil {
740 return err
741
742=== modified file 'cmd/supercommand.go'
743--- cmd/supercommand.go 2012-05-18 09:52:31 +0000
744+++ cmd/supercommand.go 2012-09-18 11:54:19 +0000
745@@ -75,7 +75,7 @@
746 }
747
748 // Init initializes the command for running.
749-func (c *SuperCommand) Init(f *gnuflag.FlagSet, args []string) error {
750+func (c *SuperCommand) Init(f *gnuflag.FlagSet, args []string, ctx *Context) error {
751 if c.Log != nil {
752 c.Log.AddFlags(f)
753 }
754@@ -90,7 +90,7 @@
755 if c.subcmd, found = c.subcmds[subargs[0]]; !found {
756 return fmt.Errorf("unrecognized command: %s %s", c.Info().Name, subargs[0])
757 }
758- return c.subcmd.Init(f, subargs[1:])
759+ return c.subcmd.Init(f, subargs[1:], ctx)
760 }
761
762 // Run executes the subcommand that was selected in Init.
763
764=== modified file 'cmd/supercommand_test.go'
765--- cmd/supercommand_test.go 2012-06-21 20:40:39 +0000
766+++ cmd/supercommand_test.go 2012-09-18 11:54:19 +0000
767@@ -10,7 +10,7 @@
768 jc := &cmd.SuperCommand{Name: "jujutest"}
769 tc := &TestCommand{Name: "defenestrate"}
770 jc.Register(tc)
771- return jc, tc, jc.Init(dummyFlagSet(), args)
772+ return jc, tc, jc.Init(dummyFlagSet(), args, nil)
773 }
774
775 type SuperCommandSuite struct{}
776@@ -19,7 +19,7 @@
777
778 func (s *SuperCommandSuite) TestDispatch(c *C) {
779 jc := &cmd.SuperCommand{Name: "jujutest"}
780- err := jc.Init(dummyFlagSet(), []string{})
781+ err := jc.Init(dummyFlagSet(), []string{}, nil)
782 c.Assert(err, ErrorMatches, `no command specified`)
783 info := jc.Info()
784 c.Assert(info.Name, Equals, "jujutest")
785
786=== modified file 'cmd/util_test.go'
787--- cmd/util_test.go 2012-09-10 03:51:34 +0000
788+++ cmd/util_test.go 2012-09-18 11:54:19 +0000
789@@ -36,7 +36,7 @@
790 return &cmd.Info{c.Name, "<something>", c.Name + " the juju", c.Name + "-doc"}
791 }
792
793-func (c *TestCommand) Init(f *gnuflag.FlagSet, args []string) error {
794+func (c *TestCommand) Init(f *gnuflag.FlagSet, args []string, _ *cmd.Context) error {
795 if !c.Minimal {
796 f.StringVar(&c.Option, "option", "", "option-doc")
797 }

Subscribers

People subscribed via source and target branches