mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 01:53:42 +08:00 
			
		
		
		
	commitc41b006be1updated the version of docker/docker in go.mod, but possibly overlooked that there was still a replace rule present. As a result the version was not actually updated. This patch removes the replace rule, updating docker/docker to 9f28837c1d93 full diff:4634ce647c...9f28837c1dSigned-off-by: Sebastiaan van Stijn <github@gone.nl>
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// +build go1.13
 | 
						|
 | 
						|
package mount
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"sort"
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	"github.com/moby/sys/mountinfo"
 | 
						|
)
 | 
						|
 | 
						|
// mountError records an error from mount or unmount operation
 | 
						|
type mountError struct {
 | 
						|
	op             string
 | 
						|
	source, target string
 | 
						|
	flags          uintptr
 | 
						|
	data           string
 | 
						|
	err            error
 | 
						|
}
 | 
						|
 | 
						|
func (e *mountError) Error() string {
 | 
						|
	out := e.op + " "
 | 
						|
 | 
						|
	if e.source != "" {
 | 
						|
		out += e.source + ":" + e.target
 | 
						|
	} else {
 | 
						|
		out += e.target
 | 
						|
	}
 | 
						|
 | 
						|
	if e.flags != uintptr(0) {
 | 
						|
		out += ", flags: 0x" + strconv.FormatUint(uint64(e.flags), 16)
 | 
						|
	}
 | 
						|
	if e.data != "" {
 | 
						|
		out += ", data: " + e.data
 | 
						|
	}
 | 
						|
 | 
						|
	out += ": " + e.err.Error()
 | 
						|
	return out
 | 
						|
}
 | 
						|
 | 
						|
// Cause returns the underlying cause of the error.
 | 
						|
// This is a convention used in github.com/pkg/errors
 | 
						|
func (e *mountError) Cause() error {
 | 
						|
	return e.err
 | 
						|
}
 | 
						|
 | 
						|
// Unwrap returns the underlying error.
 | 
						|
// This is a convention used in golang 1.13+
 | 
						|
func (e *mountError) Unwrap() error {
 | 
						|
	return e.err
 | 
						|
}
 | 
						|
 | 
						|
// Mount will mount filesystem according to the specified configuration.
 | 
						|
// Options must be specified like the mount or fstab unix commands:
 | 
						|
// "opt1=val1,opt2=val2". See flags.go for supported option flags.
 | 
						|
func Mount(device, target, mType, options string) error {
 | 
						|
	flag, data := parseOptions(options)
 | 
						|
	return mount(device, target, mType, uintptr(flag), data)
 | 
						|
}
 | 
						|
 | 
						|
// Unmount lazily unmounts a filesystem on supported platforms, otherwise
 | 
						|
// does a normal unmount.
 | 
						|
func Unmount(target string) error {
 | 
						|
	return unmount(target, mntDetach)
 | 
						|
}
 | 
						|
 | 
						|
// RecursiveUnmount unmounts the target and all mounts underneath, starting with
 | 
						|
// the deepsest mount first.
 | 
						|
func RecursiveUnmount(target string) error {
 | 
						|
	mounts, err := mountinfo.GetMounts(mountinfo.PrefixFilter(target))
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	// Make the deepest mount be first
 | 
						|
	sort.Slice(mounts, func(i, j int) bool {
 | 
						|
		return len(mounts[i].Mountpoint) > len(mounts[j].Mountpoint)
 | 
						|
	})
 | 
						|
 | 
						|
	var suberr error
 | 
						|
	for i, m := range mounts {
 | 
						|
		err = unmount(m.Mountpoint, mntDetach)
 | 
						|
		if err != nil {
 | 
						|
			if i == len(mounts)-1 { // last mount
 | 
						|
				return fmt.Errorf("%w (possible cause: %s)", err, suberr)
 | 
						|
			}
 | 
						|
			// This is a submount, we can ignore the error for now,
 | 
						|
			// the final unmount will fail if this is a real problem.
 | 
						|
			// With that in mind, the _first_ failed unmount error
 | 
						|
			// might be the real error cause, so let's keep it.
 | 
						|
			if suberr == nil {
 | 
						|
				suberr = err
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 |