in cmd/hub/storage/read.go [192:248]
func chooseFile(files *Files) (*File, error) {
delta := time.Duration(-10) * time.Second
filesExist := make([]File, 0, len(files.Files))
for _, file := range files.Files {
if file.Exist {
filesExist = append(filesExist, file)
}
}
if len(filesExist) == 0 {
return nil, os.ErrNotExist
}
if len(filesExist) == 1 {
return &filesExist[0], nil
}
modTime := filesExist[0].ModTime
for _, file := range filesExist {
if file.ModTime.After(modTime) {
modTime = file.ModTime
}
}
modTime = modTime.Add(delta)
candidates := make([]File, 0, len(filesExist))
for _, file := range filesExist {
if file.ModTime.After(modTime) {
candidates = append(candidates, file)
}
}
if len(candidates) == 1 {
return &candidates[0], nil
}
largest := candidates[0]
for _, file := range candidates {
if file.Size > largest.Size {
largest = file
}
}
if largest.Kind == "fs" {
return &largest, nil
}
for _, file := range candidates {
if file.Kind == "fs" &&
(file.Size == largest.Size ||
file.Size+crypto.EncryptionV1Overhead == largest.Size ||
file.Size+crypto.EncryptionV2Overhead == largest.Size ||
file.Size+crypto.EncryptionV3Overhead == largest.Size ||
file.Size+crypto.EncryptionV4Overhead == largest.Size) {
return &file, nil
}
}
return &largest, nil
}