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]]