@@ -1148,6 +1148,54 @@ static int format_trailer_match_cb(const struct strbuf *key, void *ud)
1148
1148
return 0 ;
1149
1149
}
1150
1150
1151
+ int format_set_trailers_options (struct process_trailer_options * opts ,
1152
+ struct string_list * filter_list ,
1153
+ struct strbuf * sepbuf ,
1154
+ struct strbuf * kvsepbuf ,
1155
+ const char * * arg )
1156
+ {
1157
+ for (;;) {
1158
+ const char * argval ;
1159
+ size_t arglen ;
1160
+
1161
+ if (match_placeholder_arg_value (* arg , "key" , arg , & argval , & arglen )) {
1162
+ uintptr_t len = arglen ;
1163
+
1164
+ if (!argval )
1165
+ return -1 ;
1166
+
1167
+ if (len && argval [len - 1 ] == ':' )
1168
+ len -- ;
1169
+ string_list_append (filter_list , argval )-> util = (char * )len ;
1170
+
1171
+ opts -> filter = format_trailer_match_cb ;
1172
+ opts -> filter_data = filter_list ;
1173
+ opts -> only_trailers = 1 ;
1174
+ } else if (match_placeholder_arg_value (* arg , "separator" , arg , & argval , & arglen )) {
1175
+ char * fmt ;
1176
+
1177
+ strbuf_reset (sepbuf );
1178
+ fmt = xstrndup (argval , arglen );
1179
+ strbuf_expand (sepbuf , fmt , strbuf_expand_literal_cb , NULL );
1180
+ free (fmt );
1181
+ opts -> separator = sepbuf ;
1182
+ } else if (match_placeholder_arg_value (* arg , "key_value_separator" , arg , & argval , & arglen )) {
1183
+ char * fmt ;
1184
+
1185
+ strbuf_reset (kvsepbuf );
1186
+ fmt = xstrndup (argval , arglen );
1187
+ strbuf_expand (kvsepbuf , fmt , strbuf_expand_literal_cb , NULL );
1188
+ free (fmt );
1189
+ opts -> key_value_separator = kvsepbuf ;
1190
+ } else if (!match_placeholder_bool_arg (* arg , "only" , arg , & opts -> only_trailers ) &&
1191
+ !match_placeholder_bool_arg (* arg , "unfold" , arg , & opts -> unfold ) &&
1192
+ !match_placeholder_bool_arg (* arg , "keyonly" , arg , & opts -> key_only ) &&
1193
+ !match_placeholder_bool_arg (* arg , "valueonly" , arg , & opts -> value_only ))
1194
+ break ;
1195
+ }
1196
+ return 0 ;
1197
+ }
1198
+
1151
1199
static size_t format_commit_one (struct strbuf * sb , /* in UTF-8 */
1152
1200
const char * placeholder ,
1153
1201
void * context )
@@ -1425,45 +1473,8 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
1425
1473
1426
1474
if (* arg == ':' ) {
1427
1475
arg ++ ;
1428
- for (;;) {
1429
- const char * argval ;
1430
- size_t arglen ;
1431
-
1432
- if (match_placeholder_arg_value (arg , "key" , & arg , & argval , & arglen )) {
1433
- uintptr_t len = arglen ;
1434
-
1435
- if (!argval )
1436
- goto trailer_out ;
1437
-
1438
- if (len && argval [len - 1 ] == ':' )
1439
- len -- ;
1440
- string_list_append (& filter_list , argval )-> util = (char * )len ;
1441
-
1442
- opts .filter = format_trailer_match_cb ;
1443
- opts .filter_data = & filter_list ;
1444
- opts .only_trailers = 1 ;
1445
- } else if (match_placeholder_arg_value (arg , "separator" , & arg , & argval , & arglen )) {
1446
- char * fmt ;
1447
-
1448
- strbuf_reset (& sepbuf );
1449
- fmt = xstrndup (argval , arglen );
1450
- strbuf_expand (& sepbuf , fmt , strbuf_expand_literal_cb , NULL );
1451
- free (fmt );
1452
- opts .separator = & sepbuf ;
1453
- } else if (match_placeholder_arg_value (arg , "key_value_separator" , & arg , & argval , & arglen )) {
1454
- char * fmt ;
1455
-
1456
- strbuf_reset (& kvsepbuf );
1457
- fmt = xstrndup (argval , arglen );
1458
- strbuf_expand (& kvsepbuf , fmt , strbuf_expand_literal_cb , NULL );
1459
- free (fmt );
1460
- opts .key_value_separator = & kvsepbuf ;
1461
- } else if (!match_placeholder_bool_arg (arg , "only" , & arg , & opts .only_trailers ) &&
1462
- !match_placeholder_bool_arg (arg , "unfold" , & arg , & opts .unfold ) &&
1463
- !match_placeholder_bool_arg (arg , "keyonly" , & arg , & opts .key_only ) &&
1464
- !match_placeholder_bool_arg (arg , "valueonly" , & arg , & opts .value_only ))
1465
- break ;
1466
- }
1476
+ if (format_set_trailers_options (& opts , & filter_list , & sepbuf , & kvsepbuf , & arg ))
1477
+ goto trailer_out ;
1467
1478
}
1468
1479
if (* arg == ')' ) {
1469
1480
format_trailers_from_commit (sb , msg + c -> subject_off , & opts );
0 commit comments