41 lines
1.8 KiB
Markdown
41 lines
1.8 KiB
Markdown
Currently `git annex unused` assumes that all branches (including remote
|
|
tracking branches) and tags are "used" and finds only objects not used by
|
|
any of those refs.
|
|
|
|
That's a reasonable default, but in some cases, we don't care about
|
|
specific refs. Perhaps we don't consider remote tracking branches
|
|
important. Or perhaps we only want objects in HEAD to be considered used.
|
|
|
|
This could be handled by adding an option to specify a refspec when running
|
|
git-annex unused. Only matching refs would be checked. It's probably worth
|
|
making this be both a command-line option --used-refspec, as well as a
|
|
annex.used-refspec config setting.
|
|
|
|
git's refspec format is not quite right (since it specifies a local side
|
|
and a remote side for push/pull). But, it can be used as a point of
|
|
departure. Let's allow wildcards as it does, and use leading '+' to add a
|
|
ref, and '-' to remove. Let the user specify multiple such expressions,
|
|
separated by ':'.
|
|
|
|
+refs/heads/*:+HEAD^:+refs/tags/*:-refs/tags/old-tag
|
|
|
|
This is processed by starting with an empty set of refs, and walking the
|
|
refspec in order.
|
|
|
|
* Each + is matched against all known refs (from `git show-ref`), and adds
|
|
everything it matches to the set. If the + does not contain a wildcard,
|
|
it is literally added to the set, rather than looking in the known refs.
|
|
This allows "+refs/heads/*" to match all heads, and "+HEAD"
|
|
to match HEAD, or even "+sha" to match a given SHA, or "+HEAD^" to match
|
|
the previous head.
|
|
* Each - is matched against the contents of the set, and removes everything
|
|
it matches, using a lexographic matching with wildcards (not looking at
|
|
the SHAs that the refs point to, so -refs/heads/master does not remove
|
|
+HEAD).
|
|
|
|
Hmm, unused currently does a separate pass to find files used in the work
|
|
tree. I think it's best to keep that as-is.
|
|
|
|
--[[Joey]]
|
|
|
|
> [[done]] --[[Joey]]
|