veyron/{tools,services/mgmt}/build: fix for https://code.google.com/p/envyor/issues/detail?id=252
Change-Id: I415971f347971c59c592fb5c2702986506f5020a
diff --git a/services/mgmt/build/impl/invoker.go b/services/mgmt/build/impl/invoker.go
index ee62f28..22f9f24 100644
--- a/services/mgmt/build/impl/invoker.go
+++ b/services/mgmt/build/impl/invoker.go
@@ -2,7 +2,6 @@
import (
"bytes"
- "errors"
"fmt"
"io/ioutil"
"os"
@@ -13,12 +12,13 @@
"veyron2/ipc"
"veyron2/services/mgmt/binary"
"veyron2/services/mgmt/build"
+ "veyron2/verror"
"veyron2/vlog"
)
var (
- errBuildFailed = errors.New("build failed")
- errInternalError = errors.New("internal error")
+ errBuildFailed = verror.Internalf("build failed")
+ errInternalError = verror.Internalf("internal error")
)
// invoker holds the state of a build server invocation.
@@ -56,9 +56,9 @@
vlog.Errorf("MkdirAll(%v, %v) failed: %v", srcDir, dirPerm, err)
return nil, errInternalError
}
- rStream := stream.RecvStream()
- for rStream.Advance() {
- srcFile := rStream.Value()
+ iterator := stream.RecvStream()
+ for iterator.Advance() {
+ srcFile := iterator.Value()
filePath := filepath.Join(srcDir, filepath.FromSlash(srcFile.Name))
dir := filepath.Dir(filePath)
if err := os.MkdirAll(dir, dirPerm); err != nil {
@@ -70,9 +70,8 @@
return nil, errInternalError
}
}
-
- if err := rStream.Err(); err != nil {
- vlog.Errorf("rStream failed: %v", err)
+ if err := iterator.Err(); err != nil {
+ vlog.Errorf("Advance() failed: %v", err)
return nil, errInternalError
}
cmd := exec.Command(i.gobin, "install", "-v", "...")
diff --git a/tools/build/impl/impl_test.go b/tools/build/impl/impl_test.go
index c4bdba1..6cd6311 100644
--- a/tools/build/impl/impl_test.go
+++ b/tools/build/impl/impl_test.go
@@ -12,13 +12,23 @@
"veyron2/rt"
"veyron2/services/mgmt/binary"
"veyron2/services/mgmt/build"
+ "veyron2/verror"
"veyron2/vlog"
)
+var errInternalError = verror.Internalf("internal error")
+
type mock struct{}
-func (mock) Build(_ ipc.ServerContext, arch build.Architecture, opsys build.OperatingSystem, _ build.BuilderServiceBuildStream) ([]byte, error) {
+func (mock) Build(_ ipc.ServerContext, arch build.Architecture, opsys build.OperatingSystem, stream build.BuilderServiceBuildStream) ([]byte, error) {
vlog.VI(2).Infof("Build(%v, %v) was called", arch, opsys)
+ iterator := stream.RecvStream()
+ for iterator.Advance() {
+ }
+ if err := iterator.Err(); err != nil {
+ vlog.Errorf("Advance() failed: %v", err)
+ return nil, errInternalError
+ }
return nil, nil
}