func chooseFile()

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
}