| 
					
				 | 
			
			
				@@ -314,25 +314,50 @@ func (s *composeService) makeSyncFn(ctx context.Context, project *types.Project, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			case <-ctx.Done(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			case opt := <-needSync: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if fi, statErr := os.Stat(opt.HostPath); statErr == nil && !fi.IsDir() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					err := s.Copy(ctx, project.Name, api.CopyOptions{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						Source:      opt.HostPath, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						Destination: fmt.Sprintf("%s:%s", opt.Service, opt.ContainerPath), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				service, err := project.GetService(opt.Service) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				scale := 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if service.Deploy != nil && service.Deploy.Replicas != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					scale = int(*service.Deploy.Replicas) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if fi, statErr := os.Stat(opt.HostPath); statErr == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if fi.IsDir() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						for i := 1; i <= scale; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							_, err := s.Exec(ctx, project.Name, api.RunOptions{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								Service: opt.Service, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								Command: []string{"mkdir", "-p", opt.ContainerPath}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								Index:   i, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								logrus.Warnf("failed to create %q from %s: %v", opt.ContainerPath, opt.Service, err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						fmt.Fprintf(s.stdinfo(), "%s created\n", opt.ContainerPath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						err := s.Copy(ctx, project.Name, api.CopyOptions{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Source:      opt.HostPath, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Destination: fmt.Sprintf("%s:%s", opt.Service, opt.ContainerPath), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						fmt.Fprintf(s.stdinfo(), "%s updated\n", opt.ContainerPath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					fmt.Fprintf(s.stdinfo(), "%s updated\n", opt.ContainerPath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} else if errors.Is(statErr, fs.ErrNotExist) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_, err := s.Exec(ctx, project.Name, api.RunOptions{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						Service: opt.Service, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						Command: []string{"rm", "-rf", opt.ContainerPath}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						Index:   1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						logrus.Warnf("failed to delete %q from %s: %v", opt.ContainerPath, opt.Service, err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					for i := 1; i <= scale; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_, err := s.Exec(ctx, project.Name, api.RunOptions{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Service: opt.Service, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Command: []string{"rm", "-rf", opt.ContainerPath}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Index:   i, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							logrus.Warnf("failed to delete %q from %s: %v", opt.ContainerPath, opt.Service, err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					fmt.Fprintf(s.stdinfo(), "%s deleted from container\n", opt.ContainerPath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					fmt.Fprintf(s.stdinfo(), "%s deleted from service\n", opt.ContainerPath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 |