mirror of
https://github.com/gomods/athens
synced 2026-02-03 11:00:32 +00:00
gcs: check if all files exist (#1274)
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"github.com/gomods/athens/pkg/config"
|
||||
"github.com/gomods/athens/pkg/errors"
|
||||
"github.com/gomods/athens/pkg/observ"
|
||||
"google.golang.org/api/iterator"
|
||||
)
|
||||
|
||||
// Exists implements the (./pkg/storage).Checker interface
|
||||
@@ -15,15 +16,26 @@ func (s *Storage) Exists(ctx context.Context, module, version string) (bool, err
|
||||
const op errors.Op = "gcp.Exists"
|
||||
ctx, span := observ.StartSpan(ctx, op.String())
|
||||
defer span.End()
|
||||
_, err := s.bucket.Object(config.PackageVersionedName(module, version, "mod")).Attrs(ctx)
|
||||
|
||||
if err == storage.ErrObjectNotExist {
|
||||
return false, nil
|
||||
it := s.bucket.Objects(ctx, &storage.Query{Prefix: config.PackageVersionedName(module, version, "")})
|
||||
var count int
|
||||
for {
|
||||
attrs, err := it.Next()
|
||||
if err == iterator.Done {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return false, errors.E(op, err, errors.M(module), errors.V(version))
|
||||
}
|
||||
switch attrs.Name {
|
||||
case config.PackageVersionedName(module, version, "info"):
|
||||
count++
|
||||
case config.PackageVersionedName(module, version, "mod"):
|
||||
count++
|
||||
case config.PackageVersionedName(module, version, "zip"):
|
||||
count++
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return false, errors.E(op, err, errors.M(module), errors.V(version))
|
||||
}
|
||||
|
||||
return true, nil
|
||||
return count == 3, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user