The lifecycle currently does some bookkeeping to map a layer's "id" ("buildpack-id:layer-name") to the SHA of the layer in the previous image. It then compares this SHA to the SHA of the layer directory in the build container to determine if a layer should be added or re-used.
This works fine for layers that have an id (i.e., were created by a buildpack) but for extension layers we don't have a way to construct the mapping and simply want to add the layer if it's not present in the previous image, otherwise re-use it.
An imgutil.Image already has all the info necessary to determine whether a layer should be added or re-used, so adding an interface method is helpful for the lifecycle to avoid having to know anything about the previous image (at least for extension layers).
The lifecycle currently does some bookkeeping to map a layer's "id" ("buildpack-id:layer-name") to the SHA of the layer in the previous image. It then compares this SHA to the SHA of the layer directory in the build container to determine if a layer should be added or re-used.
This works fine for layers that have an id (i.e., were created by a buildpack) but for extension layers we don't have a way to construct the mapping and simply want to add the layer if it's not present in the previous image, otherwise re-use it.
An imgutil.Image already has all the info necessary to determine whether a layer should be added or re-used, so adding an interface method is helpful for the lifecycle to avoid having to know anything about the previous image (at least for extension layers).