056459aeda
Without this, complex mirroring scenarios will be unpredictable. For example (abbreviating "gitolite.mirror." to "gimo.") something as simple as this will not give "foo" his different mirror setup repo @all config gimo.master = "frodo" config gimo.slaves = "sam" repo foo config gimo.master = "sam" config gimo.slaves = "frodo gollum" repo foo bar RW = u1 Even worse things happen when you have wild cards. Now, however, they all come in the right sequence and the most recent one takes effect (unlike ACL rules, where the first match wins, because there you're trying to just find a match and get out, while here you're just mindlessly applying config lines in the right order).
106 lines
1.2 KiB
Plaintext
106 lines
1.2 KiB
Plaintext
$data_version = '2.0';
|
|
%repos = (
|
|
'aa' => {
|
|
'R' => {
|
|
'u1' => 1,
|
|
'u2' => 1,
|
|
'u3' => 1
|
|
},
|
|
'W' => {
|
|
'u1' => 1,
|
|
'u2' => 1,
|
|
'u3' => 1
|
|
},
|
|
'u1' => [
|
|
[
|
|
2,
|
|
'refs/.*',
|
|
'RW+'
|
|
]
|
|
],
|
|
'u2' => [
|
|
[
|
|
4,
|
|
'refs/.*',
|
|
'RW'
|
|
]
|
|
],
|
|
'u3' => [
|
|
[
|
|
5,
|
|
'refs/.*',
|
|
'RW'
|
|
]
|
|
]
|
|
},
|
|
'bb' => {
|
|
'R' => {
|
|
'u1' => 1,
|
|
'u2' => 1,
|
|
'u3' => 1
|
|
},
|
|
'W' => {
|
|
'u1' => 1,
|
|
'u2' => 1,
|
|
'u3' => 1
|
|
},
|
|
'u1' => [
|
|
[
|
|
3,
|
|
'refs/.*',
|
|
'RW+'
|
|
]
|
|
],
|
|
'u2' => [
|
|
[
|
|
6,
|
|
'refs/.*',
|
|
'RW'
|
|
]
|
|
],
|
|
'u3' => [
|
|
[
|
|
7,
|
|
'refs/.*',
|
|
'RW'
|
|
]
|
|
]
|
|
},
|
|
'gitolite-admin' => {
|
|
'R' => {
|
|
'tester' => 1
|
|
},
|
|
'W' => {
|
|
'tester' => 1
|
|
},
|
|
'tester' => [
|
|
[
|
|
0,
|
|
'refs/.*',
|
|
'RW+'
|
|
]
|
|
]
|
|
},
|
|
'testing' => {
|
|
'@all' => [
|
|
[
|
|
1,
|
|
'refs/.*',
|
|
'RW+'
|
|
]
|
|
],
|
|
'R' => {
|
|
'@all' => 1
|
|
},
|
|
'W' => {
|
|
'@all' => 1
|
|
}
|
|
}
|
|
);
|
|
%groups = (
|
|
'@g1' => {
|
|
'aa' => 'master',
|
|
'bb' => 'master'
|
|
}
|
|
);
|