in cmd/hub/storage/read.go [60:177]
func Check(paths []string, kind string) (*Files, []error) {
errs := make([]error, 0)
files := make([]File, 0, len(paths))
for _, path := range paths {
file, err := checkPath(path, kind)
if err != nil {
errs = append(errs, err)
} else {
files = append(files, *file)
}
}
filesChecked := make([]File, 0, len(files))
for _, file := range files {
lockPath := fmt.Sprintf("%s.lock", file.Path)
switch file.Kind {
case "fs":
info, err := os.Stat(file.Path)
_, errLock := os.Stat(lockPath)
if err != nil {
if util.NoSuchFile(err) {
file.Exist = false
file.Locked = errLock == nil
filesChecked = append(filesChecked, file)
} else {
util.Warn("Unable to stat `%s` %s file: %v", file.Path, kind, err)
}
} else {
file.Exist = true
file.ModTime = info.ModTime()
file.Size = info.Size()
file.Locked = errLock == nil
filesChecked = append(filesChecked, file)
}
case "s3":
if config.Debug {
log.Printf("Checking `%s` %s file...", file.Path, kind)
}
size, modTime, err := aws.StatS3(file.Path)
_, _, errLock := aws.StatS3(lockPath)
if err != nil {
if err == os.ErrNotExist {
file.Exist = false
file.Locked = errLock == nil
filesChecked = append(filesChecked, file)
} else {
util.Warn("Unable to check `%s` %s file: %v", file.Path, kind, err)
}
} else {
file.Exist = true
file.ModTime = modTime
file.Size = size
file.Locked = errLock == nil
filesChecked = append(filesChecked, file)
}
case "gs":
if config.Debug {
log.Printf("Checking `%s` %s file...", file.Path, kind)
}
size, modTime, err := gcp.StatGCS(file.Path)
_, _, errLock := gcp.StatGCS(lockPath)
if err != nil {
if err == os.ErrNotExist {
file.Exist = false
file.Locked = errLock == nil
filesChecked = append(filesChecked, file)
} else {
util.Warn("Unable to check `%s` %s file: %v", file.Path, kind, err)
}
} else {
file.Exist = true
file.ModTime = modTime
file.Size = size
file.Locked = errLock == nil
filesChecked = append(filesChecked, file)
}
case "az":
if config.Debug {
log.Printf("Checking `%s` %s file...", file.Path, kind)
}
size, modTime, err := azure.StatStorageBlob(file.Path)
_, _, errLock := azure.StatStorageBlob(lockPath)
if err != nil {
if err == os.ErrNotExist {
file.Exist = false
file.Locked = errLock == nil
filesChecked = append(filesChecked, file)
} else {
util.Warn("Unable to check `%s` %s file: %v", file.Path, kind, err)
}
} else {
file.Exist = true
file.ModTime = modTime
file.Size = size
file.Locked = errLock == nil
filesChecked = append(filesChecked, file)
}
}
}
if len(filesChecked) == 0 {
return nil, append(errs, fmt.Errorf("No usable %s file found", kind))
}
if len(filesChecked) > 0 && (config.Trace || (config.Debug && kind != "manifest")) {
printFiles(filesChecked, kind)
}
if len(errs) == 0 {
errs = nil
}
return &Files{Kind: kind, Files: filesChecked}, errs
}