Skip to content

Commit

Permalink
Use logs instead of attach for builder
Browse files Browse the repository at this point in the history
Signed-off-by: Alexandr Morozov <[email protected]>
  • Loading branch information
LK4D4 committed Oct 17, 2014
1 parent 04932e3 commit 6f09d06
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 15 deletions.
23 changes: 8 additions & 15 deletions builder/internals.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
"github.com/docker/docker/pkg/archive"
"github.com/docker/docker/pkg/log"
"github.com/docker/docker/pkg/parsers"
"github.com/docker/docker/pkg/promise"
"github.com/docker/docker/pkg/symlink"
"github.com/docker/docker/pkg/system"
"github.com/docker/docker/pkg/tarsum"
Expand Down Expand Up @@ -512,25 +511,19 @@ func (b *Builder) create() (*daemon.Container, error) {
}

func (b *Builder) run(c *daemon.Container) error {
var errCh chan error
if b.Verbose {
errCh = promise.Go(func() error {
// FIXME: call the 'attach' job so that daemon.Attach can be made private
//
// FIXME (LK4D4): Also, maybe makes sense to call "logs" job, it is like attach
// but without hijacking for stdin. Also, with attach there can be race
// condition because of some output already was printed before it.
return <-b.Daemon.Attach(&c.StreamConfig, c.Config.OpenStdin, c.Config.StdinOnce, c.Config.Tty, nil, nil, b.OutStream, b.ErrStream)
})
}

//start the container
if err := c.Start(); err != nil {
return err
}

if errCh != nil {
if err := <-errCh; err != nil {
if b.Verbose {
logsJob := b.Engine.Job("logs", c.ID)
logsJob.Setenv("follow", "1")
logsJob.Setenv("stdout", "1")
logsJob.Setenv("stderr", "1")
logsJob.Stdout.Add(b.OutStream)
logsJob.Stderr.Add(b.ErrStream)
if err := logsJob.Run(); err != nil {
return err
}
}
Expand Down
19 changes: 19 additions & 0 deletions integration-cli/docker_cli_build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2752,3 +2752,22 @@ func TestBuildVerifySingleQuoteFails(t *testing.T) {

logDone("build - verify single quotes fail")
}

func TestBuildVerboseOut(t *testing.T) {
name := "testbuildverboseout"
defer deleteImages(name)

_, out, err := buildImageWithOut(name,
`FROM busybox
RUN echo 123`,
false)

if err != nil {
t.Fatal(err)
}
if !strings.Contains(out, "\n123\n") {
t.Fatalf("Output should contain %q: %q", "123", out)
}

logDone("build - verbose output from commands")
}

0 comments on commit 6f09d06

Please sign in to comment.