1
0
Эх сурвалжийг харах

ignore services without a build section

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 2 жил өмнө
parent
commit
313b82e94c
1 өөрчлөгдсөн 20 нэмэгдсэн , 14 устгасан
  1. 20 14
      pkg/compose/watch.go

+ 20 - 14
pkg/compose/watch.go

@@ -49,7 +49,7 @@ type Trigger struct {
 
 const quietPeriod = 2 * time.Second
 
-func (s *composeService) Watch(ctx context.Context, project *types.Project, services []string, options api.WatchOptions) error {
+func (s *composeService) Watch(ctx context.Context, project *types.Project, services []string, options api.WatchOptions) error { //nolint:gocyclo
 	needRebuild := make(chan string)
 	needSync := make(chan api.CopyOptions, 5)
 
@@ -62,27 +62,37 @@ func (s *composeService) Watch(ctx context.Context, project *types.Project, serv
 
 	eg.Go(s.makeSyncFn(ctx, project, needSync))
 
-	err := project.WithServices(services, func(service types.ServiceConfig) error {
+	ss, err := project.GetServices(services...)
+	if err != nil {
+		return err
+	}
+	for _, service := range ss {
 		config, err := loadDevelopmentConfig(service, project)
 		if err != nil {
 			return err
 		}
+		name := service.Name
 		if service.Build == nil {
-			return errors.New("can't watch a service without a build section")
+			if len(services) != 0 || len(config.Watch) != 0 {
+				// watch explicitly requested on service, but no build section set
+				return fmt.Errorf("service %s doesn't have a build section", name)
+			}
+			logrus.Infof("service %s ignored. Can't watch a service without a build section", name)
+			continue
 		}
-		context := service.Build.Context
+		bc := service.Build.Context
 
-		ignore, err := watch.LoadDockerIgnore(context)
+		ignore, err := watch.LoadDockerIgnore(bc)
 		if err != nil {
 			return err
 		}
 
-		watcher, err := watch.NewWatcher([]string{context}, ignore)
+		watcher, err := watch.NewWatcher([]string{bc}, ignore)
 		if err != nil {
 			return err
 		}
 
-		fmt.Fprintf(s.stderr(), "watching %s\n", context)
+		fmt.Fprintf(s.stderr(), "watching %s\n", bc)
 		err = watcher.Start()
 		if err != nil {
 			return err
@@ -113,11 +123,11 @@ func (s *composeService) Watch(ctx context.Context, project *types.Project, serv
 								dest := filepath.Join(trigger.Target, rel)
 								needSync <- api.CopyOptions{
 									Source:      path,
-									Destination: fmt.Sprintf("%s:%s", service.Name, dest),
+									Destination: fmt.Sprintf("%s:%s", name, dest),
 								}
 							case WatchActionRebuild:
 								logrus.Debugf("modified file %s require image to be rebuilt", path)
-								needRebuild <- service.Name
+								needRebuild <- name
 							default:
 								return fmt.Errorf("watch action %q is not supported", trigger)
 							}
@@ -126,17 +136,13 @@ func (s *composeService) Watch(ctx context.Context, project *types.Project, serv
 					}
 
 					// default
-					needRebuild <- service.Name
+					needRebuild <- name
 
 				case err := <-watcher.Errors():
 					return err
 				}
 			}
 		})
-		return nil
-	})
-	if err != nil {
-		return err
 	}
 
 	return eg.Wait()