mirror of
https://github.com/containers/podman.git
synced 2025-06-21 01:19:15 +08:00
Merge pull request #4215 from TomSweeneyRedHat/dev/tsweeney/fixsquash
Add squash-all, fix squash option in build
This commit is contained in:
@ -17,6 +17,7 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/pflag"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -27,6 +28,7 @@ var (
|
|||||||
fromAndBudValues buildahcli.FromAndBudResults
|
fromAndBudValues buildahcli.FromAndBudResults
|
||||||
userNSValues buildahcli.UserNSResults
|
userNSValues buildahcli.UserNSResults
|
||||||
namespaceValues buildahcli.NameSpaceResults
|
namespaceValues buildahcli.NameSpaceResults
|
||||||
|
podBuildValues cliconfig.PodmanBuildResults
|
||||||
|
|
||||||
_buildCommand = &cobra.Command{
|
_buildCommand = &cobra.Command{
|
||||||
Use: "build [flags] CONTEXT",
|
Use: "build [flags] CONTEXT",
|
||||||
@ -40,6 +42,7 @@ var (
|
|||||||
buildCommand.FromAndBudResults = &fromAndBudValues
|
buildCommand.FromAndBudResults = &fromAndBudValues
|
||||||
buildCommand.LayerResults = &layerValues
|
buildCommand.LayerResults = &layerValues
|
||||||
buildCommand.NameSpaceResults = &namespaceValues
|
buildCommand.NameSpaceResults = &namespaceValues
|
||||||
|
buildCommand.PodmanBuildResults = &podBuildValues
|
||||||
buildCommand.Remote = remoteclient
|
buildCommand.Remote = remoteclient
|
||||||
return buildCmd(&buildCommand)
|
return buildCmd(&buildCommand)
|
||||||
},
|
},
|
||||||
@ -73,15 +76,30 @@ func init() {
|
|||||||
logrus.Error("unable to set force-rm flag to true")
|
logrus.Error("unable to set force-rm flag to true")
|
||||||
}
|
}
|
||||||
flag.DefValue = "true"
|
flag.DefValue = "true"
|
||||||
|
podmanBuildFlags := GetPodmanBuildFlags(&podBuildValues)
|
||||||
|
flag = podmanBuildFlags.Lookup("squash-all")
|
||||||
|
if err := flag.Value.Set("false"); err != nil {
|
||||||
|
logrus.Error("unable to set squash-all flag to false")
|
||||||
|
}
|
||||||
|
|
||||||
|
flag.DefValue = "true"
|
||||||
fromAndBugFlags := buildahcli.GetFromAndBudFlags(&fromAndBudValues, &userNSValues, &namespaceValues)
|
fromAndBugFlags := buildahcli.GetFromAndBudFlags(&fromAndBudValues, &userNSValues, &namespaceValues)
|
||||||
|
|
||||||
flags.AddFlagSet(&budFlags)
|
flags.AddFlagSet(&budFlags)
|
||||||
flags.AddFlagSet(&layerFlags)
|
|
||||||
flags.AddFlagSet(&fromAndBugFlags)
|
flags.AddFlagSet(&fromAndBugFlags)
|
||||||
|
flags.AddFlagSet(&layerFlags)
|
||||||
|
flags.AddFlagSet(&podmanBuildFlags)
|
||||||
markFlagHidden(flags, "signature-policy")
|
markFlagHidden(flags, "signature-policy")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPodmanBuildFlags flags used only by `podman build` and not by
|
||||||
|
// `buildah bud`.
|
||||||
|
func GetPodmanBuildFlags(flags *cliconfig.PodmanBuildResults) pflag.FlagSet {
|
||||||
|
fs := pflag.FlagSet{}
|
||||||
|
fs.BoolVar(&flags.SquashAll, "squash-all", false, "Squash all layers into a single layer.")
|
||||||
|
return fs
|
||||||
|
}
|
||||||
|
|
||||||
func getContainerfiles(files []string) []string {
|
func getContainerfiles(files []string) []string {
|
||||||
var containerfiles []string
|
var containerfiles []string
|
||||||
for _, f := range files {
|
for _, f := range files {
|
||||||
@ -119,6 +137,12 @@ func getNsValues(c *cliconfig.BuildValues) ([]buildah.NamespaceOption, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func buildCmd(c *cliconfig.BuildValues) error {
|
func buildCmd(c *cliconfig.BuildValues) error {
|
||||||
|
if (c.Flags().Changed("squash") && c.Flags().Changed("layers")) ||
|
||||||
|
(c.Flags().Changed("squash-all") && c.Flags().Changed("layers")) ||
|
||||||
|
(c.Flags().Changed("squash-all") && c.Flags().Changed("squash")) {
|
||||||
|
return fmt.Errorf("cannot specify squash, squash-all and layers options together")
|
||||||
|
}
|
||||||
|
|
||||||
// The following was taken directly from containers/buildah/cmd/bud.go
|
// The following was taken directly from containers/buildah/cmd/bud.go
|
||||||
// TODO Find a away to vendor more of this in rather than copy from bud
|
// TODO Find a away to vendor more of this in rather than copy from bud
|
||||||
output := ""
|
output := ""
|
||||||
@ -293,6 +317,22 @@ func buildCmd(c *cliconfig.BuildValues) error {
|
|||||||
Volumes: c.Volumes,
|
Volumes: c.Volumes,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// `buildah bud --layers=false` acts like `docker build --squash` does.
|
||||||
|
// That is all of the new layers created during the build process are
|
||||||
|
// condensed into one, any layers present prior to this build are retained
|
||||||
|
// without condensing. `buildah bud --squash` squashes both new and old
|
||||||
|
// layers down into one. Translate Podman commands into Buildah.
|
||||||
|
// Squash invoked, retain old layers, squash new layers into one.
|
||||||
|
if c.Flags().Changed("squash") && c.Squash {
|
||||||
|
c.Squash = false
|
||||||
|
layers = false
|
||||||
|
}
|
||||||
|
// Squash-all invoked, squash both new and old layers into one.
|
||||||
|
if c.Flags().Changed("squash-all") {
|
||||||
|
c.Squash = true
|
||||||
|
layers = false
|
||||||
|
}
|
||||||
|
|
||||||
options := imagebuildah.BuildOptions{
|
options := imagebuildah.BuildOptions{
|
||||||
CommonBuildOpts: &buildOpts,
|
CommonBuildOpts: &buildOpts,
|
||||||
AdditionalTags: tags,
|
AdditionalTags: tags,
|
||||||
|
@ -12,13 +12,20 @@ type RunValues struct {
|
|||||||
PodmanCommand
|
PodmanCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PodmanBuildResults represents the results for Podman Build flags
|
||||||
|
// that are unique to Podman.
|
||||||
|
type PodmanBuildResults struct {
|
||||||
|
SquashAll bool
|
||||||
|
}
|
||||||
|
|
||||||
type BuildValues struct {
|
type BuildValues struct {
|
||||||
PodmanCommand
|
PodmanCommand
|
||||||
*buildahcli.BudResults
|
*buildahcli.BudResults
|
||||||
*buildahcli.UserNSResults
|
*buildahcli.UserNSResults
|
||||||
*buildahcli.FromAndBudResults
|
*buildahcli.FromAndBudResults
|
||||||
*buildahcli.NameSpaceResults
|
|
||||||
*buildahcli.LayerResults
|
*buildahcli.LayerResults
|
||||||
|
*buildahcli.NameSpaceResults
|
||||||
|
*PodmanBuildResults
|
||||||
}
|
}
|
||||||
|
|
||||||
type CpValues struct {
|
type CpValues struct {
|
||||||
|
@ -1246,6 +1246,7 @@ _podman_build() {
|
|||||||
-q
|
-q
|
||||||
--rm
|
--rm
|
||||||
--squash
|
--squash
|
||||||
|
--squash-all
|
||||||
--tls-verify
|
--tls-verify
|
||||||
"
|
"
|
||||||
|
|
||||||
|
@ -405,6 +405,11 @@ If you omit the unit, the system uses bytes. If you omit the size entirely, the
|
|||||||
|
|
||||||
**--squash**
|
**--squash**
|
||||||
|
|
||||||
|
Squash all of the image's new layers into a single new layer; any preexisting layers
|
||||||
|
are not squashed.
|
||||||
|
|
||||||
|
**--squash-all**
|
||||||
|
|
||||||
Squash all of the new image's layers (including those inherited from a base image) into a single new layer.
|
Squash all of the new image's layers (including those inherited from a base image) into a single new layer.
|
||||||
|
|
||||||
**--tag**, **-t**=*imageName*
|
**--tag**, **-t**=*imageName*
|
||||||
|
Reference in New Issue
Block a user