Browse code

Use logs instead of attach for builder

Signed-off-by: Alexandr Morozov <lk4d4@docker.com>

Alexandr Morozov authored on 2014/10/07 01:41:22
Showing 2 changed files
... ...
@@ -24,7 +24,6 @@ import (
24 24
 	"github.com/docker/docker/pkg/archive"
25 25
 	"github.com/docker/docker/pkg/log"
26 26
 	"github.com/docker/docker/pkg/parsers"
27
-	"github.com/docker/docker/pkg/promise"
28 27
 	"github.com/docker/docker/pkg/symlink"
29 28
 	"github.com/docker/docker/pkg/system"
30 29
 	"github.com/docker/docker/pkg/tarsum"
... ...
@@ -512,25 +511,19 @@ func (b *Builder) create() (*daemon.Container, error) {
512 512
 }
513 513
 
514 514
 func (b *Builder) run(c *daemon.Container) error {
515
-	var errCh chan error
516
-	if b.Verbose {
517
-		errCh = promise.Go(func() error {
518
-			// FIXME: call the 'attach' job so that daemon.Attach can be made private
519
-			//
520
-			// FIXME (LK4D4): Also, maybe makes sense to call "logs" job, it is like attach
521
-			// but without hijacking for stdin. Also, with attach there can be race
522
-			// condition because of some output already was printed before it.
523
-			return <-b.Daemon.Attach(&c.StreamConfig, c.Config.OpenStdin, c.Config.StdinOnce, c.Config.Tty, nil, nil, b.OutStream, b.ErrStream)
524
-		})
525
-	}
526
-
527 515
 	//start the container
528 516
 	if err := c.Start(); err != nil {
529 517
 		return err
530 518
 	}
531 519
 
532
-	if errCh != nil {
533
-		if err := <-errCh; err != nil {
520
+	if b.Verbose {
521
+		logsJob := b.Engine.Job("logs", c.ID)
522
+		logsJob.Setenv("follow", "1")
523
+		logsJob.Setenv("stdout", "1")
524
+		logsJob.Setenv("stderr", "1")
525
+		logsJob.Stdout.Add(b.OutStream)
526
+		logsJob.Stderr.Add(b.ErrStream)
527
+		if err := logsJob.Run(); err != nil {
534 528
 			return err
535 529
 		}
536 530
 	}
... ...
@@ -2752,3 +2752,22 @@ func TestBuildVerifySingleQuoteFails(t *testing.T) {
2752 2752
 
2753 2753
 	logDone("build - verify single quotes fail")
2754 2754
 }
2755
+
2756
+func TestBuildVerboseOut(t *testing.T) {
2757
+	name := "testbuildverboseout"
2758
+	defer deleteImages(name)
2759
+
2760
+	_, out, err := buildImageWithOut(name,
2761
+		`FROM busybox
2762
+RUN echo 123`,
2763
+		false)
2764
+
2765
+	if err != nil {
2766
+		t.Fatal(err)
2767
+	}
2768
+	if !strings.Contains(out, "\n123\n") {
2769
+		t.Fatalf("Output should contain %q: %q", "123", out)
2770
+	}
2771
+
2772
+	logDone("build - verbose output from commands")
2773
+}