config: Added the --show-origin and --for-file options

* config: Added the --show-origin and --for-file options.
* config: Support annex.numcopies and annex.mincopies.

There is a little bit of redundancy here with other code elsewhere that
combines the various configs and selects which to use. But really only
for the special case of annex.numcopies, which is a git config that does
not override the annex branch setting and for annex.mincopies, which does
not have a git config but does have gitattributes settings as well as the
annex branch setting.

That seems small enough, and unlikely enough to grow into a mess that it was
worth supporting annex.numcopies and annex.mincopies in git-annex config
--show-origin. Because these settings are a prime thing that someone might
get confused about and want to know where they were configured.

And, it followed that git-annex config might as well support those two
for --set and --get as well. While this is redundant with the speclialized
commands, it's only a little code and it makes it more consistent.

Note that --set does not have as nice output as numcopies/mincopies
commands in some special cases like setting to 0 or a negative number.
It does avoid setting to a bad value thanks to the smart
constructors (eg configuredNumCopies).

As for other git-annex branch configurations that are not set by git-annex
config, things like trust and wanted that are specific to a repository
don't map to a git config name, so don't really fit into git-annex config.
And they are only configured in the git-annex branch with no local override
(at least so far), so --show-origin would not be useful for them.

Sponsored-by: Dartmouth College's DANDI project
This commit is contained in:
Joey Hess 2023-06-12 16:08:26 -04:00
parent ae98fb1b31
commit 64738ea157
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
8 changed files with 227 additions and 16 deletions

View file

@ -6,3 +6,5 @@ I guess the same functionality might be useful for some other options which coul
[[!meta author=yoh]]
[[!tag projects/dandi]]
> [[done]] --[[Joey]]

View file

@ -0,0 +1,20 @@
[[!comment format=mdwn
username="joey"
subject="""comment 2"""
date="2023-06-12T20:08:40Z"
content="""
I think it makes sense to have a command that displays the value of a
config that will be used, and where that value is configured. I've implemented
`git-annex config --show-origin` to do that.
For example:
% git-annex config --show-origin annex.largefiles
annex.largefiles may be configured in gitattributes. Pass --for-file= with a filename to check
branch:git-annex exclude=*.c
% git-annex config --show-origin annex.largefiles --for-file=foo
gitattributes largerthan=100kb
% git config annex.largefiles oops
% git-annex config --show-origin annex.largefiles --for-file=foo
file:.git/config oops
"""]]