@@ -60,23 +60,42 @@ func Rebase(orig, oldBase, newBase v1.Image) (v1.Image, error) {
6060 return nil , fmt .Errorf ("failed to get config for original: %v" , err )
6161 }
6262
63+ newConfig , err := newBase .ConfigFile ()
64+ if err != nil {
65+ return nil , fmt .Errorf ("could not get config for new base: %v" , err )
66+ }
67+
6368 // Stitch together an image that contains:
6469 // - original image's config
70+ // - new base image's os/arch properties
6571 // - new base image's layers + top of original image's layers
6672 // - new base image's history + top of original image's history
6773 rebasedImage , err := Config (empty .Image , * origConfig .Config .DeepCopy ())
6874 if err != nil {
6975 return nil , fmt .Errorf ("failed to create empty image with original config: %v" , err )
7076 }
77+
78+ // Add new config properties from existing images.
79+ rebasedConfig , err := rebasedImage .ConfigFile ()
80+ if err != nil {
81+ return nil , fmt .Errorf ("could not get config for rebased image: %v" , err )
82+ }
83+ // OS/Arch properties from new base
84+ rebasedConfig .Architecture = newConfig .Architecture
85+ rebasedConfig .OS = newConfig .OS
86+ rebasedConfig .OSVersion = newConfig .OSVersion
87+
88+ // Apply config properties to rebased.
89+ rebasedImage , err = ConfigFile (rebasedImage , rebasedConfig )
90+ if err != nil {
91+ return nil , fmt .Errorf ("failed to replace config for rebased image: %v" , err )
92+ }
93+
7194 // Get new base layers and config for history.
7295 newBaseLayers , err := newBase .Layers ()
7396 if err != nil {
7497 return nil , fmt .Errorf ("could not get new base layers for new base: %v" , err )
7598 }
76- newConfig , err := newBase .ConfigFile ()
77- if err != nil {
78- return nil , fmt .Errorf ("could not get config for new base: %v" , err )
79- }
8099 // Add new base layers.
81100 rebasedImage , err = Append (rebasedImage , createAddendums (0 , 0 , newConfig .History , newBaseLayers )... )
82101 if err != nil {
0 commit comments