From 9eb840de546dfe9b6c6aa1588f5bb8c0153c7d71 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 10 Feb 2021 07:38:39 -0100 Subject: lei_external: fix+test handling of escaped braces While '{' and '}' are rare in path names, somebody may still use them or deal with software which does (e.g. GNU arch). --- lib/PublicInbox/LeiExternal.pm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'lib/PublicInbox/LeiExternal.pm') diff --git a/lib/PublicInbox/LeiExternal.pm b/lib/PublicInbox/LeiExternal.pm index 8a51afcb..6cc2e671 100644 --- a/lib/PublicInbox/LeiExternal.pm +++ b/lib/PublicInbox/LeiExternal.pm @@ -58,16 +58,17 @@ sub glob2re { $re_map{$p eq '\\' ? '' : do { if ($1 eq '[') { ++$in_bracket } elsif ($1 eq ']') { --$in_bracket } + elsif ($1 eq ',') { ++$qm } # no change $p = $1; }} // do { $p = $1; ($p eq '-' && $in_bracket) ? $p : (++$qm, "\Q$p") }!sge); # bashism (also supported by curl): {a,b,c} => (a|b|c) - $re =~ s/([^\\]*)\\\{([^,]*?,[^\\]*?)\\\}/ - (my $in_braces = $2) =~ tr!,!|!; - $1."($in_braces)"; - /sge; + $changes += ($re =~ s/([^\\]*)\\\{([^,]*,[^\\]*)\\\}/ + (my $in_braces = $2) =~ tr!,!|!; + $1."($in_braces)"; + /sge); ($changes - $qm) ? $re : undef; } -- cgit v1.2.3-24-ge0c7