findkeys: New command, very similar to git-annex find but operating on keys

I've long been asked for `git-annex find --all` or something like that,
but pushed back on it because I feel that the command is analagous to
find(1) and so it would be surprising for it to list keys rather than
files. So instead, add a new findkeys subcommand.

Note that the use of withKeyOptions is rather strange because usually
that is used to fall back to --all rather than listing files, but here
it's made to default to --all like behavior and never list files.

A performance thing that could be improved is that withKeyOptions
always reads and caches location logs. But findkeys with no options does
not need them, so it could be made faster. That caching does speed up
options like --in though. This is really just a subset of a more general
performance thing that --all reads location logs sometimes unncessarily.
Anyway, it needs to read the location log in order to checkDead,
and it seems good that findkeys does skip dead keys.

Also, cleaned up comments on git-annex-find man page asking for --all
option.

Sponsored-by: Dartmouth College's DANDI project
This commit is contained in:
Joey Hess 2023-01-17 14:42:29 -04:00
parent a522a41a42
commit f8bc208e89
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
24 changed files with 172 additions and 205 deletions

View file

@ -3,7 +3,7 @@ all keys in the repository, or all known keys.
[[git-annex-find]] has a long comment section with users wanting some way
to do this, but I am strongly of the opinion that `git-annex find` should
list files, not keys, like `find(1)` does. See my comments there.
list files, not keys, like `find(1)` does.
--[[Joey]]
findkeys could support --format like find, but without `${file}`, and
@ -11,13 +11,10 @@ findkeys could support --format like find, but without `${file}`, and
useful? The other options wouldn't apply to it, except for matching options
like --in that can operate on keys.
Seems that some users are looking for a way to list all keys known to
git-annex, while other users are looking for a way to list only keys
present in the local repo. If it defaults to listing all known keys,
--in=here can be used to get the other behavior. OTOH, `git-annex find`
defaults to listing only files that are present, so it would be
a little inconsistent for findkeys to default to listing all keys.
I think I prefer the inconsistency over needing a different option than
--in=here though. --[[Joey]]
Like `git-annex find`, findkeys should default to listing only keys
whose content is present. But when an option like --in=remote
or --anything is used, it should, like find, not be limited to that.
[[!tag projects/dandi]]
> [[done]]! --[[Joey]]