Browse Source

avoid duplicated "xx exited with code 0" message

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 1 year ago
parent
commit
e99b8acea7
3 changed files with 12 additions and 8 deletions
  1. 9 6
      pkg/compose/printer.go
  2. 3 1
      pkg/compose/up.go
  3. 0 1
      pkg/compose/watch.go

+ 9 - 6
pkg/compose/printer.go

@@ -86,7 +86,8 @@ func (p *printer) Run(cascadeStop bool, exitCodeFrom string, stopFn func() error
 	)
 	defer p.Stop()
 
-	containers := map[string]struct{}{}
+	// containers we are tracking. Use true when container is running, false after we receive a stop|die signal
+	containers := map[string]bool{}
 	for {
 		select {
 		case <-p.stopCh:
@@ -100,18 +101,20 @@ func (p *printer) Run(cascadeStop bool, exitCodeFrom string, stopFn func() error
 				if _, ok := containers[id]; ok {
 					continue
 				}
-				containers[id] = struct{}{}
+				containers[id] = true
 				p.consumer.Register(container)
 			case api.ContainerEventExit, api.ContainerEventStopped, api.ContainerEventRecreated:
-				if !event.Restarting {
-					delete(containers, id)
-				}
-				if !aborting {
+				if !aborting && containers[id] {
 					p.consumer.Status(container, fmt.Sprintf("exited with code %d", event.ExitCode))
 					if event.Type == api.ContainerEventRecreated {
 						p.consumer.Status(container, "has been recreated")
 					}
 				}
+				containers[id] = false
+				if !event.Restarting {
+					delete(containers, id)
+				}
+
 				if cascadeStop {
 					if !aborting {
 						aborting = true

+ 3 - 1
pkg/compose/up.go

@@ -127,8 +127,10 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options
 
 	if options.Start.Watch {
 		eg.Go(func() error {
+			buildOpts := *options.Create.Build
+			buildOpts.Quiet = true
 			return s.Watch(ctx, project, options.Start.Services, api.WatchOptions{
-				Build: options.Create.Build,
+				Build: &buildOpts,
 				LogTo: options.Start.Attach,
 			})
 		})

+ 0 - 1
pkg/compose/watch.go

@@ -445,7 +445,6 @@ func (s *composeService) handleWatchBatch(ctx context.Context, project *types.Pr
 			options.LogTo.Log(api.WatchLogger, fmt.Sprintf("Rebuilding service %q after changes were detected...", serviceName))
 			// restrict the build to ONLY this service, not any of its dependencies
 			options.Build.Services = []string{serviceName}
-			options.Build.Quiet = true
 			_, err := s.build(ctx, project, *options.Build, nil)
 			if err != nil {
 				options.LogTo.Log(api.WatchLogger, fmt.Sprintf("Build failed. Error: %v", err))