Skip to content

Commit d0f7e91

Browse files
committed
Add config section
1 parent 24a48a3 commit d0f7e91

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

docs/guides/101-samples/index.md

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,160 @@ int error = git_patch_from_diff(&patch, diff, 0);
10141014
([`git_patch_from_diff`](http://libgit2.github.com/libgit2/#HEAD/group/patch/git_patch_from_diff))
10151015

10161016

1017+
<h2 id="config">Config</h2>
1018+
1019+
<h3 id="config_files">Files</h3>
1020+
1021+
```c
1022+
char path[1024] = {0};
1023+
int error = git_config_find_global(path, 1024);
1024+
error = git_config_find_xdg(path, 1024);
1025+
error = git_config_find_system(path, 1024);
1026+
```
1027+
1028+
(
1029+
[`git_config_find_global`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_find_global),
1030+
[`git_config_find_xdg`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_find_xdg),
1031+
[`git_config_find_system`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_find_system)
1032+
)
1033+
1034+
<h3 id="config_opening">Opening</h3>
1035+
1036+
```c
1037+
git_config *cfg = NULL;
1038+
int error = git_config_open_default(&cfg);
1039+
/* or */
1040+
error = git_repository_config(&cfg, repo);
1041+
```
1042+
1043+
Once you have a config instance, you can specify which of its levels to operate at:
1044+
1045+
```c
1046+
git_config *sys_cfg = NULL;
1047+
int error = git_config_open_level(&sys_cfg, cfg, GIT_CONFIG_LEVEL_SYSTEM);
1048+
```
1049+
1050+
(
1051+
[`git_config_open_default`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_open_default),
1052+
[`git_repository_config`](http://libgit2.github.com/libgit2/#HEAD/group/repository/git_repository_config),
1053+
[`git_config_open_level`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_open_level)
1054+
)
1055+
1056+
<h3 id="config_values_simple">Values (Simple)</h3>
1057+
1058+
Raw entries are available:
1059+
1060+
```c
1061+
const git_config_entry *entry = NULL;
1062+
int error = git_config_get_entry(&entry, cfg, "diff.renames");
1063+
```
1064+
1065+
Or you can let libgit2 do the parsing:
1066+
1067+
```c
1068+
int32_t i32val;
1069+
int64_t i64val;
1070+
int boolval;
1071+
const char *strval;
1072+
error = git_config_get_int32(&i32val, cfg, "foo.bar");
1073+
error = git_config_get_int64(&i64val, cfg, "foo.bar");
1074+
error = git_config_get_bool(&boolval, cfg, "foo.bar");
1075+
error = git_config_get_string(&strval, cfg, "foo.bar");
1076+
```
1077+
1078+
Setting values is fairly straightforward.
1079+
This operates at the most specific config level; if you want to set a global or system-level value, use `git_config_open_level`.
1080+
1081+
```c
1082+
error = git_config_set_int32(cfg, "foo.bar", 3);
1083+
error = git_config_set_int64(cfg, "foo.bar", 3);
1084+
error = git_config_set_bool(cfg, "foo.bar", true);
1085+
error = git_config_set_string(cfg, "foo.bar", "baz");
1086+
```
1087+
1088+
(
1089+
[`git_config_get_entry`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_get_entry),
1090+
[`git_config_get_int32`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_get_int32),
1091+
[`git_config_get_int64`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_get_int64),
1092+
[`git_config_get_bool`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_get_bool),
1093+
[`git_config_get_string`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_get_string),
1094+
[`git_config_set_int32`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_set_int32),
1095+
[`git_config_set_int64`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_set_int64),
1096+
[`git_config_set_bool`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_set_bool),
1097+
[`git_config_set_string`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_set_string)
1098+
)
1099+
1100+
<h3 id="config_values_multi">Values (Multi)</h3>
1101+
1102+
Some configuration entries can have multiple values, like `core.gitProxy`.
1103+
1104+
```c
1105+
/* replace values by regex, perhaps many of them */
1106+
int error = git_config_set_multivar(cfg,
1107+
"core.gitProxy", /* config entry name */
1108+
".*example\.com.*", /* regex to match */
1109+
"'cat' for example.com"); /* new value */
1110+
1111+
/* adding a value means replacing one that doesn't exist */
1112+
int error = git_config_set_multivar(cfg, "core.gitProxy",
1113+
"doesntexist", "'foo bar' for example.com");
1114+
```
1115+
1116+
Multivars are read either with a foreach loop:
1117+
1118+
```c
1119+
typedef struct { /**/ } multivar_data;
1120+
1121+
int foreach_cb(const git_config_entry *entry, void *payload)
1122+
{
1123+
multivar_data *d = (multivar_data*)payload;
1124+
/**/
1125+
}
1126+
1127+
multivar_data d = {0};
1128+
int error = git_config_get_multivar_foreach(cfg, "core.gitProxy",
1129+
NULL, foreach_cb, &d);
1130+
```
1131+
1132+
Or an iterator:
1133+
1134+
```c
1135+
git_config_iterator *iter;
1136+
git_config_entry *entry;
1137+
1138+
int error = git_config_multivar_iterator_new(&iter, cfg,
1139+
"core.gitProxy", "regex.*");
1140+
while (git_config_next(&entry, iter) == 0) {
1141+
/* … */
1142+
}
1143+
git_config_iterator_free(iter);
1144+
```
1145+
1146+
(
1147+
[`git_config_set_multivar`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_set_multivar),
1148+
[`git_config_get_multivar`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_get_multivar),
1149+
[`git_config_multivar_iterator_new`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_multivar_iterator_new),
1150+
[`git_config_next`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_next),
1151+
[`git_config_free`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_free)
1152+
)
1153+
1154+
<h3 id="config_iterating">Iterating</h3>
1155+
1156+
```c
1157+
git_config_iterator *iter;
1158+
git_config_entry *entry;
1159+
int error = git_config_iterator_new(&iter, cfg);
1160+
while (git_config_next(&entry, iter) == 0) {
1161+
/**/
1162+
}
1163+
```
1164+
1165+
(
1166+
[`git_config_iterator_new`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_iterator_new),
1167+
[`git_config_next`](http://libgit2.github.com/libgit2/#HEAD/group/config/git_config_next),
1168+
)
1169+
1170+
10171171
<h2 id="revwalk">Revwalk</h2>
10181172

10191173
<h3 id="revwalk_simple">Simple</h3>

0 commit comments

Comments
 (0)