mirror of
https://github.com/git/git.git
synced 2024-10-04 04:01:46 +02:00
d14f776402
This updates the hierarchical section name syntax to [section<space>+"<randomstring>"] where the only rule for "randomstring" is that it can't contain a newline, and if you really want to insert a double-quote, you do it with \". It turns that into the section name "secion.randomstring". The "section" part is still case insensitive, but the "randomstring" part is case sensitive. So you could use this for things like [email "torvalds@osdl.org"] name = Linus Torvalds if you wanted to do the "email->name" conversion as part of the config file format (I'm not claiming that is sensible, I'm just giving it as an insane example). That would show up as the association email.torvalds@osdl.org.name -> Linus Torvalds which is easy to parse (the "." in the email _looks_ ambiguous, but it isn't: you know that there will always be a single key-name, so you find the key name with "strrchr(name, '.')" and things are entirely unambiguous). Repo-config is updated to be able to parse the new format, and also write things out in the new format. [jc: rolled two patches from Linus and one fix-up from Sean into one, with additional adjustments for t/t1300 test to check the case insensitiveness of section base and variable and case sensitiveness of the extended section part. Then stripped some part off to make the result applicable to the stale 1.3.X series that does not have recent enhancements. ] Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca> Signed-off-by: Junio C Hamano <junkio@cox.net>
260 lines
5.3 KiB
Bash
Executable File
260 lines
5.3 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2005 Johannes Schindelin
|
|
#
|
|
|
|
test_description='Test git-repo-config in different settings'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test -f .git/config && rm .git/config
|
|
|
|
git-repo-config core.penguin "little blue"
|
|
|
|
cat > expect << EOF
|
|
[core]
|
|
penguin = little blue
|
|
EOF
|
|
|
|
test_expect_success 'initial' 'cmp .git/config expect'
|
|
|
|
git-repo-config Core.Movie BadPhysics
|
|
|
|
cat > expect << EOF
|
|
[core]
|
|
penguin = little blue
|
|
Movie = BadPhysics
|
|
EOF
|
|
|
|
test_expect_success 'mixed case' 'cmp .git/config expect'
|
|
|
|
git-repo-config Cores.WhatEver Second
|
|
|
|
cat > expect << EOF
|
|
[core]
|
|
penguin = little blue
|
|
Movie = BadPhysics
|
|
[Cores]
|
|
WhatEver = Second
|
|
EOF
|
|
|
|
test_expect_success 'similar section' 'cmp .git/config expect'
|
|
|
|
git-repo-config CORE.UPPERCASE true
|
|
|
|
cat > expect << EOF
|
|
[core]
|
|
penguin = little blue
|
|
Movie = BadPhysics
|
|
UPPERCASE = true
|
|
[Cores]
|
|
WhatEver = Second
|
|
EOF
|
|
|
|
test_expect_success 'similar section' 'cmp .git/config expect'
|
|
|
|
test_expect_success 'replace with non-match' \
|
|
'git-repo-config core.penguin kingpin !blue'
|
|
|
|
test_expect_success 'replace with non-match (actually matching)' \
|
|
'git-repo-config core.penguin "very blue" !kingpin'
|
|
|
|
cat > expect << EOF
|
|
[core]
|
|
penguin = very blue
|
|
Movie = BadPhysics
|
|
UPPERCASE = true
|
|
penguin = kingpin
|
|
[Cores]
|
|
WhatEver = Second
|
|
EOF
|
|
|
|
test_expect_success 'non-match result' 'cmp .git/config expect'
|
|
|
|
cat > .git/config << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
haha ="beta" # last silly comment
|
|
haha = hello
|
|
haha = bello
|
|
[nextSection] noNewline = ouch
|
|
EOF
|
|
|
|
cp .git/config .git/config2
|
|
|
|
test_expect_success 'multiple unset' \
|
|
'git-repo-config --unset-all beta.haha'
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
[nextSection] noNewline = ouch
|
|
EOF
|
|
|
|
test_expect_success 'multiple unset is correct' 'cmp .git/config expect'
|
|
|
|
mv .git/config2 .git/config
|
|
|
|
test_expect_success '--replace-all' \
|
|
'git-repo-config --replace-all beta.haha gamma'
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
haha = gamma
|
|
[nextSection] noNewline = ouch
|
|
EOF
|
|
|
|
test_expect_success 'all replaced' 'cmp .git/config expect'
|
|
|
|
git-repo-config beta.haha alpha
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
haha = alpha
|
|
[nextSection] noNewline = ouch
|
|
EOF
|
|
|
|
test_expect_success 'really mean test' 'cmp .git/config expect'
|
|
|
|
git-repo-config nextsection.nonewline wow
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
haha = alpha
|
|
[nextSection]
|
|
nonewline = wow
|
|
EOF
|
|
|
|
test_expect_success 'really really mean test' 'cmp .git/config expect'
|
|
|
|
test_expect_success 'get value' 'test alpha = $(git-repo-config beta.haha)'
|
|
git-repo-config --unset beta.haha
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
[nextSection]
|
|
nonewline = wow
|
|
EOF
|
|
|
|
test_expect_success 'unset' 'cmp .git/config expect'
|
|
|
|
git-repo-config nextsection.NoNewLine "wow2 for me" "for me$"
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
[nextSection]
|
|
nonewline = wow
|
|
NoNewLine = wow2 for me
|
|
EOF
|
|
|
|
test_expect_success 'multivar' 'cmp .git/config expect'
|
|
|
|
test_expect_success 'non-match' \
|
|
'git-repo-config --get nextsection.nonewline !for'
|
|
|
|
test_expect_success 'non-match value' \
|
|
'test wow = $(git-repo-config --get nextsection.nonewline !for)'
|
|
|
|
test_expect_failure 'ambiguous get' \
|
|
'git-repo-config --get nextsection.nonewline'
|
|
|
|
test_expect_success 'get multivar' \
|
|
'git-repo-config --get-all nextsection.nonewline'
|
|
|
|
git-repo-config nextsection.nonewline "wow3" "wow$"
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
[nextSection]
|
|
nonewline = wow3
|
|
NoNewLine = wow2 for me
|
|
EOF
|
|
|
|
test_expect_success 'multivar replace' 'cmp .git/config expect'
|
|
|
|
test_expect_failure 'ambiguous value' 'git-repo-config nextsection.nonewline'
|
|
|
|
test_expect_failure 'ambiguous unset' \
|
|
'git-repo-config --unset nextsection.nonewline'
|
|
|
|
test_expect_failure 'invalid unset' \
|
|
'git-repo-config --unset somesection.nonewline'
|
|
|
|
git-repo-config --unset nextsection.nonewline "wow3$"
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
[nextSection]
|
|
NoNewLine = wow2 for me
|
|
EOF
|
|
|
|
test_expect_success 'multivar unset' 'cmp .git/config expect'
|
|
|
|
test_expect_failure 'invalid key' 'git-repo-config inval.2key blabla'
|
|
|
|
test_expect_success 'correct key' 'git-repo-config 123456.a123 987'
|
|
|
|
test_expect_success 'hierarchical section' \
|
|
'git-repo-config Version.1.2.3eX.Alpha beta'
|
|
|
|
cat > expect << EOF
|
|
[beta] ; silly comment # another comment
|
|
noIndent= sillyValue ; 'nother silly comment
|
|
|
|
# empty line
|
|
; comment
|
|
[nextSection]
|
|
NoNewLine = wow2 for me
|
|
[123456]
|
|
a123 = 987
|
|
[Version "1.2.3eX"]
|
|
Alpha = beta
|
|
EOF
|
|
|
|
test_expect_success 'hierarchical section value' 'cmp .git/config expect'
|
|
|
|
cat > .git/config << EOF
|
|
[novalue]
|
|
variable
|
|
EOF
|
|
|
|
test_expect_success 'get variable with no value' \
|
|
'git-repo-config --get novalue.variable ^$'
|
|
|
|
test_done
|
|
|