Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package docker-compose for openSUSE:Factory 
checked in at 2023-07-17 19:23:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/docker-compose (Old)
 and      /work/SRC/openSUSE:Factory/.docker-compose.new.3193 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "docker-compose"

Mon Jul 17 19:23:23 2023 rev:24 rq:1098800 version:2.20.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/docker-compose/docker-compose.changes    
2023-06-30 19:59:55.466018965 +0200
+++ /work/SRC/openSUSE:Factory/.docker-compose.new.3193/docker-compose.changes  
2023-07-17 19:23:43.885892100 +0200
@@ -1,0 +2,24 @@
+Tue Jul 11 13:36:01 UTC 2023 - ka...@b1-systems.de
+
+- Update to version 2.20.0:
+  * ci: speed up a couple Dockerfile targets w/ cache mount
+  * build(deps): bump github.com/docker/buildx from 0.11.0 to
+    0.11.1
+  * test: fix process leak in wait e2e test
+  * Apply no-deps before we select and mutate target service
+  * support `attach`
+  * build(deps): bump github.com/opencontainers/image-spec
+  * build(deps): bump gotest.tools/v3 from 3.4.0 to 3.5.0
+  * build(deps): bump github.com/docker/docker
+  * deps: bump docker/cli-docs-tool to v0.6.0
+  * build(deps): bump google.golang.org/grpc from 1.56.0 to 1.56.2
+  * fix(secrets): file permission value does not comply with spec
+  * when --index is not set select first service container
+  * network: fix random missing network when service has more than
+    one
+  * don't use unitialized cli to setup DryRunClient
+  * fix some comments
+  * add support of --builder and BUILDX_BUILDER
+  * Add `docker compose wait`
+
+-------------------------------------------------------------------

Old:
----
  compose-2.19.1.obscpio

New:
----
  compose-2.20.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ docker-compose.spec ++++++
--- /var/tmp/diff_new_pack.9pR6tT/_old  2023-07-17 19:23:44.909898032 +0200
+++ /var/tmp/diff_new_pack.9pR6tT/_new  2023-07-17 19:23:44.917898078 +0200
@@ -19,7 +19,7 @@
 %define __arch_install_post export NO_BRP_STRIP_DEBUG=true
 
 Name:           docker-compose
-Version:        2.19.1
+Version:        2.20.0
 Release:        0
 Summary:        Define and run multi-container applications with Docker
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.9pR6tT/_old  2023-07-17 19:23:44.945898240 +0200
+++ /var/tmp/diff_new_pack.9pR6tT/_new  2023-07-17 19:23:44.945898240 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/docker/compose</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v2.19.1</param>
+    <param name="revision">v2.20.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
     <param name="versionrewrite-pattern">v(.*)</param>
@@ -17,7 +17,7 @@
     <param name="compression">gz</param>
   </service>
   <service name="go_modules" mode="disabled">
-    <param name="archive">compose-2.19.1.obscpio</param>
+    <param name="archive">compose-2.20.0.obscpio</param>
   </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.9pR6tT/_old  2023-07-17 19:23:44.965898356 +0200
+++ /var/tmp/diff_new_pack.9pR6tT/_new  2023-07-17 19:23:44.965898356 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/docker/compose</param>
-              <param 
name="changesrevision">c496c230710d299834cf2586d0f75066dc60d06c</param></service></servicedata>
+              <param 
name="changesrevision">e28b223650807aa24a5c7637b6ad17189fb9276c</param></service></servicedata>
 (No newline at EOF)
 

++++++ compose-2.19.1.obscpio -> compose-2.20.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/Dockerfile 
new/compose-2.20.0/Dockerfile
--- old/compose-2.19.1/Dockerfile       2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/Dockerfile       2023-07-10 19:26:41.000000000 +0200
@@ -91,6 +91,7 @@
 ARG BUILD_TAGS
 RUN --mount=type=bind,target=. \
     --mount=type=cache,target=/root/.cache \
+    --mount=type=cache,target=/go/pkg/mod \
     
--mount=from=golangci-lint,source=/usr/bin/golangci-lint,target=/usr/bin/golangci-lint
 \
     golangci-lint run --build-tags "$BUILD_TAGS" ./...
 
@@ -129,6 +130,7 @@
 WORKDIR /src
 RUN --mount=target=. \
     --mount=target=/root/.cache,type=cache \
+    --mount=type=cache,target=/go/pkg/mod \
     go build -o /out/docsgen ./docs/yaml/main/generate.go
 
 FROM --platform=${BUILDPLATFORM} alpine AS docs-build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/cmd/compose/build.go 
new/compose-2.20.0/cmd/compose/build.go
--- old/compose-2.19.1/cmd/compose/build.go     2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/cmd/compose/build.go     2023-07-10 19:26:41.000000000 
+0200
@@ -43,6 +43,7 @@
        noCache bool
        memory  cliopts.MemBytes
        ssh     string
+       builder string
 }
 
 func (opts buildOptions) toAPIBuildOptions(services []string) 
(api.BuildOptions, error) {
@@ -54,6 +55,10 @@
                        return api.BuildOptions{}, err
                }
        }
+       builderName := opts.builder
+       if builderName == "" {
+               builderName = os.Getenv("BUILDX_BUILDER")
+       }
 
        return api.BuildOptions{
                Pull:     opts.pull,
@@ -64,6 +69,7 @@
                Quiet:    opts.quiet,
                Services: services,
                SSHs:     SSHKeys,
+               Builder:  builderName,
        }, nil
 }
 
@@ -101,6 +107,7 @@
        cmd.Flags().BoolVar(&opts.pull, "pull", false, "Always attempt to pull 
a newer version of the image.")
        cmd.Flags().StringArrayVar(&opts.args, "build-arg", []string{}, "Set 
build-time variables for services.")
        cmd.Flags().StringVar(&opts.ssh, "ssh", "", "Set SSH authentications 
used when building service images. (use 'default' for using your default SSH 
Agent)")
+       cmd.Flags().StringVar(&opts.builder, "builder", "", "Set builder to 
use.")
        cmd.Flags().Bool("parallel", true, "Build images in parallel. 
DEPRECATED")
        cmd.Flags().MarkHidden("parallel") //nolint:errcheck
        cmd.Flags().Bool("compress", true, "Compress the build context using 
gzip. DEPRECATED")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/cmd/compose/compose.go 
new/compose-2.20.0/cmd/compose/compose.go
--- old/compose-2.19.1/cmd/compose/compose.go   2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/cmd/compose/compose.go   2023-07-10 19:26:41.000000000 
+0200
@@ -26,6 +26,7 @@
        "strings"
        "syscall"
 
+       "github.com/compose-spec/compose-go/dotenv"
        buildx "github.com/docker/buildx/util/progress"
        "github.com/docker/cli/cli/command"
 
@@ -431,6 +432,7 @@
                pullCommand(&opts, backend),
                createCommand(&opts, backend),
                copyCommand(&opts, backend),
+               waitCommand(&opts, backend),
                alphaCommand(&opts, backend),
        )
 
@@ -471,7 +473,7 @@
                return err
        }
 
-       envFromFile, err := 
cli.GetEnvFromFile(composegoutils.GetAsEqualsMap(os.Environ()), workingDir, 
options.EnvFiles)
+       envFromFile, err := 
dotenv.GetEnvFromFile(composegoutils.GetAsEqualsMap(os.Environ()), workingDir, 
options.EnvFiles)
        if err != nil {
                return err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/cmd/compose/cp.go 
new/compose-2.20.0/cmd/compose/cp.go
--- old/compose-2.19.1/cmd/compose/cp.go        2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/cmd/compose/cp.go        2023-07-10 19:26:41.000000000 
+0200
@@ -64,10 +64,10 @@
        }
 
        flags := copyCmd.Flags()
-       flags.IntVar(&opts.index, "index", 0, "Index of the container if there 
are multiple instances of a service .")
-       flags.BoolVar(&opts.all, "all", false, "Copy to all the containers of 
the service.")
+       flags.IntVar(&opts.index, "index", 0, "index of the container if 
service has multiple replicas")
+       flags.BoolVar(&opts.all, "all", false, "copy to all the containers of 
the service.")
        flags.MarkHidden("all")                                                 
                                                     //nolint:errcheck
-       flags.MarkDeprecated("all", "By default all the containers of the 
service will get the source file/directory to be copied.") //nolint:errcheck
+       flags.MarkDeprecated("all", "by default all the containers of the 
service will get the source file/directory to be copied.") //nolint:errcheck
        flags.BoolVarP(&opts.followLink, "follow-link", "L", false, "Always 
follow symbol link in SRC_PATH")
        flags.BoolVarP(&opts.copyUIDGID, "archive", "a", false, "Archive mode 
(copy all uid/gid information)")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/cmd/compose/exec.go 
new/compose-2.20.0/cmd/compose/exec.go
--- old/compose-2.19.1/cmd/compose/exec.go      2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/cmd/compose/exec.go      2023-07-10 19:26:41.000000000 
+0200
@@ -65,7 +65,7 @@
 
        runCmd.Flags().BoolVarP(&opts.detach, "detach", "d", false, "Detached 
mode: Run command in the background.")
        runCmd.Flags().StringArrayVarP(&opts.environment, "env", "e", 
[]string{}, "Set environment variables")
-       runCmd.Flags().IntVar(&opts.index, "index", 1, "index of the container 
if there are multiple instances of a service [default: 1].")
+       runCmd.Flags().IntVar(&opts.index, "index", 0, "index of the container 
if service has multiple replicas")
        runCmd.Flags().BoolVarP(&opts.privileged, "privileged", "", false, 
"Give extended privileges to the process.")
        runCmd.Flags().StringVarP(&opts.user, "user", "u", "", "Run the command 
as this user.")
        runCmd.Flags().BoolVarP(&opts.noTty, "no-TTY", "T", 
!streams.Out().IsTerminal(), "Disable pseudo-TTY allocation. By default `docker 
compose exec` allocates a TTY.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/cmd/compose/port.go 
new/compose-2.20.0/cmd/compose/port.go
--- old/compose-2.19.1/cmd/compose/port.go      2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/cmd/compose/port.go      2023-07-10 19:26:41.000000000 
+0200
@@ -57,7 +57,7 @@
                ValidArgsFunction: completeServiceNames(p),
        }
        cmd.Flags().StringVar(&opts.protocol, "protocol", "tcp", "tcp or udp")
-       cmd.Flags().IntVar(&opts.index, "index", 1, "index of the container if 
service has multiple replicas")
+       cmd.Flags().IntVar(&opts.index, "index", 0, "index of the container if 
service has multiple replicas")
        return cmd
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/cmd/compose/run.go 
new/compose-2.20.0/cmd/compose/run.go
--- old/compose-2.19.1/cmd/compose/run.go       2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/cmd/compose/run.go       2023-07-10 19:26:41.000000000 
+0200
@@ -63,6 +63,13 @@
 }
 
 func (options runOptions) apply(project *types.Project) error {
+       if options.noDeps {
+               err := project.ForServices([]string{options.Service}, 
types.IgnoreDependencies)
+               if err != nil {
+                       return err
+               }
+       }
+
        target, err := project.GetService(options.Service)
        if err != nil {
                return err
@@ -93,13 +100,6 @@
                }
        }
 
-       if options.noDeps {
-               err := project.ForServices([]string{options.Service}, 
types.IgnoreDependencies)
-               if err != nil {
-                       return err
-               }
-       }
-
        for i, s := range project.Services {
                if s.Name == options.Service {
                        project.Services[i] = target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/cmd/compose/up.go 
new/compose-2.20.0/cmd/compose/up.go
--- old/compose-2.19.1/cmd/compose/up.go        2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/cmd/compose/up.go        2023-07-10 19:26:41.000000000 
+0200
@@ -21,9 +21,8 @@
        "fmt"
        "time"
 
-       "github.com/docker/compose/v2/cmd/formatter"
-
        "github.com/compose-spec/compose-go/types"
+       "github.com/docker/compose/v2/cmd/formatter"
        "github.com/spf13/cobra"
 
        "github.com/docker/compose/v2/pkg/api"
@@ -164,17 +163,31 @@
                consumer = formatter.NewLogConsumer(ctx, streams.Out(), 
streams.Err(), !upOptions.noColor, !upOptions.noPrefix, upOptions.timestamp)
        }
 
-       attachTo := services
+       attachTo := utils.Set[string]{}
        if len(upOptions.attach) > 0 {
-               attachTo = upOptions.attach
+               attachTo.AddAll(upOptions.attach...)
        }
        if upOptions.attachDependencies {
-               attachTo = project.ServiceNames()
+               if err := project.WithServices(attachTo.Elements(), func(s 
types.ServiceConfig) error {
+                       if s.Attach == nil || *s.Attach {
+                               attachTo.Add(s.Name)
+                       }
+                       return nil
+               }); err != nil {
+                       return err
+               }
        }
        if len(attachTo) == 0 {
-               attachTo = project.ServiceNames()
+               if err := project.WithServices(services, func(s 
types.ServiceConfig) error {
+                       if s.Attach == nil || *s.Attach {
+                               attachTo.Add(s.Name)
+                       }
+                       return nil
+               }); err != nil {
+                       return err
+               }
        }
-       attachTo = utils.Remove(attachTo, upOptions.noAttach...)
+       attachTo.RemoveAll(upOptions.noAttach...)
 
        create := api.CreateOptions{
                Services:             services,
@@ -198,7 +211,7 @@
                Start: api.StartOptions{
                        Project:      project,
                        Attach:       consumer,
-                       AttachTo:     attachTo,
+                       AttachTo:     attachTo.Elements(),
                        ExitCodeFrom: upOptions.exitCodeFrom,
                        CascadeStop:  upOptions.cascadeStop,
                        Wait:         upOptions.wait,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/cmd/compose/wait.go 
new/compose-2.20.0/cmd/compose/wait.go
--- old/compose-2.19.1/cmd/compose/wait.go      1970-01-01 01:00:00.000000000 
+0100
+++ new/compose-2.20.0/cmd/compose/wait.go      2023-07-10 19:26:41.000000000 
+0200
@@ -0,0 +1,72 @@
+/*
+   Copyright 2023 Docker Compose CLI authors
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package compose
+
+import (
+       "context"
+       "os"
+
+       "github.com/docker/cli/cli"
+       "github.com/docker/compose/v2/pkg/api"
+       "github.com/spf13/cobra"
+)
+
+type waitOptions struct {
+       *ProjectOptions
+
+       services []string
+
+       downProject bool
+}
+
+func waitCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
+       opts := waitOptions{
+               ProjectOptions: p,
+       }
+
+       var statusCode int64
+       var err error
+       cmd := &cobra.Command{
+               Use:   "wait SERVICE [SERVICE...] [OPTIONS]",
+               Short: "Block until the first service container stops",
+               Args:  cli.RequiresMinArgs(1),
+               RunE: Adapt(func(ctx context.Context, services []string) error {
+                       opts.services = services
+                       statusCode, err = runWait(ctx, backend, &opts)
+                       return err
+               }),
+               PostRun: func(cmd *cobra.Command, args []string) {
+                       os.Exit(int(statusCode))
+               },
+       }
+
+       cmd.Flags().BoolVar(&opts.downProject, "down-project", false, "Drops 
project when the first container stops")
+
+       return cmd
+}
+
+func runWait(ctx context.Context, backend api.Service, opts *waitOptions) 
(int64, error) {
+       _, name, err := opts.projectOrName()
+       if err != nil {
+               return 0, err
+       }
+
+       return backend.Wait(ctx, name, api.WaitOptions{
+               Services:                   opts.services,
+               DownProjectOnContainerExit: opts.downProject,
+       })
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/compose.md 
new/compose-2.20.0/docs/reference/compose.md
--- old/compose-2.19.1/docs/reference/compose.md        2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/compose.md        2023-07-10 
19:26:41.000000000 +0200
@@ -7,7 +7,6 @@
 
 | Name                            | Description                                
                             |
 
|:--------------------------------|:------------------------------------------------------------------------|
-| [`alpha`](compose_alpha.md)     | Experimental commands                      
                             |
 | [`build`](compose_build.md)     | Build or rebuild services                  
                             |
 | [`config`](compose_config.md)   | Parse, resolve and render compose file in 
canonical format              |
 | [`cp`](compose_cp.md)           | Copy files/folders between a service 
container and the local filesystem |
@@ -33,6 +32,7 @@
 | [`unpause`](compose_unpause.md) | Unpause services                           
                             |
 | [`up`](compose_up.md)           | Create and start containers                
                             |
 | [`version`](compose_version.md) | Show the Docker Compose version 
information                             |
+| [`wait`](compose_wait.md)       | Block until the first service container 
stops                           |
 
 
 ### Options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/compose_build.md 
new/compose-2.20.0/docs/reference/compose_build.md
--- old/compose-2.19.1/docs/reference/compose_build.md  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/compose_build.md  2023-07-10 
19:26:41.000000000 +0200
@@ -8,6 +8,7 @@
 | Name             | Type          | Default | Description                     
                                                                            |
 
|:-----------------|:--------------|:--------|:------------------------------------------------------------------------------------------------------------|
 | `--build-arg`    | `stringArray` |         | Set build-time variables for 
services.                                                                      |
+| `--builder`      | `string`      |         | Set builder to use.             
                                                                            |
 | `--dry-run`      |               |         | Execute command in dry run mode 
                                                                            |
 | `-m`, `--memory` | `bytes`       | `0`     | Set memory limit for the build 
container. Not supported by BuildKit.                                        |
 | `--no-cache`     |               |         | Do not use cache when building 
the image                                                                    |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/compose_cp.md 
new/compose-2.20.0/docs/reference/compose_cp.md
--- old/compose-2.19.1/docs/reference/compose_cp.md     2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/compose_cp.md     2023-07-10 
19:26:41.000000000 +0200
@@ -5,12 +5,12 @@
 
 ### Options
 
-| Name                  | Type  | Default | Description                        
                                   |
-|:----------------------|:------|:--------|:----------------------------------------------------------------------|
-| `-a`, `--archive`     |       |         | Archive mode (copy all uid/gid 
information)                           |
-| `--dry-run`           |       |         | Execute command in dry run mode    
                                   |
-| `-L`, `--follow-link` |       |         | Always follow symbol link in 
SRC_PATH                                 |
-| `--index`             | `int` | `0`     | Index of the container if there 
are multiple instances of a service . |
+| Name                  | Type  | Default | Description                        
                     |
+|:----------------------|:------|:--------|:--------------------------------------------------------|
+| `-a`, `--archive`     |       |         | Archive mode (copy all uid/gid 
information)             |
+| `--dry-run`           |       |         | Execute command in dry run mode    
                     |
+| `-L`, `--follow-link` |       |         | Always follow symbol link in 
SRC_PATH                   |
+| `--index`             | `int` | `0`     | index of the container if service 
has multiple replicas |
 
 
 <!---MARKER_GEN_END-->
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/compose_exec.md 
new/compose-2.20.0/docs/reference/compose_exec.md
--- old/compose-2.19.1/docs/reference/compose_exec.md   2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/compose_exec.md   2023-07-10 
19:26:41.000000000 +0200
@@ -5,16 +5,16 @@
 
 ### Options
 
-| Name              | Type          | Default | Description                    
                                                   |
-|:------------------|:--------------|:--------|:----------------------------------------------------------------------------------|
-| `-d`, `--detach`  |               |         | Detached mode: Run command in 
the background.                                     |
-| `--dry-run`       |               |         | Execute command in dry run 
mode                                                   |
-| `-e`, `--env`     | `stringArray` |         | Set environment variables      
                                                   |
-| `--index`         | `int`         | `1`     | index of the container if 
there are multiple instances of a service [default: 1]. |
-| `-T`, `--no-TTY`  |               |         | Disable pseudo-TTY allocation. 
By default `docker compose exec` allocates a TTY.  |
-| `--privileged`    |               |         | Give extended privileges to 
the process.                                          |
-| `-u`, `--user`    | `string`      |         | Run the command as this user.  
                                                   |
-| `-w`, `--workdir` | `string`      |         | Path to workdir directory for 
this command.                                       |
+| Name              | Type          | Default | Description                    
                                                  |
+|:------------------|:--------------|:--------|:---------------------------------------------------------------------------------|
+| `-d`, `--detach`  |               |         | Detached mode: Run command in 
the background.                                    |
+| `--dry-run`       |               |         | Execute command in dry run 
mode                                                  |
+| `-e`, `--env`     | `stringArray` |         | Set environment variables      
                                                  |
+| `--index`         | `int`         | `0`     | index of the container if 
service has multiple replicas                          |
+| `-T`, `--no-TTY`  |               |         | Disable pseudo-TTY allocation. 
By default `docker compose exec` allocates a TTY. |
+| `--privileged`    |               |         | Give extended privileges to 
the process.                                         |
+| `-u`, `--user`    | `string`      |         | Run the command as this user.  
                                                  |
+| `-w`, `--workdir` | `string`      |         | Path to workdir directory for 
this command.                                      |
 
 
 <!---MARKER_GEN_END-->
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/compose_port.md 
new/compose-2.20.0/docs/reference/compose_port.md
--- old/compose-2.19.1/docs/reference/compose_port.md   2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/compose_port.md   2023-07-10 
19:26:41.000000000 +0200
@@ -8,7 +8,7 @@
 | Name         | Type     | Default | Description                              
               |
 
|:-------------|:---------|:--------|:--------------------------------------------------------|
 | `--dry-run`  |          |         | Execute command in dry run mode          
               |
-| `--index`    | `int`    | `1`     | index of the container if service has 
multiple replicas |
+| `--index`    | `int`    | `0`     | index of the container if service has 
multiple replicas |
 | `--protocol` | `string` | `tcp`   | tcp or udp                               
               |
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/compose_wait.md 
new/compose-2.20.0/docs/reference/compose_wait.md
--- old/compose-2.19.1/docs/reference/compose_wait.md   1970-01-01 
01:00:00.000000000 +0100
+++ new/compose-2.20.0/docs/reference/compose_wait.md   2023-07-10 
19:26:41.000000000 +0200
@@ -0,0 +1,15 @@
+# docker compose wait
+
+<!---MARKER_GEN_START-->
+Block until the first service container stops
+
+### Options
+
+| Name             | Type | Default | Description                              
    |
+|:-----------------|:-----|:--------|:---------------------------------------------|
+| `--down-project` |      |         | Drops project when the first container 
stops |
+| `--dry-run`      |      |         | Execute command in dry run mode          
    |
+
+
+<!---MARKER_GEN_END-->
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/docker_compose.yaml 
new/compose-2.20.0/docs/reference/docker_compose.yaml
--- old/compose-2.19.1/docs/reference/docker_compose.yaml       2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose.yaml       2023-07-10 
19:26:41.000000000 +0200
@@ -171,6 +171,7 @@
     - docker compose unpause
     - docker compose up
     - docker compose version
+    - docker compose wait
 clink:
     - docker_compose_build.yaml
     - docker_compose_config.yaml
@@ -197,6 +198,7 @@
     - docker_compose_unpause.yaml
     - docker_compose_up.yaml
     - docker_compose_version.yaml
+    - docker_compose_wait.yaml
 options:
     - option: ansi
       value_type: string
@@ -345,6 +347,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_alpha.yaml 
new/compose-2.20.0/docs/reference/docker_compose_alpha.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_alpha.yaml 2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_alpha.yaml 2023-07-10 
19:26:41.000000000 +0200
@@ -21,6 +21,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: true
 experimental: false
 experimentalcli: true
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_alpha_viz.yaml 
new/compose-2.20.0/docs/reference/docker_compose_alpha_viz.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_alpha_viz.yaml     
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_alpha_viz.yaml     
2023-07-10 19:26:41.000000000 +0200
@@ -69,6 +69,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: true
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_alpha_watch.yaml 
new/compose-2.20.0/docs/reference/docker_compose_alpha_watch.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_alpha_watch.yaml   
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_alpha_watch.yaml   
2023-07-10 19:26:41.000000000 +0200
@@ -29,6 +29,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: true
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_build.yaml 
new/compose-2.20.0/docs/reference/docker_compose_build.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_build.yaml 2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_build.yaml 2023-07-10 
19:26:41.000000000 +0200
@@ -24,6 +24,15 @@
       experimentalcli: false
       kubernetes: false
       swarm: false
+    - option: builder
+      value_type: string
+      description: Set builder to use.
+      deprecated: false
+      hidden: false
+      experimental: false
+      experimentalcli: false
+      kubernetes: false
+      swarm: false
     - option: compress
       value_type: bool
       default_value: "true"
@@ -150,6 +159,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_config.yaml 
new/compose-2.20.0/docs/reference/docker_compose_config.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_config.yaml        
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_config.yaml        
2023-07-10 19:26:41.000000000 +0200
@@ -152,6 +152,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/docker_compose_cp.yaml 
new/compose-2.20.0/docs/reference/docker_compose_cp.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_cp.yaml    2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_cp.yaml    2023-07-10 
19:26:41.000000000 +0200
@@ -10,7 +10,7 @@
     - option: all
       value_type: bool
       default_value: "false"
-      description: Copy to all the containers of the service.
+      description: copy to all the containers of the service.
       deprecated: true
       hidden: true
       experimental: false
@@ -42,8 +42,7 @@
     - option: index
       value_type: int
       default_value: "0"
-      description: |
-        Index of the container if there are multiple instances of a service .
+      description: index of the container if service has multiple replicas
       deprecated: false
       hidden: false
       experimental: false
@@ -62,6 +61,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_create.yaml 
new/compose-2.20.0/docs/reference/docker_compose_create.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_create.yaml        
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_create.yaml        
2023-07-10 19:26:41.000000000 +0200
@@ -90,6 +90,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_down.yaml 
new/compose-2.20.0/docs/reference/docker_compose_down.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_down.yaml  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_down.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -73,6 +73,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_events.yaml 
new/compose-2.20.0/docs/reference/docker_compose_events.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_events.yaml        
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_events.yaml        
2023-07-10 19:26:41.000000000 +0200
@@ -46,6 +46,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_exec.yaml 
new/compose-2.20.0/docs/reference/docker_compose_exec.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_exec.yaml  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_exec.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -33,9 +33,8 @@
       swarm: false
     - option: index
       value_type: int
-      default_value: "1"
-      description: |
-        index of the container if there are multiple instances of a service 
[default: 1].
+      default_value: "0"
+      description: index of the container if service has multiple replicas
       deprecated: false
       hidden: false
       experimental: false
@@ -118,6 +117,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_images.yaml 
new/compose-2.20.0/docs/reference/docker_compose_images.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_images.yaml        
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_images.yaml        
2023-07-10 19:26:41.000000000 +0200
@@ -38,6 +38,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_kill.yaml 
new/compose-2.20.0/docs/reference/docker_compose_kill.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_kill.yaml  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_kill.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -43,6 +43,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_logs.yaml 
new/compose-2.20.0/docs/reference/docker_compose_logs.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_logs.yaml  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_logs.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -91,6 +91,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/docker_compose_ls.yaml 
new/compose-2.20.0/docs/reference/docker_compose_ls.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_ls.yaml    2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_ls.yaml    2023-07-10 
19:26:41.000000000 +0200
@@ -58,6 +58,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_pause.yaml 
new/compose-2.20.0/docs/reference/docker_compose_pause.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_pause.yaml 2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_pause.yaml 2023-07-10 
19:26:41.000000000 +0200
@@ -17,6 +17,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_port.yaml 
new/compose-2.20.0/docs/reference/docker_compose_port.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_port.yaml  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_port.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -7,7 +7,7 @@
 options:
     - option: index
       value_type: int
-      default_value: "1"
+      default_value: "0"
       description: index of the container if service has multiple replicas
       deprecated: false
       hidden: false
@@ -37,6 +37,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/docker_compose_ps.yaml 
new/compose-2.20.0/docs/reference/docker_compose_ps.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_ps.yaml    2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_ps.yaml    2023-07-10 
19:26:41.000000000 +0200
@@ -180,6 +180,7 @@
     The `docker compose ps` command currently only supports the `--filter 
status=<status>`
     option, but additional filter options may be added in the future.
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_pull.yaml 
new/compose-2.20.0/docs/reference/docker_compose_pull.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_pull.yaml  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_pull.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -124,6 +124,7 @@
     `docker compose pull` will try to pull image for services with a build 
section. If pull fails, it will let
     user know this service image MUST be built. You can skip this by setting 
`--ignore-buildable` flag
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_push.yaml 
new/compose-2.20.0/docs/reference/docker_compose_push.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_push.yaml  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_push.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -66,6 +66,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_restart.yaml 
new/compose-2.20.0/docs/reference/docker_compose_restart.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_restart.yaml       
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_restart.yaml       
2023-07-10 19:26:41.000000000 +0200
@@ -48,6 +48,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/docker_compose_rm.yaml 
new/compose-2.20.0/docs/reference/docker_compose_rm.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_rm.yaml    2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_rm.yaml    2023-07-10 
19:26:41.000000000 +0200
@@ -76,6 +76,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_run.yaml 
new/compose-2.20.0/docs/reference/docker_compose_run.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_run.yaml   2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_run.yaml   2023-07-10 
19:26:41.000000000 +0200
@@ -286,6 +286,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_start.yaml 
new/compose-2.20.0/docs/reference/docker_compose_start.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_start.yaml 2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_start.yaml 2023-07-10 
19:26:41.000000000 +0200
@@ -16,6 +16,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_stop.yaml 
new/compose-2.20.0/docs/reference/docker_compose_stop.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_stop.yaml  2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_stop.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -29,6 +29,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_top.yaml 
new/compose-2.20.0/docs/reference/docker_compose_top.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_top.yaml   2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_top.yaml   2023-07-10 
19:26:41.000000000 +0200
@@ -23,6 +23,7 @@
     root   142353   142331   2    15:33   ?     00:00:00   ping localhost -c 5
     ```
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_unpause.yaml 
new/compose-2.20.0/docs/reference/docker_compose_unpause.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_unpause.yaml       
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_unpause.yaml       
2023-07-10 19:26:41.000000000 +0200
@@ -16,6 +16,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/docs/reference/docker_compose_up.yaml 
new/compose-2.20.0/docs/reference/docker_compose_up.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_up.yaml    2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_up.yaml    2023-07-10 
19:26:41.000000000 +0200
@@ -285,6 +285,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_version.yaml 
new/compose-2.20.0/docs/reference/docker_compose_version.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_version.yaml       
2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/docs/reference/docker_compose_version.yaml       
2023-07-10 19:26:41.000000000 +0200
@@ -37,6 +37,7 @@
       kubernetes: false
       swarm: false
 deprecated: false
+hidden: false
 experimental: false
 experimentalcli: false
 kubernetes: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.19.1/docs/reference/docker_compose_wait.yaml 
new/compose-2.20.0/docs/reference/docker_compose_wait.yaml
--- old/compose-2.19.1/docs/reference/docker_compose_wait.yaml  1970-01-01 
01:00:00.000000000 +0100
+++ new/compose-2.20.0/docs/reference/docker_compose_wait.yaml  2023-07-10 
19:26:41.000000000 +0200
@@ -0,0 +1,35 @@
+command: docker compose wait
+short: Block until the first service container stops
+long: Block until the first service container stops
+usage: docker compose wait SERVICE [SERVICE...] [OPTIONS]
+pname: docker compose
+plink: docker_compose.yaml
+options:
+    - option: down-project
+      value_type: bool
+      default_value: "false"
+      description: Drops project when the first container stops
+      deprecated: false
+      hidden: false
+      experimental: false
+      experimentalcli: false
+      kubernetes: false
+      swarm: false
+inherited_options:
+    - option: dry-run
+      value_type: bool
+      default_value: "false"
+      description: Execute command in dry run mode
+      deprecated: false
+      hidden: false
+      experimental: false
+      experimentalcli: false
+      kubernetes: false
+      swarm: false
+deprecated: false
+hidden: false
+experimental: false
+experimentalcli: false
+kubernetes: false
+swarm: false
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/go.mod new/compose-2.20.0/go.mod
--- old/compose-2.19.1/go.mod   2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/go.mod   2023-07-10 19:26:41.000000000 +0200
@@ -6,15 +6,15 @@
        github.com/AlecAivazis/survey/v2 v2.3.7
        github.com/Microsoft/go-winio v0.6.1
        github.com/buger/goterm v1.0.4
-       github.com/compose-spec/compose-go v1.15.1
+       github.com/compose-spec/compose-go v1.16.0
        github.com/containerd/console v1.0.3
        github.com/containerd/containerd v1.7.2
        github.com/cucumber/godog v0.0.0-00010101000000-000000000000 // 
replaced; see replace for the actual version used
        github.com/distribution/distribution/v3 
v3.0.0-20230601133803-97b1d649c493
-       github.com/docker/buildx v0.11.0
+       github.com/docker/buildx v0.11.1
        github.com/docker/cli v24.0.2+incompatible
-       github.com/docker/cli-docs-tool v0.5.1
-       github.com/docker/docker v24.0.2+incompatible
+       github.com/docker/cli-docs-tool v0.6.0
+       github.com/docker/docker v24.0.4+incompatible
        github.com/docker/go-connections v0.4.0
        github.com/docker/go-units v0.5.0
        github.com/fsnotify/fsevents v0.1.1
@@ -29,7 +29,7 @@
        github.com/moby/term v0.5.0
        github.com/morikuni/aec v1.0.0
        github.com/opencontainers/go-digest v1.0.0
-       github.com/opencontainers/image-spec v1.1.0-rc3
+       github.com/opencontainers/image-spec v1.1.0-rc4
        github.com/pkg/errors v0.9.1
        github.com/sirupsen/logrus v1.9.3
        github.com/spf13/cobra v1.7.0
@@ -44,9 +44,9 @@
        go.opentelemetry.io/otel/trace v1.14.0
        go.uber.org/goleak v1.2.1
        golang.org/x/sync v0.3.0
-       google.golang.org/grpc v1.56.0
+       google.golang.org/grpc v1.56.2
        gopkg.in/yaml.v2 v2.4.0
-       gotest.tools/v3 v3.4.0
+       gotest.tools/v3 v3.5.0
 )
 
 require (
@@ -150,7 +150,7 @@
        github.com/subosito/gotenv v1.4.1 // indirect
        github.com/tonistiigi/fsutil v0.0.0-20230407161946-9e7a6df48576 // 
indirect
        github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea // 
indirect
-       github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f // 
indirect
+       github.com/tonistiigi/vt100 v0.0.0-20230623042737-f9a4f7ef6531 // 
indirect
        github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // 
indirect
        github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 
// indirect
        github.com/xeipuuv/gojsonschema v1.2.0 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/go.sum new/compose-2.20.0/go.sum
--- old/compose-2.19.1/go.sum   2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/go.sum   2023-07-10 19:26:41.000000000 +0200
@@ -131,8 +131,8 @@
 github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 
h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
 github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb 
h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
-github.com/compose-spec/compose-go v1.15.1 
h1:0yaEt6/66dLN0bNWYDTj0CDx626uCdQ9ipJVIJx8O8M=
-github.com/compose-spec/compose-go v1.15.1/go.mod 
h1:3yngGBGfls6FHGQsg4B1z6gz8ej9SOvmAJtxCwgbcnc=
+github.com/compose-spec/compose-go v1.16.0 
h1:HYk4uYWXgArHh6NG+WE4yGYayOXw+hjqJ+eJxpjWWjk=
+github.com/compose-spec/compose-go v1.16.0/go.mod 
h1:3yngGBGfls6FHGQsg4B1z6gz8ej9SOvmAJtxCwgbcnc=
 github.com/containerd/cgroups v1.1.0 
h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
 github.com/containerd/console v1.0.3 
h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
 github.com/containerd/console v1.0.3/go.mod 
h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
@@ -167,17 +167,17 @@
 github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod 
h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
 github.com/distribution/distribution/v3 v3.0.0-20230601133803-97b1d649c493 
h1:fm5DpBD+A7o0+x9Nf+o9/4/qPGbfxLpr9qIPVuV8vQc=
 github.com/distribution/distribution/v3 
v3.0.0-20230601133803-97b1d649c493/go.mod 
h1:+fqBJ4vPYo4Uu1ZE4d+bUtTLRXfdSL3NvCZIZ9GHv58=
-github.com/docker/buildx v0.11.0 
h1:DNCOIYT/7J0sPBlU/ozEhFd4MtbnbFByn45yeTMHXVU=
-github.com/docker/buildx v0.11.0/go.mod 
h1:Yq7ZNjrwXKzW0uSFMk46dl5Gl903k5+bp6U4apsM5rs=
+github.com/docker/buildx v0.11.1 
h1:xfmrAkOJrN+NLRcwhZn1iBgJVAK1dEBEv8lWu1Wxg14=
+github.com/docker/buildx v0.11.1/go.mod 
h1:qAxs3bsJEfVo7DOc9riES/f9Z187CeGM5nLPmadk8AA=
 github.com/docker/cli v24.0.2+incompatible 
h1:QdqR7znue1mtkXIJ+ruQMGQhpw2JzMJLRXp6zpzF6tM=
 github.com/docker/cli v24.0.2+incompatible/go.mod 
h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
-github.com/docker/cli-docs-tool v0.5.1 
h1:jIk/cCZurZERhALPVKhqlNxTQGxn2kcI+56gE57PQXg=
-github.com/docker/cli-docs-tool v0.5.1/go.mod 
h1:zMjqTFCU361PRh8apiXzeAZ1Q/xupbIwTusYpzCXS/o=
+github.com/docker/cli-docs-tool v0.6.0 
h1:Z9x10SaZgFaB6jHgz3OWooynhSa40CsWkpe5hEnG/qA=
+github.com/docker/cli-docs-tool v0.6.0/go.mod 
h1:zMjqTFCU361PRh8apiXzeAZ1Q/xupbIwTusYpzCXS/o=
 github.com/docker/distribution v2.7.1+incompatible/go.mod 
h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
 github.com/docker/distribution v2.8.2+incompatible 
h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
 github.com/docker/distribution v2.8.2+incompatible/go.mod 
h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.2+incompatible 
h1:eATx+oLz9WdNVkQrr0qjQ8HvRJ4bOOxfzEo8R+dA3cg=
-github.com/docker/docker v24.0.2+incompatible/go.mod 
h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v24.0.4+incompatible 
h1:s/LVDftw9hjblvqIeTiGYXBCD95nOEEl7qRsRrIOuQI=
+github.com/docker/docker v24.0.4+incompatible/go.mod 
h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker-credential-helpers v0.7.0 
h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
 github.com/docker/docker-credential-helpers v0.7.0/go.mod 
h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0=
 github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c 
h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
@@ -511,8 +511,8 @@
 github.com/opencontainers/go-digest v1.0.0 
h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod 
h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
 github.com/opencontainers/image-spec v1.0.1/go.mod 
h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
-github.com/opencontainers/image-spec v1.1.0-rc3 
h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8=
-github.com/opencontainers/image-spec v1.1.0-rc3/go.mod 
h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
+github.com/opencontainers/image-spec v1.1.0-rc4 
h1:oOxKUJWnFC4YGHCCMNql1x4YaDfYBTS5Y4x/Cgeo1E0=
+github.com/opencontainers/image-spec v1.1.0-rc4/go.mod 
h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
 github.com/opencontainers/runc v1.1.7 
h1:y2EZDS8sNng4Ksf0GUYNhKbTShZJPJg1FiXJNH/uoCk=
 github.com/opencontainers/runc v1.1.7/go.mod 
h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50=
 github.com/opencontainers/runtime-spec v1.1.0-rc.2 
h1:ucBtEms2tamYYW/SvGpvq9yUN0NEVL6oyLEwDcTSrk8=
@@ -630,8 +630,8 @@
 github.com/tonistiigi/fsutil v0.0.0-20230407161946-9e7a6df48576/go.mod 
h1:q1CxMSzcAbjUkVGHoZeQUcCaALnaE4XdWk+zJcgMYFw=
 github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea 
h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0=
 github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod 
h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk=
-github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f 
h1:DLpt6B5oaaS8jyXHa9VA4rrZloBVPVXeCtrOsrFauxc=
-github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f/go.mod 
h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc=
+github.com/tonistiigi/vt100 v0.0.0-20230623042737-f9a4f7ef6531 
h1:Y/M5lygoNPKwVNLMPXgVfsRT40CSFKXCxuU8LoHySjs=
+github.com/tonistiigi/vt100 v0.0.0-20230623042737-f9a4f7ef6531/go.mod 
h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc=
 github.com/vbatts/tar-split v0.11.2 
h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME=
 github.com/weppos/publicsuffix-go v0.15.1-0.20220329081811-9a40b608a236 
h1:vMJBP3PQViZsF6cOINtvyMC8ptpLsyJ4EwyFnzuWNxc=
 github.com/weppos/publicsuffix-go v0.15.1-0.20220329081811-9a40b608a236/go.mod 
h1:HYux0V0Zi04bHNwOHy4cXJVz/TQjYonnF6aoYhj+3QE=
@@ -1039,8 +1039,8 @@
 google.golang.org/grpc v1.36.0/go.mod 
h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.40.0/go.mod 
h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.42.0/go.mod 
h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
-google.golang.org/grpc v1.56.0 h1:+y7Bs8rtMd07LeXmL3NxcTLn7mUkbKZqEpPhMNkwJEE=
-google.golang.org/grpc v1.56.0/go.mod 
h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
+google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI=
+google.golang.org/grpc v1.56.2/go.mod 
h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod 
h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod 
h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod 
h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -1088,8 +1088,8 @@
 gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
-gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g=
+gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
+gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
 honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/api/api.go 
new/compose-2.20.0/pkg/api/api.go
--- old/compose-2.19.1/pkg/api/api.go   2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/pkg/api/api.go   2023-07-10 19:26:41.000000000 +0200
@@ -84,6 +84,15 @@
        Watch(ctx context.Context, project *types.Project, services []string, 
options WatchOptions) error
        // Viz generates a graphviz graph of the project services
        Viz(ctx context.Context, project *types.Project, options VizOptions) 
(string, error)
+       // Wait blocks until at least one of the services' container exits
+       Wait(ctx context.Context, projectName string, options WaitOptions) 
(int64, error)
+}
+
+type WaitOptions struct {
+       // Services passed in the command line to be waited
+       Services []string
+       // Executes a down when a container exits
+       DownProjectOnContainerExit bool
 }
 
 type VizOptions struct {
@@ -121,6 +130,8 @@
        SSHs []types.SSHKey
        // Memory limit for the build container
        Memory int64
+       // Builder name passed in the command line
+       Builder string
 }
 
 // Apply mutates project according to build options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/api/dryrunclient.go 
new/compose-2.20.0/pkg/api/dryrunclient.go
--- old/compose-2.19.1/pkg/api/dryrunclient.go  2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/pkg/api/dryrunclient.go  2023-07-10 19:26:41.000000000 
+0200
@@ -70,7 +70,7 @@
 }
 
 // NewDryRunClient produces a DryRunClient
-func NewDryRunClient(apiClient client.APIClient, cli *command.DockerCli) 
(*DryRunClient, error) {
+func NewDryRunClient(apiClient client.APIClient, cli command.Cli) 
(*DryRunClient, error) {
        b, err := builder.New(cli, builder.WithSkippedValidation())
        if err != nil {
                return nil, err
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/api/proxy.go 
new/compose-2.20.0/pkg/api/proxy.go
--- old/compose-2.19.1/pkg/api/proxy.go 2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/pkg/api/proxy.go 2023-07-10 19:26:41.000000000 +0200
@@ -54,6 +54,7 @@
        MaxConcurrencyFn     func(parallel int)
        DryRunModeFn         func(ctx context.Context, dryRun bool) 
(context.Context, error)
        VizFn                func(ctx context.Context, project *types.Project, 
options VizOptions) (string, error)
+       WaitFn               func(ctx context.Context, projectName string, 
options WaitOptions) (int64, error)
        interceptors         []Interceptor
 }
 
@@ -95,6 +96,7 @@
        s.MaxConcurrencyFn = service.MaxConcurrency
        s.DryRunModeFn = service.DryRunMode
        s.VizFn = service.Viz
+       s.WaitFn = service.Wait
        return s
 }
 
@@ -215,7 +217,7 @@
        return s.ListFn(ctx, options)
 }
 
-// Convert implements Service interface
+// Config implements Service interface
 func (s *ServiceProxy) Config(ctx context.Context, project *types.Project, 
options ConfigOptions) ([]byte, error) {
        if s.ConfigFn == nil {
                return nil, ErrNotImplemented
@@ -325,7 +327,7 @@
        return s.WatchFn(ctx, project, services, options)
 }
 
-// Viz implements Viz interface
+// Viz implements Service interface
 func (s *ServiceProxy) Viz(ctx context.Context, project *types.Project, 
options VizOptions) (string, error) {
        if s.VizFn == nil {
                return "", ErrNotImplemented
@@ -333,6 +335,14 @@
        return s.VizFn(ctx, project, options)
 }
 
+// Wait implements Service interface
+func (s *ServiceProxy) Wait(ctx context.Context, projectName string, options 
WaitOptions) (int64, error) {
+       if s.WaitFn == nil {
+               return 0, ErrNotImplemented
+       }
+       return s.WaitFn(ctx, projectName, options)
+}
+
 func (s *ServiceProxy) MaxConcurrency(i int) {
        s.MaxConcurrencyFn(i)
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/compose/build.go 
new/compose-2.20.0/pkg/compose/build.go
--- old/compose-2.19.1/pkg/compose/build.go     2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/pkg/compose/build.go     2023-07-10 19:26:41.000000000 
+0200
@@ -116,7 +116,7 @@
                }
                buildOptions.BuildArgs = mergeArgs(buildOptions.BuildArgs, 
flatten(args))
 
-               digest, err := s.doBuildBuildkit(ctx, service.Name, 
buildOptions, w)
+               digest, err := s.doBuildBuildkit(ctx, service.Name, 
buildOptions, w, options.Builder)
                if err != nil {
                        return err
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/compose/build_buildkit.go 
new/compose-2.20.0/pkg/compose/build_buildkit.go
--- old/compose-2.19.1/pkg/compose/build_buildkit.go    2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/pkg/compose/build_buildkit.go    2023-07-10 
19:26:41.000000000 +0200
@@ -34,8 +34,8 @@
        "github.com/moby/buildkit/client"
 )
 
-func (s *composeService) doBuildBuildkit(ctx context.Context, service string, 
opts build.Options, p *buildx.Printer) (string, error) {
-       b, err := builder.New(s.dockerCli)
+func (s *composeService) doBuildBuildkit(ctx context.Context, service string, 
opts build.Options, p *buildx.Printer, builderName string) (string, error) {
+       b, err := builder.New(s.dockerCli, builder.WithName(builderName))
        if err != nil {
                return "", err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/compose/compose.go 
new/compose-2.20.0/pkg/compose/compose.go
--- old/compose-2.19.1/pkg/compose/compose.go   2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/pkg/compose/compose.go   2023-07-10 19:26:41.000000000 
+0200
@@ -88,8 +88,11 @@
                if err != nil {
                        return ctx, err
                }
-               err = cli.Initialize(flags.NewClientOptions(), 
command.WithInitializeClient(func(cli *command.DockerCli) (client.APIClient, 
error) {
-                       return api.NewDryRunClient(s.apiClient(), cli)
+
+               options := flags.NewClientOptions()
+               options.Context = s.dockerCli.CurrentContext()
+               err = cli.Initialize(options, 
command.WithInitializeClient(func(cli *command.DockerCli) (client.APIClient, 
error) {
+                       return api.NewDryRunClient(s.apiClient(), s.dockerCli)
                }))
                if err != nil {
                        return ctx, err
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/compose/containers.go 
new/compose-2.20.0/pkg/compose/containers.go
--- old/compose-2.19.1/pkg/compose/containers.go        2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/pkg/compose/containers.go        2023-07-10 
19:26:41.000000000 +0200
@@ -20,6 +20,7 @@
        "context"
        "fmt"
        "sort"
+       "strconv"
 
        "github.com/docker/compose/v2/pkg/api"
        "github.com/docker/compose/v2/pkg/utils"
@@ -72,7 +73,9 @@
 
 func (s *composeService) getSpecifiedContainer(ctx context.Context, 
projectName string, oneOff oneOff, stopped bool, serviceName string, 
containerIndex int) (moby.Container, error) {
        defaultFilters := getDefaultFilters(projectName, oneOff, serviceName)
-       defaultFilters = append(defaultFilters, 
containerNumberFilter(containerIndex))
+       if containerIndex > 0 {
+               defaultFilters = append(defaultFilters, 
containerNumberFilter(containerIndex))
+       }
        containers, err := s.apiClient().ContainerList(ctx, 
moby.ContainerListOptions{
                Filters: filters.NewArgs(
                        defaultFilters...,
@@ -83,8 +86,16 @@
                return moby.Container{}, err
        }
        if len(containers) < 1 {
-               return moby.Container{}, fmt.Errorf("service %q is not running 
container #%d", serviceName, containerIndex)
-       }
+               if containerIndex > 0 {
+                       return moby.Container{}, fmt.Errorf("service %q is not 
running container #%d", serviceName, containerIndex)
+               }
+               return moby.Container{}, fmt.Errorf("service %q is not 
running", serviceName)
+       }
+       sort.Slice(containers, func(i, j int) bool {
+               x, _ := 
strconv.Atoi(containers[i].Labels[api.ContainerNumberLabel])
+               y, _ := 
strconv.Atoi(containers[j].Labels[api.ContainerNumberLabel])
+               return x < y
+       })
        container := containers[0]
        return container, nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/compose/convergence.go 
new/compose-2.20.0/pkg/compose/convergence.go
--- old/compose-2.19.1/pkg/compose/convergence.go       2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/pkg/compose/convergence.go       2023-07-10 
19:26:41.000000000 +0200
@@ -549,13 +549,15 @@
        // call via container.NetworkMode & network.NetworkingConfig
        // any remaining networks are connected one-by-one here after creation 
(but before start)
        serviceNetworks := service.NetworksByPriority()
-       if len(serviceNetworks) > 1 {
-               for _, networkKey := range serviceNetworks[1:] {
-                       mobyNetworkName := project.Networks[networkKey].Name
-                       epSettings := createEndpointSettings(project, service, 
number, networkKey, cfgs.Links, opts.UseNetworkAliases)
-                       if err := s.apiClient().NetworkConnect(ctx, 
mobyNetworkName, created.ID, epSettings); err != nil {
-                               return created, err
-                       }
+       for _, networkKey := range serviceNetworks {
+               mobyNetworkName := project.Networks[networkKey].Name
+               if string(cfgs.Host.NetworkMode) == mobyNetworkName {
+                       // primary network already configured as part of 
ContainerCreate
+                       continue
+               }
+               epSettings := createEndpointSettings(project, service, number, 
networkKey, cfgs.Links, opts.UseNetworkAliases)
+               if err := s.apiClient().NetworkConnect(ctx, mobyNetworkName, 
created.ID, epSettings); err != nil {
+                       return created, err
                }
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/compose/port.go 
new/compose-2.20.0/pkg/compose/port.go
--- old/compose-2.19.1/pkg/compose/port.go      2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/pkg/compose/port.go      2023-07-10 19:26:41.000000000 
+0200
@@ -24,25 +24,14 @@
        "github.com/docker/compose/v2/pkg/api"
 
        moby "github.com/docker/docker/api/types"
-       "github.com/docker/docker/api/types/filters"
 )
 
 func (s *composeService) Port(ctx context.Context, projectName string, service 
string, port uint16, options api.PortOptions) (string, int, error) {
        projectName = strings.ToLower(projectName)
-       list, err := s.apiClient().ContainerList(ctx, moby.ContainerListOptions{
-               Filters: filters.NewArgs(
-                       projectFilter(projectName),
-                       serviceFilter(service),
-                       containerNumberFilter(options.Index),
-               ),
-       })
+       container, err := s.getSpecifiedContainer(ctx, projectName, 
oneOffInclude, false, service, options.Index)
        if err != nil {
                return "", 0, err
        }
-       if len(list) == 0 {
-               return "", 0, fmt.Errorf("no container found for %s%s%d", 
service, api.Separator, options.Index)
-       }
-       container := list[0]
        for _, p := range container.Ports {
                if p.PrivatePort == port && p.Type == options.Protocol {
                        return p.IP, int(p.PublicPort), nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/compose/secrets.go 
new/compose-2.20.0/pkg/compose/secrets.go
--- old/compose-2.19.1/pkg/compose/secrets.go   2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/pkg/compose/secrets.go   2023-07-10 19:26:41.000000000 
+0200
@@ -58,7 +58,7 @@
        value := []byte(env)
        b := bytes.Buffer{}
        tarWriter := tar.NewWriter(&b)
-       mode := uint32(0o400)
+       mode := uint32(0o444)
        if config.Mode != nil {
                mode = *config.Mode
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/compose/wait.go 
new/compose-2.20.0/pkg/compose/wait.go
--- old/compose-2.19.1/pkg/compose/wait.go      1970-01-01 01:00:00.000000000 
+0100
+++ new/compose-2.20.0/pkg/compose/wait.go      2023-07-10 19:26:41.000000000 
+0200
@@ -0,0 +1,67 @@
+/*
+   Copyright 2020 Docker Compose CLI authors
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package compose
+
+import (
+       "context"
+       "fmt"
+
+       "github.com/docker/compose/v2/pkg/api"
+       "golang.org/x/sync/errgroup"
+)
+
+func (s *composeService) Wait(ctx context.Context, projectName string, options 
api.WaitOptions) (int64, error) {
+       containers, err := s.getContainers(ctx, projectName, oneOffInclude, 
false, options.Services...)
+       if err != nil {
+               return 0, err
+       }
+       if len(containers) == 0 {
+               return 0, fmt.Errorf("no containers for project %q", 
projectName)
+       }
+
+       eg, waitCtx := errgroup.WithContext(ctx)
+       var statusCode int64
+       for _, c := range containers {
+               c := c
+               eg.Go(func() error {
+                       var err error
+                       resultC, errC := 
s.dockerCli.Client().ContainerWait(waitCtx, c.ID, "")
+
+                       select {
+                       case result := <-resultC:
+                               fmt.Fprintf(s.dockerCli.Out(), "container %q 
exited with status code %d\n", c.ID, result.StatusCode)
+                               statusCode = result.StatusCode
+                       case err = <-errC:
+                       }
+
+                       return err
+               })
+       }
+
+       err = eg.Wait()
+       if err != nil {
+               return 42, err // Ignore abort flag in case of error in wait
+       }
+
+       if options.DownProjectOnContainerExit {
+               return statusCode, s.Down(ctx, projectName, api.DownOptions{
+                       RemoveOrphans: true,
+               })
+       }
+
+       return statusCode, err
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/e2e/build_test.go 
new/compose-2.20.0/pkg/e2e/build_test.go
--- old/compose-2.19.1/pkg/e2e/build_test.go    2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/pkg/e2e/build_test.go    2023-07-10 19:26:41.000000000 
+0200
@@ -17,6 +17,7 @@
 package e2e
 
 import (
+       "fmt"
        "net/http"
        "runtime"
        "strings"
@@ -422,4 +423,31 @@
                })
        })
 
+}
+
+func TestBuildBuilder(t *testing.T) {
+       c := NewParallelCLI(t)
+       builderName := "build-with-builder"
+       // declare builder
+       result := c.RunDockerCmd(t, "buildx", "create", "--name", builderName, 
"--use", "--bootstrap")
+       assert.NilError(t, result.Error)
+
+       t.Cleanup(func() {
+               c.RunDockerComposeCmd(t, "--project-directory", 
"fixtures/build-test/", "down")
+               _ = c.RunDockerCmd(t, "buildx", "rm", "-f", builderName)
+       })
+
+       t.Run("use specific builder to run build command", func(t *testing.T) {
+               res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", 
"fixtures/build-test", "build", "--builder", builderName)
+               assert.NilError(t, res.Error, res.Stderr())
+       })
+
+       t.Run("error when using specific builder to run build command", func(t 
*testing.T) {
+               res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", 
"fixtures/build-test", "build", "--builder", "unknown-builder")
+               res.Assert(t, icmd.Expected{
+                       ExitCode: 1,
+                       Err:      fmt.Sprintf(`no builder %q found`, 
"unknown-builder"),
+               })
+       })
+
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/e2e/compose_run_test.go 
new/compose-2.20.0/pkg/e2e/compose_run_test.go
--- old/compose-2.19.1/pkg/e2e/compose_run_test.go      2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/pkg/e2e/compose_run_test.go      2023-07-10 
19:26:41.000000000 +0200
@@ -136,4 +136,12 @@
 
                c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/deps.yaml", 
"down", "--remove-orphans")
        })
+
+       t.Run("run without dependencies", func(t *testing.T) {
+               res := c.RunDockerComposeCmd(t, "-f", 
"./fixtures/run-test/deps.yaml", "run", "--no-deps", "service_a")
+               assert.Assert(t, !strings.Contains(res.Combined(), 
"shared_dep"), res.Combined())
+               assert.Assert(t, !strings.Contains(res.Combined(), 
"service_b"), res.Combined())
+
+               c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/deps.yaml", 
"down", "--remove-orphans")
+       })
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/e2e/fixtures/wait/compose.yaml 
new/compose-2.20.0/pkg/e2e/fixtures/wait/compose.yaml
--- old/compose-2.19.1/pkg/e2e/fixtures/wait/compose.yaml       1970-01-01 
01:00:00.000000000 +0100
+++ new/compose-2.20.0/pkg/e2e/fixtures/wait/compose.yaml       2023-07-10 
19:26:41.000000000 +0200
@@ -0,0 +1,11 @@
+services:
+  faster:
+    image: alpine
+    command: sleep 2
+  slower:
+    image: alpine
+    command: sleep 5
+  infinity:
+    image: alpine
+    command: sleep infinity
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/e2e/networks_test.go 
new/compose-2.20.0/pkg/e2e/networks_test.go
--- old/compose-2.19.1/pkg/e2e/networks_test.go 2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/pkg/e2e/networks_test.go 2023-07-10 19:26:41.000000000 
+0200
@@ -29,47 +29,34 @@
 
 func TestNetworks(t *testing.T) {
        // fixture is shared with TestNetworkModes and is not safe to run 
concurrently
-       c := NewCLI(t)
-
        const projectName = "network-e2e"
+       c := NewCLI(t, WithEnv(
+               "COMPOSE_PROJECT_NAME="+projectName,
+               "COMPOSE_FILE=./fixtures/network-test/compose.yaml",
+       ))
+
+       c.RunDockerComposeCmd(t, "down", "-t0", "-v")
+
+       c.RunDockerComposeCmd(t, "up", "-d")
+
+       res := c.RunDockerComposeCmd(t, "ps")
+       res.Assert(t, icmd.Expected{Out: `web`})
+
+       endpoint := "http://localhost:80";
+       output := HTTPGetWithRetry(t, endpoint+"/words/noun", http.StatusOK, 
2*time.Second, 20*time.Second)
+       assert.Assert(t, strings.Contains(output, `"word":`))
+
+       res = c.RunDockerCmd(t, "network", "ls")
+       res.Assert(t, icmd.Expected{Out: projectName + "_dbnet"})
+       res.Assert(t, icmd.Expected{Out: "microservices"})
+
+       res = c.RunDockerComposeCmd(t, "port", "words", "8080")
+       res.Assert(t, icmd.Expected{Out: `0.0.0.0:8080`})
 
-       t.Run("ensure we do not reuse previous networks", func(t *testing.T) {
-               c.RunDockerOrExitError(t, "network", "rm", projectName+"-dbnet")
-               c.RunDockerOrExitError(t, "network", "rm", "microservices")
-       })
-
-       t.Run("up", func(t *testing.T) {
-               c.RunDockerComposeCmd(t, "-f", 
"./fixtures/network-test/compose.yaml", "--project-name", projectName, "up",
-                       "-d")
-       })
-
-       t.Run("check running project", func(t *testing.T) {
-               res := c.RunDockerComposeCmd(t, "-p", projectName, "ps")
-               res.Assert(t, icmd.Expected{Out: `web`})
-
-               endpoint := "http://localhost:80";
-               output := HTTPGetWithRetry(t, endpoint+"/words/noun", 
http.StatusOK, 2*time.Second, 20*time.Second)
-               assert.Assert(t, strings.Contains(output, `"word":`))
-
-               res = c.RunDockerCmd(t, "network", "ls")
-               res.Assert(t, icmd.Expected{Out: projectName + "_dbnet"})
-               res.Assert(t, icmd.Expected{Out: "microservices"})
-       })
-
-       t.Run("port", func(t *testing.T) {
-               res := c.RunDockerComposeCmd(t, "--project-name", projectName, 
"port", "words", "8080")
-               res.Assert(t, icmd.Expected{Out: `0.0.0.0:8080`})
-       })
-
-       t.Run("down", func(t *testing.T) {
-               _ = c.RunDockerComposeCmd(t, "--project-name", projectName, 
"down")
-       })
-
-       t.Run("check networks after down", func(t *testing.T) {
-               res := c.RunDockerCmd(t, "network", "ls")
-               assert.Assert(t, !strings.Contains(res.Combined(), 
projectName), res.Combined())
-               assert.Assert(t, !strings.Contains(res.Combined(), 
"microservices"), res.Combined())
-       })
+       c.RunDockerComposeCmd(t, "down", "-t0", "-v")
+       res = c.RunDockerCmd(t, "network", "ls")
+       assert.Assert(t, !strings.Contains(res.Combined(), projectName), 
res.Combined())
+       assert.Assert(t, !strings.Contains(res.Combined(), "microservices"), 
res.Combined())
 }
 
 func TestNetworkAliases(t *testing.T) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/e2e/wait_test.go 
new/compose-2.20.0/pkg/e2e/wait_test.go
--- old/compose-2.19.1/pkg/e2e/wait_test.go     1970-01-01 01:00:00.000000000 
+0100
+++ new/compose-2.20.0/pkg/e2e/wait_test.go     2023-07-10 19:26:41.000000000 
+0200
@@ -0,0 +1,107 @@
+/*
+   Copyright 2020 Docker Compose CLI authors
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package e2e
+
+import (
+       "strings"
+       "testing"
+       "time"
+
+       "gotest.tools/v3/icmd"
+
+       "gotest.tools/v3/assert"
+)
+
+func TestWaitOnFaster(t *testing.T) {
+       const projectName = "e2e-wait-faster"
+       c := NewParallelCLI(t)
+
+       cleanup := func() {
+               c.RunDockerComposeCmd(t, "--project-name", projectName, "down", 
"--timeout=0", "--remove-orphans")
+       }
+       t.Cleanup(cleanup)
+       cleanup()
+
+       c.RunDockerComposeCmd(t, "-f", "./fixtures/wait/compose.yaml", 
"--project-name", projectName, "up", "-d")
+       c.RunDockerComposeCmd(t, "--project-name", projectName, "wait", 
"faster")
+}
+
+func TestWaitOnSlower(t *testing.T) {
+       const projectName = "e2e-wait-slower"
+       c := NewParallelCLI(t)
+
+       cleanup := func() {
+               c.RunDockerComposeCmd(t, "--project-name", projectName, "down", 
"--timeout=0", "--remove-orphans")
+       }
+       t.Cleanup(cleanup)
+       cleanup()
+
+       c.RunDockerComposeCmd(t, "-f", "./fixtures/wait/compose.yaml", 
"--project-name", projectName, "up", "-d")
+       c.RunDockerComposeCmd(t, "--project-name", projectName, "wait", 
"slower")
+}
+
+func TestWaitOnInfinity(t *testing.T) {
+       const projectName = "e2e-wait-infinity"
+       c := NewParallelCLI(t)
+
+       cleanup := func() {
+               c.RunDockerComposeCmd(t, "--project-name", projectName, "down", 
"--timeout=0", "--remove-orphans")
+       }
+       t.Cleanup(cleanup)
+       cleanup()
+
+       c.RunDockerComposeCmd(t, "-f", "./fixtures/wait/compose.yaml", 
"--project-name", projectName, "up", "-d")
+
+       cmd := c.NewDockerComposeCmd(t, "--project-name", projectName, "wait", 
"infinity")
+       r := icmd.StartCmd(cmd)
+       assert.NilError(t, r.Error)
+       t.Cleanup(func() {
+               if r.Cmd.Process != nil {
+                       _ = r.Cmd.Process.Kill()
+               }
+       })
+
+       finished := make(chan struct{})
+       ticker := time.NewTicker(7 * time.Second)
+       go func() {
+               _ = r.Cmd.Wait()
+               finished <- struct{}{}
+       }()
+
+       select {
+       case <-finished:
+               t.Fatal("wait infinity should not finish")
+       case <-ticker.C:
+       }
+}
+
+func TestWaitAndDrop(t *testing.T) {
+       const projectName = "e2e-wait-and-drop"
+       c := NewParallelCLI(t)
+
+       cleanup := func() {
+               c.RunDockerComposeCmd(t, "--project-name", projectName, "down", 
"--timeout=0", "--remove-orphans")
+       }
+       t.Cleanup(cleanup)
+       cleanup()
+
+       c.RunDockerComposeCmd(t, "-f", "./fixtures/wait/compose.yaml", 
"--project-name", projectName, "up", "-d")
+       c.RunDockerComposeCmd(t, "--project-name", projectName, "wait", 
"--down-project", "faster")
+
+       res := c.RunDockerCmd(t, "ps", "--all")
+       assert.Assert(t, !strings.Contains(res.Combined(), projectName), 
res.Combined())
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/mocks/mock_docker_compose_api.go 
new/compose-2.20.0/pkg/mocks/mock_docker_compose_api.go
--- old/compose-2.19.1/pkg/mocks/mock_docker_compose_api.go     2023-06-29 
22:50:10.000000000 +0200
+++ new/compose-2.20.0/pkg/mocks/mock_docker_compose_api.go     2023-07-10 
19:26:41.000000000 +0200
@@ -423,6 +423,21 @@
        return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Viz", 
reflect.TypeOf((*MockService)(nil).Viz), ctx, project, options)
 }
 
+// Wait mocks base method.
+func (m *MockService) Wait(ctx context.Context, projectName string, options 
api.WaitOptions) (int64, error) {
+       m.ctrl.T.Helper()
+       ret := m.ctrl.Call(m, "Wait", ctx, projectName, options)
+       ret0, _ := ret[0].(int64)
+       ret1, _ := ret[1].(error)
+       return ret0, ret1
+}
+
+// Wait indicates an expected call of Wait.
+func (mr *MockServiceMockRecorder) Wait(ctx, projectName, options interface{}) 
*gomock.Call {
+       mr.mock.ctrl.T.Helper()
+       return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Wait", 
reflect.TypeOf((*MockService)(nil).Wait), ctx, projectName, options)
+}
+
 // Watch mocks base method.
 func (m *MockService) Watch(ctx context.Context, project *types.Project, 
services []string, options api.WatchOptions) error {
        m.ctrl.T.Helper()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/utils/set.go 
new/compose-2.20.0/pkg/utils/set.go
--- old/compose-2.19.1/pkg/utils/set.go 2023-06-29 22:50:10.000000000 +0200
+++ new/compose-2.20.0/pkg/utils/set.go 2023-07-10 19:26:41.000000000 +0200
@@ -47,3 +47,9 @@
        }
        return elements
 }
+
+func (s Set[T]) RemoveAll(elements ...T) {
+       for _, e := range elements {
+               s.Remove(e)
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.19.1/pkg/utils/slices.go 
new/compose-2.20.0/pkg/utils/slices.go
--- old/compose-2.19.1/pkg/utils/slices.go      2023-06-29 22:50:10.000000000 
+0200
+++ new/compose-2.20.0/pkg/utils/slices.go      2023-07-10 19:26:41.000000000 
+0200
@@ -29,7 +29,7 @@
        return false
 }
 
-// RemoveAll removes all elements from origin slice
+// Remove removes all elements from origin slice
 func Remove[T any](origin []T, elements ...T) []T {
        var filtered []T
        for _, v := range origin {

++++++ compose.obsinfo ++++++
--- /var/tmp/diff_new_pack.9pR6tT/_old  2023-07-17 19:23:45.177899585 +0200
+++ /var/tmp/diff_new_pack.9pR6tT/_new  2023-07-17 19:23:45.181899607 +0200
@@ -1,5 +1,5 @@
 name: compose
-version: 2.19.1
-mtime: 1688071810
-commit: c496c230710d299834cf2586d0f75066dc60d06c
+version: 2.20.0
+mtime: 1689010001
+commit: e28b223650807aa24a5c7637b6ad17189fb9276c
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/docker-compose/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.docker-compose.new.3193/vendor.tar.gz differ: char 
5, line 1

Reply via email to