fix: preserve portable rollback mount identity
This commit is contained in:
@@ -42,12 +42,13 @@ type Image struct {
|
||||
|
||||
// Mount is the complete persistence identity relevant to safe core recreation.
|
||||
type Mount struct {
|
||||
Type string `json:"type"`
|
||||
Name string `json:"name,omitempty"`
|
||||
SourceSHA256 string `json:"source_sha256"`
|
||||
Destination string `json:"destination"`
|
||||
RW bool `json:"rw"`
|
||||
Options string `json:"options,omitempty"`
|
||||
Type string `json:"type"`
|
||||
Name string `json:"name,omitempty"`
|
||||
SourceSHA256 string `json:"source_sha256"`
|
||||
SourceAliases []string `json:"-"`
|
||||
Destination string `json:"destination"`
|
||||
RW bool `json:"rw"`
|
||||
Options string `json:"options,omitempty"`
|
||||
}
|
||||
|
||||
// Target records the immutable input selected by the operator. Source is either build or a
|
||||
@@ -136,17 +137,27 @@ func writeFileDurably(path, prefix string, contents []byte) error {
|
||||
}
|
||||
|
||||
func mountSourceHash(source string) string {
|
||||
source = filepath.Clean(source)
|
||||
for _, dockerDesktopPrefix := range []string{"/host_mnt/private/var/", "/host_mnt/Users/"} {
|
||||
if strings.HasPrefix(source, dockerDesktopPrefix) {
|
||||
source = strings.TrimPrefix(source, "/host_mnt")
|
||||
break
|
||||
}
|
||||
}
|
||||
sum := sha256.Sum256([]byte(source))
|
||||
return fmt.Sprintf("%x", sum[:])
|
||||
}
|
||||
|
||||
func mountSourceAliases(mountType, source, goos string) []string {
|
||||
if mountType != "bind" || goos != "darwin" {
|
||||
return nil
|
||||
}
|
||||
source = filepath.Clean(source)
|
||||
var alias string
|
||||
switch {
|
||||
case strings.HasPrefix(source, "/host_mnt/private/var/"), strings.HasPrefix(source, "/host_mnt/Users/"):
|
||||
alias = strings.TrimPrefix(source, "/host_mnt")
|
||||
case strings.HasPrefix(source, "/private/var/"), strings.HasPrefix(source, "/Users/"):
|
||||
alias = "/host_mnt" + source
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
return []string{mountSourceHash(alias)}
|
||||
}
|
||||
|
||||
func mountFingerprint(mounts []Mount) string {
|
||||
values := make([]string, len(mounts))
|
||||
for i, mount := range mounts {
|
||||
|
||||
Reference in New Issue
Block a user