[RFC] Using Git's internal config system

Ferry Huberts mailings at hupie.com
Wed Jun 5 12:18:35 CEST 2013



On 05/06/13 12:06, Lukas Fleischer wrote:
> Hi,
> 
> We have been discussing the feasibility of using Git's internal config
> system instead of our own configuration file parser on IRC and on the
> mailing list. It seems that this is doable -- however, creating a sane
> upgrade path is not that easy.
> 
> What cgit config files currently look like:
> 
>     cache-size=1000
>     enable-index-links=1
> 
>     repo.url=repo1.git
>     repo.path=/path/to/repo1.git/
>     repo.desc=Repository 1
> 
>     repo.url=repo2.git
>     repo.path=/path/to/repo2.git/
>     repo.desc=Repository 2
> 
> What cgit config files might look like when using Git's internal config
> system:
> 
>     [core]
>         cache-size = 1000
>         enable-index-links = 1
>     [repo "repo1"]
>         url = repo1.git
>         path = /path/to/repo1.git/
>         desc = Repository 1
>     [repo "repo2"]
>         url = repo2.git
>         path = /path/to/repo2.git/
>         desc = Repository 2
> 
> I was thinking of a way to support both syntaxes so that people have
> enough time to migrate to the new format (the other possibility is just
> switching to the new format without providing any backwards
> compatibility). Since Git's config system does not allow dots inside
> variable names, I suggest following implementation:
> 
> 1. Use strbuf instead of fixed-size buffers to read lines from the
>    configuration file (I already submitted a patch for this).
> 
> 2. Allow following syntax which allows for creating subsections for each
>    repository instead of using "repo.url" as a delimiter:
> 
>     repo.repo1.url=repo1.git
>     repo.repo1.path=/path/to/repo1.git/
>     repo.repo1.desc=Repository 1
> 
> 3. Support sections and internally map each configuration variable "var"
>    that is specified inside section "section" to "var.section" and each
>    "var" that is specified inside section 'repo "reponame"' to
>    "repo.reponame.var", respectively (that is exactly how Git does it
>    internally). Prefix section-less configuration variables with "core."
> 
> 4. Deprecate the old configuration format.
> 
> 5. Drop support for the old configuration format, remove legacy code and
>    use Git's internal config system instead in a future major release.
> 
> I prepared patches for 2 and 3. However, there are several issues with
> the new syntax:
> 
> * We can no longer use "mimetype." in the core section. Solution is
>   simple: Create a separate "mimetype" section.
> 
> * We need to find an alternate syntax for "repo.module-link.name =
>   value". As far as I know, Git does not support nested sections. Does
>   anybody have an idea how to do this? We need something like:
> 
>     [repo "foo"]
>         url = foo.git
>         path = /some/path/to/foo/
>         desc = Foo repository
> 	[module-link "path1"]
>             format = formatstring1
> 	[module-link "path2"]
>             format = formatstring2
> 

How about just adding the cgit repo specific config to the actual git
repo config file?
Something like:

[cgit]
url = foo.git
path = /some/path/to/foo/
desc = Foo repository

section = ....

[cgit "module-links"]
format = formatstring1
format = formatstring2

etc..


>   Maybe just use "module-link = " and allow delimiters to specify pairs
>   of paths and corresponding format strings?
> 
> * How do we support "section = " statements? Basically the same issue.
> 
> Ideas and suggestions welcome!
> 
> Regards,
> Lukas
> _______________________________________________
> CGit mailing list
> CGit at lists.zx2c4.com
> http://lists.zx2c4.com/mailman/listinfo/cgit
> 

-- 
Ferry Huberts


More information about the CGit mailing list