@@ -1014,6 +1014,160 @@ int error = git_patch_from_diff(&patch, diff, 0);
1014
1014
([ ` git_patch_from_diff ` ] ( http://libgit2.github.com/libgit2/#HEAD/group/patch/git_patch_from_diff ) )
1015
1015
1016
1016
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
+
1017
1171
<h2 id =" revwalk " >Revwalk</h2 >
1018
1172
1019
1173
<h3 id =" revwalk_simple " >Simple</h3 >
0 commit comments