forked from TrueCloudLab/distribution
641cdf3ba6
The use of the pathMapper is no longer needed the way we have organized the code base. The extra level of indirection has proved unnecessary and confusing so we've opted to clean it up. In the future, we may require more flexibility, but now it is simply not required. Signed-off-by: Stephen J Day <stephen.day@docker.com>
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package storage
|
|
|
|
import (
|
|
"path"
|
|
|
|
"github.com/docker/distribution/context"
|
|
"github.com/docker/distribution/digest"
|
|
"github.com/docker/distribution/registry/storage/driver"
|
|
)
|
|
|
|
// vacuum contains functions for cleaning up repositories and blobs
|
|
// These functions will only reliably work on strongly consistent
|
|
// storage systems.
|
|
// https://en.wikipedia.org/wiki/Consistency_model
|
|
|
|
// NewVacuum creates a new Vacuum
|
|
func NewVacuum(ctx context.Context, driver driver.StorageDriver) Vacuum {
|
|
return Vacuum{
|
|
ctx: ctx,
|
|
driver: driver,
|
|
}
|
|
}
|
|
|
|
// Vacuum removes content from the filesystem
|
|
type Vacuum struct {
|
|
driver driver.StorageDriver
|
|
ctx context.Context
|
|
}
|
|
|
|
// RemoveBlob removes a blob from the filesystem
|
|
func (v Vacuum) RemoveBlob(dgst string) error {
|
|
d, err := digest.ParseDigest(dgst)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
blobPath, err := pathFor(blobDataPathSpec{digest: d})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
context.GetLogger(v.ctx).Infof("Deleting blob: %s", blobPath)
|
|
err = v.driver.Delete(v.ctx, blobPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// RemoveRepository removes a repository directory from the
|
|
// filesystem
|
|
func (v Vacuum) RemoveRepository(repoName string) error {
|
|
rootForRepository, err := pathFor(repositoriesRootPathSpec{})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
repoDir := path.Join(rootForRepository, repoName)
|
|
context.GetLogger(v.ctx).Infof("Deleting repo: %s", repoDir)
|
|
err = v.driver.Delete(v.ctx, repoDir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|