# HG changeset patch # User Valentin Gatien-Baron # Date 1566788022 14400 # Node ID 72890d8f9860e8211647d246eef4c8ab9160d892 # Parent 62eabdf91f854238701716b555bbbe2c7fc08370 match: simplify the regexps created for glob patterns For legibility of the resulting regexes, although it may help with performance as well. Differential Revision: https://phab.mercurial-scm.org/D6764 diff -r 62eabdf91f85 -r 72890d8f9860 mercurial/match.py --- a/mercurial/match.py Mon Aug 26 08:25:01 2019 -0400 +++ b/mercurial/match.py Sun Aug 25 22:53:42 2019 -0400 @@ -1223,7 +1223,12 @@ # Anything after the pattern must be a non-directory. return escaped + '[^/]+$' if kind == 'relglob': - return '(?:|.*/)' + _globre(pat) + globsuffix + globre = _globre(pat) + if globre.startswith('[^/]*'): + # When pat has the form *XYZ (common), make the returned regex more + # legible by returning the regex for **XYZ instead of **/*XYZ. + return '.*' + globre[len('[^/]*'):] + globsuffix + return '(?:|.*/)' + globre + globsuffix if kind == 'relre': if pat.startswith('^'): return pat diff -r 62eabdf91f85 -r 72890d8f9860 rust/hg-core/src/filepatterns.rs --- a/rust/hg-core/src/filepatterns.rs Mon Aug 26 08:25:01 2019 -0400 +++ b/rust/hg-core/src/filepatterns.rs Sun Aug 25 22:53:42 2019 -0400 @@ -185,14 +185,21 @@ res.extend(b"[^/]+$"); res } - PatternSyntax::Glob - | PatternSyntax::RelGlob - | PatternSyntax::RootGlob => { + PatternSyntax::RelGlob => { let mut res: Vec = vec![]; - if syntax == PatternSyntax::RelGlob { + let glob_re = glob_to_re(pattern); + if let Some(rest) = glob_re.drop_prefix(b"[^/]*") { + res.extend(b".*"); + res.extend(rest); + } else { res.extend(b"(?:|.*/)"); + res.extend(glob_re); } - + res.extend(globsuffix.iter()); + res + } + PatternSyntax::Glob | PatternSyntax::RootGlob => { + let mut res: Vec = vec![]; res.extend(glob_to_re(pattern)); res.extend(globsuffix.iter()); res diff -r 62eabdf91f85 -r 72890d8f9860 tests/test-hgignore.t --- a/tests/test-hgignore.t Mon Aug 26 08:25:01 2019 -0400 +++ b/tests/test-hgignore.t Sun Aug 25 22:53:42 2019 -0400 @@ -177,7 +177,7 @@ ? a.c ? syntax $ hg debugignore - + $ cd .. $ echo > .hg/testhgignorerel @@ -224,7 +224,7 @@ A b.o $ hg debugignore - + $ hg debugignore b.o b.o is ignored diff -r 62eabdf91f85 -r 72890d8f9860 tests/test-walk.t --- a/tests/test-walk.t Mon Aug 26 08:25:01 2019 -0400 +++ b/tests/test-walk.t Sun Aug 25 22:53:42 2019 -0400 @@ -100,7 +100,7 @@ f mammals/skunk skunk $ hg debugwalk -v -I 'relglob:*k' * matcher: - + f beans/black ../beans/black f fenugreek ../fenugreek f mammals/skunk skunk @@ -108,7 +108,7 @@ * matcher: , - m2=> + m2=> f mammals/skunk skunk $ hg debugwalk -v -I 're:.*k$' * matcher: