1231
* matches a pattern "refs/heads/mas") or a wildcard (e.g. the same ref
1232
* matches "refs/heads/mas*", too).
1233
*/
1234
-static int match_pattern(const char **patterns, const char *refname)
1234
+static int match_pattern(const struct ref_filter *filter, const char *refname)
1235
{
1236
+ const char **patterns = filter->name_patterns;
1237
+ unsigned flags = 0;
1238
+
1239
+ if (filter->ignore_case)
1240
+ flags |= WM_CASEFOLD;
1241
+
1242
/*
1243
* When no '--format' option is given we need to skip the prefix
1244
* for matching refs of tags and branches.
1249
skip_prefix(refname, "refs/", &refname));
1250
1251
for (; *patterns; patterns++) {
1246
- if (!wildmatch(*patterns, refname, 0, NULL))
1252
+ if (!wildmatch(*patterns, refname, flags, NULL))
1253
return 1;
1254
}
1255
return 0;
1261
* matches a pattern "refs/heads/" but not "refs/heads/m") or a
1262
* wildcard (e.g. the same ref matches "refs/heads/m*", too).
1263
*/
1258
-static int match_name_as_path(const char **pattern, const char *refname)
1264
+static int match_name_as_path(const struct ref_filter *filter, const char *refname)
1265
{
1266
+ const char **pattern = filter->name_patterns;
1267
int namelen = strlen(refname);
1268
+ unsigned flags = WM_PATHNAME;
1269
+
1270
+ if (filter->ignore_case)
1271
+ flags |= WM_CASEFOLD;
1272
+
1273
for (; *pattern; pattern++) {
1274
const char *p = *pattern;
1275
int plen = strlen(p);
1292
if (!*filter->name_patterns)
1293
return 1; /* No pattern always matches */
1294
if (filter->match_as_path)
1283
- return match_name_as_path(filter->name_patterns, refname);
1284
- return match_pattern(filter->name_patterns, refname);
1295
+ return match_name_as_path(filter, refname);
1296
+ return match_pattern(filter, refname);
1297
}
1298
1299
/*
1548
struct atom_value *va, *vb;
1549
int cmp;
1550
cmp_type cmp_type = used_atom[s->atom].type;
1551
+ int (*cmp_fn)(const char *, const char *);
1552
1553
get_ref_atom_value(a, s->atom, &va);
1554
get_ref_atom_value(b, s->atom, &vb);
1555
+ cmp_fn = s->ignore_case ? strcasecmp : strcmp;
1556
if (s->version)
1557
cmp = versioncmp(va->s, vb->s);
1558
else if (cmp_type == FIELD_STR)
1545
- cmp = strcmp(va->s, vb->s);
1559
+ cmp = cmp_fn(va->s, vb->s);
1560
else {
1561
if (va->ul < vb->ul)
1562
cmp = -1;
1563
else if (va->ul == vb->ul)
1550
- cmp = strcmp(a->refname, b->refname);
1564
+ cmp = cmp_fn(a->refname, b->refname);
1565
else
1566
cmp = 1;
1567
}