Split imageNameForSaveDestination from saveCmd

We will need to call it from two places in the future.

Should not change behavior, the code is pretty unchanged
(down to using confusing parameter names, which we will change
immediately) (but does not add unit tests).

Signed-off-by: Miloslav Trmač <mitr@redhat.com>

Closes: #1176
Approved by: rhatdan
This commit is contained in:
Miloslav Trmač
2018-07-28 03:43:03 +02:00
committed by Atomic Bot
parent a4b15548d1
commit c27c6c6707

View File

@ -129,19 +129,9 @@ func saveCmd(c *cli.Context) error {
dest := dst dest := dst
// need dest to be in the format transport:path:reference for the following transports // need dest to be in the format transport:path:reference for the following transports
if strings.Contains(dst, libpod.OCIArchive) || strings.Contains(dst, libpod.DockerArchive) { if strings.Contains(dst, libpod.OCIArchive) || strings.Contains(dst, libpod.DockerArchive) {
if !strings.Contains(newImage.ID(), source) { destImageName := imageNameForSaveDestination(newImage, source)
prepend := "" if destImageName != "" {
if !strings.Contains(source, libpodImage.DefaultLocalRepo) { dest = fmt.Sprintf("%s:%s", dst, destImageName)
// we need to check if localhost was added to the image name in NewFromLocal
for _, name := range newImage.Names() {
// if the user searched for the image whose tag was prepended with localhost, we'll need to prepend localhost to successfully search
if strings.Contains(name, libpodImage.DefaultLocalRepo) && strings.Contains(name, source) {
prepend = fmt.Sprintf("%s/", libpodImage.DefaultLocalRepo)
break
}
}
}
dest = fmt.Sprintf("%s:%s%s", dst, prepend, source)
} }
} }
if err := newImage.PushImage(getContext(), dest, manifestType, "", "", writer, c.Bool("compress"), libpodImage.SigningOptions{}, &libpodImage.DockerRegistryOptions{}, false, additionaltags); err != nil { if err := newImage.PushImage(getContext(), dest, manifestType, "", "", writer, c.Bool("compress"), libpodImage.SigningOptions{}, &libpodImage.DockerRegistryOptions{}, false, additionaltags); err != nil {
@ -153,3 +143,21 @@ func saveCmd(c *cli.Context) error {
return nil return nil
} }
func imageNameForSaveDestination(newImage *libpodImage.Image, source string) string {
if !strings.Contains(newImage.ID(), source) {
prepend := ""
if !strings.Contains(source, libpodImage.DefaultLocalRepo) {
// we need to check if localhost was added to the image name in NewFromLocal
for _, name := range newImage.Names() {
// if the user searched for the image whose tag was prepended with localhost, we'll need to prepend localhost to successfully search
if strings.Contains(name, libpodImage.DefaultLocalRepo) && strings.Contains(name, source) {
prepend = fmt.Sprintf("%s/", libpodImage.DefaultLocalRepo)
break
}
}
}
return fmt.Sprintf("%s%s", prepend, source)
}
return ""
}