From edab952a6823f92a53e830f5365efbfa60f1636f Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 3 Jun 2013 11:30:38 -0700 Subject: [PATCH] packer: Add Message method to Ui --- command/build/command.go | 1 + packer/rpc/ui.go | 12 ++++++++++++ packer/rpc/ui_test.go | 18 ++++++++++++++---- packer/ui.go | 22 ++++++++++++++++++---- packer/ui_test.go | 5 ++++- 5 files changed, 49 insertions(+), 9 deletions(-) diff --git a/command/build/command.go b/command/build/command.go index d631d6165..699c34875 100644 --- a/command/build/command.go +++ b/command/build/command.go @@ -63,6 +63,7 @@ func (c Command) Run(env packer.Environment, args []string) int { for _, b := range builds { buildUis[b.Name()] = &packer.PrefixedUi{ fmt.Sprintf("==> %s", b.Name()), + fmt.Sprintf("--> %s", b.Name()), env.Ui(), } } diff --git a/packer/rpc/ui.go b/packer/rpc/ui.go index 0077b02c9..02d79d7e0 100644 --- a/packer/rpc/ui.go +++ b/packer/rpc/ui.go @@ -23,6 +23,12 @@ func (u *Ui) Error(message string) { } } +func (u *Ui) Message(message string) { + if err := u.client.Call("Ui.Message", message, new(interface{})); err != nil { + panic(err) + } +} + func (u *Ui) Say(message string) { if err := u.client.Call("Ui.Say", message, new(interface{})); err != nil { panic(err) @@ -36,6 +42,12 @@ func (u *UiServer) Error(message *string, reply *interface{}) error { return nil } +func (u *UiServer) Message(message *string, reply *interface{}) error { + u.ui.Message(*message) + *reply = nil + return nil +} + func (u *UiServer) Say(message *string, reply *interface{}) error { u.ui.Say(*message) diff --git a/packer/rpc/ui_test.go b/packer/rpc/ui_test.go index 77b117151..ce877d8fe 100644 --- a/packer/rpc/ui_test.go +++ b/packer/rpc/ui_test.go @@ -7,10 +7,12 @@ import ( ) type testUi struct { - errorCalled bool - errorMessage string - sayCalled bool - sayMessage string + errorCalled bool + errorMessage string + messageCalled bool + messageMessage string + sayCalled bool + sayMessage string } func (u *testUi) Error(message string) { @@ -18,6 +20,11 @@ func (u *testUi) Error(message string) { u.errorMessage = message } +func (u *testUi) Message(message string) { + u.messageCalled = true + u.messageMessage = message +} + func (u *testUi) Say(message string) { u.sayCalled = true u.sayMessage = message @@ -46,6 +53,9 @@ func TestUiRPC(t *testing.T) { uiClient.Error("message") assert.Equal(ui.errorMessage, "message", "message should be correct") + uiClient.Message("message") + assert.Equal(ui.messageMessage, "message", "message should be correct") + uiClient.Say("message") assert.Equal(ui.sayMessage, "message", "message should be correct") } diff --git a/packer/ui.go b/packer/ui.go index 313c676e2..badee90e5 100644 --- a/packer/ui.go +++ b/packer/ui.go @@ -11,14 +11,16 @@ import ( // is formatted and various levels of output. type Ui interface { Say(string) + Message(string) Error(string) } // PrefixedUi is a UI that wraps another UI implementation and adds a // prefix to all the messages going out. type PrefixedUi struct { - Prefix string - Ui Ui + SayPrefix string + MessagePrefix string + Ui Ui } // The ReaderWriterUi is a UI that writes and reads from standard Go @@ -29,11 +31,15 @@ type ReaderWriterUi struct { } func (u *PrefixedUi) Say(message string) { - u.Ui.Say(fmt.Sprintf("%s: %s", u.Prefix, message)) + u.Ui.Say(fmt.Sprintf("%s: %s", u.SayPrefix, message)) +} + +func (u *PrefixedUi) Message(message string) { + u.Ui.Say(fmt.Sprintf("%s: %s", u.MessagePrefix, message)) } func (u *PrefixedUi) Error(message string) { - u.Ui.Error(fmt.Sprintf("%s: %s", u.Prefix, message)) + u.Ui.Error(fmt.Sprintf("%s: %s", u.SayPrefix, message)) } func (rw *ReaderWriterUi) Say(message string) { @@ -44,6 +50,14 @@ func (rw *ReaderWriterUi) Say(message string) { } } +func (rw *ReaderWriterUi) Message(message string) { + log.Printf("ui: %s", message) + _, err := fmt.Fprintf(rw.Writer, message+"\n") + if err != nil { + panic(err) + } +} + func (rw *ReaderWriterUi) Error(message string) { log.Printf("ui error: %s", message) _, err := fmt.Fprint(rw.Writer, message+"\n") diff --git a/packer/ui_test.go b/packer/ui_test.go index 46f11a338..69d480917 100644 --- a/packer/ui_test.go +++ b/packer/ui_test.go @@ -17,11 +17,14 @@ func TestPrefixedUi(t *testing.T) { assert := asserts.NewTestingAsserts(t, true) bufferUi := testUi() - prefixUi := &PrefixedUi{"mitchell", bufferUi} + prefixUi := &PrefixedUi{"mitchell", "bar", bufferUi} prefixUi.Say("foo") assert.Equal(readWriter(bufferUi), "mitchell: foo\n", "should have prefix") + prefixUi.Message("foo") + assert.Equal(readWriter(bufferUi), "bar: foo\n", "should have prefix") + prefixUi.Error("bar") assert.Equal(readWriter(bufferUi), "mitchell: bar\n", "should have prefix") }