mirror of
https://github.com/containers/podman.git
synced 2025-06-18 15:39:08 +08:00
Vendor c/storage 1.13.3
Pull in fixes to avoid double locking the mounts list when doing a save or cleanup. Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
This commit is contained in:
2
go.mod
2
go.mod
@ -17,7 +17,7 @@ require (
|
|||||||
github.com/containers/conmon v0.3.0 // indirect
|
github.com/containers/conmon v0.3.0 // indirect
|
||||||
github.com/containers/image v3.0.2+incompatible
|
github.com/containers/image v3.0.2+incompatible
|
||||||
github.com/containers/psgo v1.3.1
|
github.com/containers/psgo v1.3.1
|
||||||
github.com/containers/storage v1.13.2
|
github.com/containers/storage v1.13.3
|
||||||
github.com/coreos/bbolt v1.3.3 // indirect
|
github.com/coreos/bbolt v1.3.3 // indirect
|
||||||
github.com/coreos/etcd v3.3.13+incompatible // indirect
|
github.com/coreos/etcd v3.3.13+incompatible // indirect
|
||||||
github.com/coreos/go-iptables v0.4.2 // indirect
|
github.com/coreos/go-iptables v0.4.2 // indirect
|
||||||
|
2
go.sum
2
go.sum
@ -108,6 +108,8 @@ github.com/containers/storage v1.13.1 h1:rjVirLS9fCGkUFlLDZEoGDDUugtIf46DufWvJu0
|
|||||||
github.com/containers/storage v1.13.1/go.mod h1:6D8nK2sU9V7nEmAraINRs88ZEscM5C5DK+8Npp27GeA=
|
github.com/containers/storage v1.13.1/go.mod h1:6D8nK2sU9V7nEmAraINRs88ZEscM5C5DK+8Npp27GeA=
|
||||||
github.com/containers/storage v1.13.2 h1:UXZ0Ckmk6+6+4vj2M2ywruVtH97pnRoAhTG8ctd+yQI=
|
github.com/containers/storage v1.13.2 h1:UXZ0Ckmk6+6+4vj2M2ywruVtH97pnRoAhTG8ctd+yQI=
|
||||||
github.com/containers/storage v1.13.2/go.mod h1:6D8nK2sU9V7nEmAraINRs88ZEscM5C5DK+8Npp27GeA=
|
github.com/containers/storage v1.13.2/go.mod h1:6D8nK2sU9V7nEmAraINRs88ZEscM5C5DK+8Npp27GeA=
|
||||||
|
github.com/containers/storage v1.13.3 h1:9EzTXZXG/8SGD9MnkSCe/jLq3QldcE1QlgW7vePEsjw=
|
||||||
|
github.com/containers/storage v1.13.3/go.mod h1:6D8nK2sU9V7nEmAraINRs88ZEscM5C5DK+8Npp27GeA=
|
||||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
|
1
vendor/github.com/containers/storage/Makefile
generated
vendored
1
vendor/github.com/containers/storage/Makefile
generated
vendored
@ -1,4 +1,5 @@
|
|||||||
export GO111MODULE=off
|
export GO111MODULE=off
|
||||||
|
export GOPROXY=https://proxy.golang.org
|
||||||
|
|
||||||
.PHONY: \
|
.PHONY: \
|
||||||
all \
|
all \
|
||||||
|
2
vendor/github.com/containers/storage/VERSION
generated
vendored
2
vendor/github.com/containers/storage/VERSION
generated
vendored
@ -1 +1 @@
|
|||||||
1.13.3-dev
|
1.13.3
|
||||||
|
30
vendor/github.com/containers/storage/images.go
generated
vendored
30
vendor/github.com/containers/storage/images.go
generated
vendored
@ -372,7 +372,7 @@ func (r *imageStore) ClearFlag(id string, flag string) error {
|
|||||||
}
|
}
|
||||||
image, ok := r.lookup(id)
|
image, ok := r.lookup(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return ErrImageUnknown
|
return errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
delete(image.Flags, flag)
|
delete(image.Flags, flag)
|
||||||
return r.Save()
|
return r.Save()
|
||||||
@ -384,7 +384,7 @@ func (r *imageStore) SetFlag(id string, flag string, value interface{}) error {
|
|||||||
}
|
}
|
||||||
image, ok := r.lookup(id)
|
image, ok := r.lookup(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return ErrImageUnknown
|
return errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
if image.Flags == nil {
|
if image.Flags == nil {
|
||||||
image.Flags = make(map[string]interface{})
|
image.Flags = make(map[string]interface{})
|
||||||
@ -456,14 +456,14 @@ func (r *imageStore) addMappedTopLayer(id, layer string) error {
|
|||||||
image.MappedTopLayers = append(image.MappedTopLayers, layer)
|
image.MappedTopLayers = append(image.MappedTopLayers, layer)
|
||||||
return r.Save()
|
return r.Save()
|
||||||
}
|
}
|
||||||
return ErrImageUnknown
|
return errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *imageStore) Metadata(id string) (string, error) {
|
func (r *imageStore) Metadata(id string) (string, error) {
|
||||||
if image, ok := r.lookup(id); ok {
|
if image, ok := r.lookup(id); ok {
|
||||||
return image.Metadata, nil
|
return image.Metadata, nil
|
||||||
}
|
}
|
||||||
return "", ErrImageUnknown
|
return "", errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *imageStore) SetMetadata(id, metadata string) error {
|
func (r *imageStore) SetMetadata(id, metadata string) error {
|
||||||
@ -474,7 +474,7 @@ func (r *imageStore) SetMetadata(id, metadata string) error {
|
|||||||
image.Metadata = metadata
|
image.Metadata = metadata
|
||||||
return r.Save()
|
return r.Save()
|
||||||
}
|
}
|
||||||
return ErrImageUnknown
|
return errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *imageStore) removeName(image *Image, name string) {
|
func (r *imageStore) removeName(image *Image, name string) {
|
||||||
@ -499,7 +499,7 @@ func (r *imageStore) SetNames(id string, names []string) error {
|
|||||||
image.Names = names
|
image.Names = names
|
||||||
return r.Save()
|
return r.Save()
|
||||||
}
|
}
|
||||||
return ErrImageUnknown
|
return errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *imageStore) Delete(id string) error {
|
func (r *imageStore) Delete(id string) error {
|
||||||
@ -508,7 +508,7 @@ func (r *imageStore) Delete(id string) error {
|
|||||||
}
|
}
|
||||||
image, ok := r.lookup(id)
|
image, ok := r.lookup(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return ErrImageUnknown
|
return errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
id = image.ID
|
id = image.ID
|
||||||
toDeleteIndex := -1
|
toDeleteIndex := -1
|
||||||
@ -551,14 +551,14 @@ func (r *imageStore) Get(id string) (*Image, error) {
|
|||||||
if image, ok := r.lookup(id); ok {
|
if image, ok := r.lookup(id); ok {
|
||||||
return copyImage(image), nil
|
return copyImage(image), nil
|
||||||
}
|
}
|
||||||
return nil, ErrImageUnknown
|
return nil, errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *imageStore) Lookup(name string) (id string, err error) {
|
func (r *imageStore) Lookup(name string) (id string, err error) {
|
||||||
if image, ok := r.lookup(name); ok {
|
if image, ok := r.lookup(name); ok {
|
||||||
return image.ID, nil
|
return image.ID, nil
|
||||||
}
|
}
|
||||||
return "", ErrImageUnknown
|
return "", errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *imageStore) Exists(id string) bool {
|
func (r *imageStore) Exists(id string) bool {
|
||||||
@ -570,7 +570,7 @@ func (r *imageStore) ByDigest(d digest.Digest) ([]*Image, error) {
|
|||||||
if images, ok := r.bydigest[d]; ok {
|
if images, ok := r.bydigest[d]; ok {
|
||||||
return copyImageSlice(images), nil
|
return copyImageSlice(images), nil
|
||||||
}
|
}
|
||||||
return nil, ErrImageUnknown
|
return nil, errors.Wrapf(ErrImageUnknown, "error locating image with digest %q", d)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *imageStore) BigData(id, key string) ([]byte, error) {
|
func (r *imageStore) BigData(id, key string) ([]byte, error) {
|
||||||
@ -579,7 +579,7 @@ func (r *imageStore) BigData(id, key string) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
image, ok := r.lookup(id)
|
image, ok := r.lookup(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, ErrImageUnknown
|
return nil, errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
return ioutil.ReadFile(r.datapath(image.ID, key))
|
return ioutil.ReadFile(r.datapath(image.ID, key))
|
||||||
}
|
}
|
||||||
@ -590,7 +590,7 @@ func (r *imageStore) BigDataSize(id, key string) (int64, error) {
|
|||||||
}
|
}
|
||||||
image, ok := r.lookup(id)
|
image, ok := r.lookup(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return -1, ErrImageUnknown
|
return -1, errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
if image.BigDataSizes == nil {
|
if image.BigDataSizes == nil {
|
||||||
image.BigDataSizes = make(map[string]int64)
|
image.BigDataSizes = make(map[string]int64)
|
||||||
@ -610,7 +610,7 @@ func (r *imageStore) BigDataDigest(id, key string) (digest.Digest, error) {
|
|||||||
}
|
}
|
||||||
image, ok := r.lookup(id)
|
image, ok := r.lookup(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return "", ErrImageUnknown
|
return "", errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
if image.BigDataDigests == nil {
|
if image.BigDataDigests == nil {
|
||||||
image.BigDataDigests = make(map[string]digest.Digest)
|
image.BigDataDigests = make(map[string]digest.Digest)
|
||||||
@ -624,7 +624,7 @@ func (r *imageStore) BigDataDigest(id, key string) (digest.Digest, error) {
|
|||||||
func (r *imageStore) BigDataNames(id string) ([]string, error) {
|
func (r *imageStore) BigDataNames(id string) ([]string, error) {
|
||||||
image, ok := r.lookup(id)
|
image, ok := r.lookup(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, ErrImageUnknown
|
return nil, errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
return copyStringSlice(image.BigDataNames), nil
|
return copyStringSlice(image.BigDataNames), nil
|
||||||
}
|
}
|
||||||
@ -649,7 +649,7 @@ func (r *imageStore) SetBigData(id, key string, data []byte, digestManifest func
|
|||||||
}
|
}
|
||||||
image, ok := r.lookup(id)
|
image, ok := r.lookup(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return ErrImageUnknown
|
return errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
err := os.MkdirAll(r.datadir(image.ID), 0700)
|
err := os.MkdirAll(r.datadir(image.ID), 0700)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
73
vendor/github.com/containers/storage/layers.go
generated
vendored
73
vendor/github.com/containers/storage/layers.go
generated
vendored
@ -363,7 +363,7 @@ func (r *layerStore) Load() error {
|
|||||||
}
|
}
|
||||||
if cleanup, ok := layer.Flags[incompleteFlag]; ok {
|
if cleanup, ok := layer.Flags[incompleteFlag]; ok {
|
||||||
if b, ok := cleanup.(bool); ok && b {
|
if b, ok := cleanup.(bool); ok && b {
|
||||||
err = r.Delete(layer.ID)
|
err = r.deleteInternal(layer.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -372,7 +372,7 @@ func (r *layerStore) Load() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if shouldSave {
|
if shouldSave {
|
||||||
return r.Save()
|
return r.saveLayers()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
@ -416,6 +416,16 @@ func (r *layerStore) loadMounts() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *layerStore) Save() error {
|
func (r *layerStore) Save() error {
|
||||||
|
r.mountsLockfile.Lock()
|
||||||
|
defer r.mountsLockfile.Unlock()
|
||||||
|
defer r.mountsLockfile.Touch()
|
||||||
|
if err := r.saveLayers(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return r.saveMounts()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *layerStore) saveLayers() error {
|
||||||
if !r.IsReadWrite() {
|
if !r.IsReadWrite() {
|
||||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to modify the layer store at %q", r.layerspath())
|
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to modify the layer store at %q", r.layerspath())
|
||||||
}
|
}
|
||||||
@ -431,13 +441,7 @@ func (r *layerStore) Save() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer r.Touch()
|
defer r.Touch()
|
||||||
if err := ioutils.AtomicWriteFile(rpath, jldata, 0600); err != nil {
|
return ioutils.AtomicWriteFile(rpath, jldata, 0600)
|
||||||
return err
|
|
||||||
}
|
|
||||||
r.mountsLockfile.Lock()
|
|
||||||
defer r.mountsLockfile.Unlock()
|
|
||||||
defer r.mountsLockfile.Touch()
|
|
||||||
return r.saveMounts()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *layerStore) saveMounts() error {
|
func (r *layerStore) saveMounts() error {
|
||||||
@ -954,7 +958,7 @@ func (r *layerStore) tspath(id string) string {
|
|||||||
return filepath.Join(r.layerdir, id+tarSplitSuffix)
|
return filepath.Join(r.layerdir, id+tarSplitSuffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *layerStore) Delete(id string) error {
|
func (r *layerStore) deleteInternal(id string) error {
|
||||||
if !r.IsReadWrite() {
|
if !r.IsReadWrite() {
|
||||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to delete layers at %q", r.layerspath())
|
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to delete layers at %q", r.layerspath())
|
||||||
}
|
}
|
||||||
@ -963,23 +967,7 @@ func (r *layerStore) Delete(id string) error {
|
|||||||
return ErrLayerUnknown
|
return ErrLayerUnknown
|
||||||
}
|
}
|
||||||
id = layer.ID
|
id = layer.ID
|
||||||
// The layer may already have been explicitly unmounted, but if not, we
|
err := r.driver.Remove(id)
|
||||||
// should try to clean that up before we start deleting anything at the
|
|
||||||
// driver level.
|
|
||||||
mountCount, err := r.Mounted(id)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "error checking if layer %q is still mounted", id)
|
|
||||||
}
|
|
||||||
for mountCount > 0 {
|
|
||||||
if _, err := r.Unmount(id, false); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
mountCount, err = r.Mounted(id)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "error checking if layer %q is still mounted", id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = r.driver.Remove(id)
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
os.Remove(r.tspath(id))
|
os.Remove(r.tspath(id))
|
||||||
delete(r.byid, id)
|
delete(r.byid, id)
|
||||||
@ -1015,13 +1003,38 @@ func (r *layerStore) Delete(id string) error {
|
|||||||
label.ReleaseLabel(mountLabel)
|
label.ReleaseLabel(mountLabel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err = r.Save(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *layerStore) Delete(id string) error {
|
||||||
|
layer, ok := r.lookup(id)
|
||||||
|
if !ok {
|
||||||
|
return ErrLayerUnknown
|
||||||
|
}
|
||||||
|
id = layer.ID
|
||||||
|
// The layer may already have been explicitly unmounted, but if not, we
|
||||||
|
// should try to clean that up before we start deleting anything at the
|
||||||
|
// driver level.
|
||||||
|
mountCount, err := r.Mounted(id)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrapf(err, "error checking if layer %q is still mounted", id)
|
||||||
|
}
|
||||||
|
for mountCount > 0 {
|
||||||
|
if _, err := r.Unmount(id, false); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
mountCount, err = r.Mounted(id)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrapf(err, "error checking if layer %q is still mounted", id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := r.deleteInternal(id); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return r.Save()
|
||||||
|
}
|
||||||
|
|
||||||
func (r *layerStore) Lookup(name string) (id string, err error) {
|
func (r *layerStore) Lookup(name string) (id string, err error) {
|
||||||
if layer, ok := r.lookup(name); ok {
|
if layer, ok := r.lookup(name); ok {
|
||||||
return layer.ID, nil
|
return layer.ID, nil
|
||||||
|
10
vendor/github.com/containers/storage/store.go
generated
vendored
10
vendor/github.com/containers/storage/store.go
generated
vendored
@ -1202,7 +1202,7 @@ func (s *store) CreateContainer(id string, names []string, image, layer, metadat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if cimage == nil {
|
if cimage == nil {
|
||||||
return nil, ErrImageUnknown
|
return nil, errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
imageID = cimage.ID
|
imageID = cimage.ID
|
||||||
|
|
||||||
@ -1437,7 +1437,7 @@ func (s *store) ListImageBigData(id string) ([]string, error) {
|
|||||||
return bigDataNames, err
|
return bigDataNames, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, ErrImageUnknown
|
return nil, errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *store) ImageBigDataSize(id, key string) (int64, error) {
|
func (s *store) ImageBigDataSize(id, key string) (int64, error) {
|
||||||
@ -1516,7 +1516,7 @@ func (s *store) ImageBigData(id, key string) ([]byte, error) {
|
|||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, ErrImageUnknown
|
return nil, errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *store) SetImageBigData(id, key string, data []byte, digestManifest func([]byte) (digest.Digest, error)) error {
|
func (s *store) SetImageBigData(id, key string, data []byte, digestManifest func([]byte) (digest.Digest, error)) error {
|
||||||
@ -2891,7 +2891,7 @@ func (s *store) Image(id string) (*Image, error) {
|
|||||||
return image, nil
|
return image, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, ErrImageUnknown
|
return nil, errors.Wrapf(ErrImageUnknown, "error locating image with ID %q", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *store) ImagesByTopLayer(id string) ([]*Image, error) {
|
func (s *store) ImagesByTopLayer(id string) ([]*Image, error) {
|
||||||
@ -2953,7 +2953,7 @@ func (s *store) ImagesByDigest(d digest.Digest) ([]*Image, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
imageList, err := store.ByDigest(d)
|
imageList, err := store.ByDigest(d)
|
||||||
if err != nil && err != ErrImageUnknown {
|
if err != nil && errors.Cause(err) != ErrImageUnknown {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
images = append(images, imageList...)
|
images = append(images, imageList...)
|
||||||
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -109,7 +109,7 @@ github.com/containers/psgo/internal/dev
|
|||||||
github.com/containers/psgo/internal/proc
|
github.com/containers/psgo/internal/proc
|
||||||
github.com/containers/psgo/internal/process
|
github.com/containers/psgo/internal/process
|
||||||
github.com/containers/psgo/internal/host
|
github.com/containers/psgo/internal/host
|
||||||
# github.com/containers/storage v1.13.2
|
# github.com/containers/storage v1.13.3
|
||||||
github.com/containers/storage
|
github.com/containers/storage
|
||||||
github.com/containers/storage/pkg/archive
|
github.com/containers/storage/pkg/archive
|
||||||
github.com/containers/storage/pkg/chrootarchive
|
github.com/containers/storage/pkg/chrootarchive
|
||||||
|
Reference in New Issue
Block a user