diff --git a/diff/windows/windows.go b/diff/windows/windows.go index b694b4d67..0778ccf82 100644 --- a/diff/windows/windows.go +++ b/diff/windows/windows.go @@ -335,15 +335,7 @@ func mountsToLayerAndParents(mounts []mount.Mount) (string, []string, error) { return "", nil, err } - isView := false - for _, o := range mnt.Options { - if o == "ro" { - isView = true - break - } - } - - if isView { + if mnt.ReadOnly() { if mnt.Type == "bind" && len(parentLayerPaths) != 0 { return "", nil, fmt.Errorf("unexpected bind-mount View with parents: %w", errdefs.ErrInvalidArgument) } else if mnt.Type == "bind" { diff --git a/mount/mount_windows.go b/mount/mount_windows.go index 9b7707f21..e964c9bfb 100644 --- a/mount/mount_windows.go +++ b/mount/mount_windows.go @@ -38,18 +38,19 @@ var ( ErrNotImplementOnWindows = errors.New("not implemented under windows") ) -// Mount to the provided target. -func (m *Mount) mount(target string) (retErr error) { - readOnly := false +func (m *Mount) ReadOnly() bool { for _, option := range m.Options { if option == "ro" { - readOnly = true - break + return true } } + return false +} +// Mount to the provided target. +func (m *Mount) mount(target string) (retErr error) { if m.Type == "bind" { - if err := bindfilter.ApplyFileBinding(target, m.Source, readOnly); err != nil { + if err := bindfilter.ApplyFileBinding(target, m.Source, m.ReadOnly()); err != nil { return fmt.Errorf("failed to bind-mount to %s: %w", target, err) } return nil @@ -98,7 +99,7 @@ func (m *Mount) mount(target string) (retErr error) { return fmt.Errorf("failed to get volume path for layer %s: %w", m.Source, err) } - if err := bindfilter.ApplyFileBinding(target, volume, readOnly); err != nil { + if err := bindfilter.ApplyFileBinding(target, volume, m.ReadOnly()); err != nil { return fmt.Errorf("failed to set volume mount path for layer %s: %w", m.Source, err) } defer func() {