(dbx filesClient, entries []files.IsMetadata, onlyDeleted bool)
| 239 | } |
| 240 | |
| 241 | func prepareLsEntries(dbx filesClient, entries []files.IsMetadata, onlyDeleted bool) ([]files.IsMetadata, error) { |
| 242 | var filtered []files.IsMetadata |
| 243 | for _, entry := range entries { |
| 244 | deletedItem, isDeleted := entry.(*files.DeletedMetadata) |
| 245 | if isDeleted { |
| 246 | revisionArg := files.NewListRevisionsArg(deletedItem.PathLower) |
| 247 | res, err := dbx.ListRevisionsContext(currentContext(), revisionArg) |
| 248 | if err != nil { |
| 249 | if isListRevisionsNotFileError(err) { |
| 250 | // Don't treat a "not_file" error as fatal; recover by sending a |
| 251 | // get_metadata request for the same path and using that response instead. |
| 252 | revision, err := getFileMetadata(dbx, deletedItem.PathLower) |
| 253 | if err != nil { |
| 254 | return nil, err |
| 255 | } |
| 256 | entry = revision |
| 257 | } |
| 258 | } else if len(res.Entries) == 0 { |
| 259 | // Occasionally revisions will be returned with an empty Revision entry list. |
| 260 | // So we just use the original entry. |
| 261 | } else { |
| 262 | entry = res.Entries[0] |
| 263 | } |
| 264 | setPathDisplayAsDeleted(entry) |
| 265 | } |
| 266 | switch entry.(type) { |
| 267 | case *files.FileMetadata, *files.FolderMetadata: |
| 268 | if !onlyDeleted || isDeleted { |
| 269 | filtered = append(filtered, entry) |
| 270 | } |
| 271 | case *files.DeletedMetadata: |
| 272 | filtered = append(filtered, entry) |
| 273 | } |
| 274 | } |
| 275 | return filtered, nil |
| 276 | } |
| 277 | |
| 278 | func renderLsOutput(cmd *cobra.Command, path string, arg *files.ListFolderArg, onlyDeleted bool, opts listOptions, entries []files.IsMetadata) error { |
| 279 | out := commandOutput(cmd) |
no test coverage detected