git-annex/doc/todo/git-annex_whereused.mdwn
Joey Hess d6f056eca3
have whereused also check the reflog
Since the stash is part of that, it can also find stashed content.

Sponsored-by: Boyd Stephen Smith Jr. on Patreon
2021-07-14 16:05:20 -04:00

44 lines
1.7 KiB
Markdown

`git annex whereused` would report where in the git repository a
key is used, as a complement to `git-annex unused`.
Use cases include users not getting confused about why git-annex unused
says a key is used.
Also, it could scan through history to find where a key *was* used.
git-annex unused outputs a suggestion to use a rather hairy `git log -S`
command to do that currently.
If it does both these things, it could explain why git-annex unused
considers a key used despite a previous git rev referring to it. Eg:
# git annex whereused SHA1--foo
checking index... unused
checking branches... unused
checking tags... unused
checking history... last used in master^40:somefile
checking reflog... last used in HEAD@{30}:somefile
--[[Joey]]
> First pass is a keys db lookup to filenames.
>
> The historical pass can be done fairly efficiently by using
> `git log -Skey --exclude=*/git-annex --glob=* --exclude=git-annex --remotes=* --tags=* --pretty='%H' --raw`
> and fall back to `git log -Skey --walk-reflogs --pretty='%gd' --raw` if nothing was found.
>
> That makes git log check all commits reachable from those refs,
> probably as efficiently as possible, and stop after one match.
> It won't allow quite as nice a display as above.
>
> Parse the log output for commit sha and filename. Double-check
> by catting the file's object and making sure it parses as an annex
> link or pointer.
>
> Then use `git describe --contains --all` to get a description of the commit
> sha, which will be something like "master~2" or "origin/master~2",
> and add ":filename" to get the ref to output.
>
> Or, if it was found in the ref log, take the "HEAD@{n}" from log
> output, and add ":filename"
[[done]] --[[Joey]]