From c94d34f783944ff6586846ccd11e86925fcee171 Mon Sep 17 00:00:00 2001
From: John Howard <jhoward@microsoft.com>
Date: Thu, 18 Jan 2018 12:56:28 -0800
Subject: [PATCH] Remove OS() from layer interface

Signed-off-by: John Howard <jhoward@microsoft.com>
---
 distribution/xfer/download_test.go | 8 --------
 image/store.go                     | 9 ++++++++-
 layer/empty.go                     | 4 ----
 layer/layer.go                     | 7 -------
 layer/layer_store.go               | 4 ----
 layer/mounted_layer.go             | 4 ----
 layer/ro_layer.go                  | 4 ----
 migrate/v1/migratev1_test.go       | 4 ----
 8 files changed, 8 insertions(+), 36 deletions(-)

diff --git a/distribution/xfer/download_test.go b/distribution/xfer/download_test.go
index 21adb594a2..0d86b658c1 100644
--- a/distribution/xfer/download_test.go
+++ b/distribution/xfer/download_test.go
@@ -57,10 +57,6 @@ func (ml *mockLayer) DiffSize() (size int64, err error) {
 	return 0, nil
 }
 
-func (ml *mockLayer) OS() string {
-	return ml.os
-}
-
 func (ml *mockLayer) Metadata() (map[string]string, error) {
 	return make(map[string]string), nil
 }
@@ -158,10 +154,6 @@ func (ls *mockLayerStore) DriverName() string {
 	return "mock"
 }
 
-func (ls *mockLayerStore) OS() string {
-	return runtime.GOOS
-}
-
 type mockDownloadDescriptor struct {
 	currentDownloads *int32
 	id               string
diff --git a/image/store.go b/image/store.go
index 1e1d5bfe14..60f499c9fe 100644
--- a/image/store.go
+++ b/image/store.go
@@ -224,6 +224,13 @@ func (is *store) Delete(id ID) ([]layer.Metadata, error) {
 	if imageMeta == nil {
 		return nil, fmt.Errorf("unrecognized image ID %s", id.String())
 	}
+	img, err := is.Get(id)
+	if err != nil {
+		return nil, fmt.Errorf("unrecognized image %s, %v", id.String(), err)
+	}
+	if !system.IsOSSupported(img.OperatingSystem()) {
+		return nil, fmt.Errorf("unsupported image operating system %q", img.OperatingSystem())
+	}
 	for id := range imageMeta.children {
 		is.fs.DeleteMetadata(id.Digest(), "parent")
 	}
@@ -238,7 +245,7 @@ func (is *store) Delete(id ID) ([]layer.Metadata, error) {
 	is.fs.Delete(id.Digest())
 
 	if imageMeta.layer != nil {
-		return is.lss[imageMeta.layer.OS()].Release(imageMeta.layer)
+		return is.lss[img.OperatingSystem()].Release(imageMeta.layer)
 	}
 	return nil, nil
 }
diff --git a/layer/empty.go b/layer/empty.go
index e8ae2a7457..80f2c12439 100644
--- a/layer/empty.go
+++ b/layer/empty.go
@@ -43,10 +43,6 @@ func (el *emptyLayer) Parent() Layer {
 	return nil
 }
 
-func (el *emptyLayer) OS() string {
-	return ""
-}
-
 func (el *emptyLayer) Size() (size int64, err error) {
 	return 0, nil
 }
diff --git a/layer/layer.go b/layer/layer.go
index 12e7c4eb4d..2603ac5921 100644
--- a/layer/layer.go
+++ b/layer/layer.go
@@ -100,9 +100,6 @@ type Layer interface {
 	// Parent returns the next layer in the layer chain.
 	Parent() Layer
 
-	// OS returns the operating system of the layer
-	OS() string
-
 	// Size returns the size of the entire layer chain. The size
 	// is calculated from the total size of all files in the layers.
 	Size() (int64, error)
@@ -148,9 +145,6 @@ type RWLayer interface {
 
 	// Metadata returns the low level metadata for the mutable layer
 	Metadata() (map[string]string, error)
-
-	// OS returns the operating system of the writable layer
-	OS() string
 }
 
 // Metadata holds information about a
@@ -199,7 +193,6 @@ type Store interface {
 	Cleanup() error
 	DriverStatus() [][2]string
 	DriverName() string
-	OS() string
 }
 
 // DescribableStore represents a layer store capable of storing
diff --git a/layer/layer_store.go b/layer/layer_store.go
index 8ae559ed76..c6225386d0 100644
--- a/layer/layer_store.go
+++ b/layer/layer_store.go
@@ -725,10 +725,6 @@ func (ls *layerStore) DriverName() string {
 	return ls.driver.String()
 }
 
-func (ls *layerStore) OS() string {
-	return ls.os
-}
-
 type naiveDiffPathDriver struct {
 	graphdriver.Driver
 }
diff --git a/layer/mounted_layer.go b/layer/mounted_layer.go
index c7decca32e..47ef966987 100644
--- a/layer/mounted_layer.go
+++ b/layer/mounted_layer.go
@@ -46,10 +46,6 @@ func (ml *mountedLayer) Parent() Layer {
 	return nil
 }
 
-func (ml *mountedLayer) OS() string {
-	return ml.layerStore.os
-}
-
 func (ml *mountedLayer) Size() (int64, error) {
 	return ml.layerStore.driver.DiffSize(ml.mountID, ml.cacheParent())
 }
diff --git a/layer/ro_layer.go b/layer/ro_layer.go
index 848d6742ce..29fa85362a 100644
--- a/layer/ro_layer.go
+++ b/layer/ro_layer.go
@@ -69,10 +69,6 @@ func (rl *roLayer) Parent() Layer {
 	return rl.parent
 }
 
-func (rl *roLayer) OS() string {
-	return rl.layerStore.os
-}
-
 func (rl *roLayer) Size() (size int64, err error) {
 	if rl.parent != nil {
 		size, err = rl.parent.Size()
diff --git a/migrate/v1/migratev1_test.go b/migrate/v1/migratev1_test.go
index 65804ffaf2..28b7df3f3d 100644
--- a/migrate/v1/migratev1_test.go
+++ b/migrate/v1/migratev1_test.go
@@ -432,10 +432,6 @@ func (l *mockLayer) DiffSize() (int64, error) {
 	return 0, nil
 }
 
-func (l *mockLayer) OS() string {
-	return ""
-}
-
 func (l *mockLayer) Metadata() (map[string]string, error) {
 	return nil, nil
 }