##// END OF EJS Templates
match: simplify the regexps created for glob patterns...
Valentin Gatien-Baron -
r43130:cf165e06 default draft
parent child Browse files
Show More
@@ -1223,7 +1223,12 def _regex(kind, pat, globsuffix):
1223 # Anything after the pattern must be a non-directory.
1223 # Anything after the pattern must be a non-directory.
1224 return escaped + '[^/]+$'
1224 return escaped + '[^/]+$'
1225 if kind == 'relglob':
1225 if kind == 'relglob':
1226 return '(?:|.*/)' + _globre(pat) + globsuffix
1226 globre = _globre(pat)
1227 if globre.startswith('[^/]*'):
1228 # When pat has the form *XYZ (common), make the returned regex more
1229 # legible by returning the regex for **XYZ instead of **/*XYZ.
1230 return '.*' + globre[len('[^/]*'):] + globsuffix
1231 return '(?:|.*/)' + globre + globsuffix
1227 if kind == 'relre':
1232 if kind == 'relre':
1228 if pat.startswith('^'):
1233 if pat.startswith('^'):
1229 return pat
1234 return pat
@@ -185,14 +185,22 fn _build_single_regex(
185 res.extend(b"[^/]+$");
185 res.extend(b"[^/]+$");
186 res
186 res
187 }
187 }
188 PatternSyntax::RelGlob => {
189 let mut res: Vec<u8> = vec![];
190 let glob_re = glob_to_re(pattern);
191 if let Some(rest) = glob_re.drop_prefix(b"[^/]*") {
192 res.extend(b".*");
193 res.extend(rest);
194 } else {
195 res.extend(b"(?:|.*/)");
196 res.extend(glob_re);
197 }
198 res.extend(globsuffix.iter());
199 res
200 }
188 PatternSyntax::Glob
201 PatternSyntax::Glob
189 | PatternSyntax::RelGlob
190 | PatternSyntax::RootGlob => {
202 | PatternSyntax::RootGlob => {
191 let mut res: Vec<u8> = vec![];
203 let mut res: Vec<u8> = vec![];
192 if syntax == PatternSyntax::RelGlob {
193 res.extend(b"(?:|.*/)");
194 }
195
196 res.extend(glob_to_re(pattern));
204 res.extend(glob_to_re(pattern));
197 res.extend(globsuffix.iter());
205 res.extend(globsuffix.iter());
198 res
206 res
@@ -177,7 +177,7 Test relative ignore path (issue4473):
177 ? a.c
177 ? a.c
178 ? syntax
178 ? syntax
179 $ hg debugignore
179 $ hg debugignore
180 <includematcher includes='(?:|.*/)[^/]*\\.o(?:/|$)'>
180 <includematcher includes='.*\\.o(?:/|$)'>
181
181
182 $ cd ..
182 $ cd ..
183 $ echo > .hg/testhgignorerel
183 $ echo > .hg/testhgignorerel
@@ -224,7 +224,7 Test relative ignore path (issue4473):
224 A b.o
224 A b.o
225
225
226 $ hg debugignore
226 $ hg debugignore
227 <includematcher includes='(?:|.*/)[^/]*(?:/|$)'>
227 <includematcher includes='.*(?:/|$)'>
228
228
229 $ hg debugignore b.o
229 $ hg debugignore b.o
230 b.o is ignored
230 b.o is ignored
@@ -100,7 +100,7
100 f mammals/skunk skunk
100 f mammals/skunk skunk
101 $ hg debugwalk -v -I 'relglob:*k'
101 $ hg debugwalk -v -I 'relglob:*k'
102 * matcher:
102 * matcher:
103 <includematcher includes='(?:|.*/)[^/]*k(?:/|$)'>
103 <includematcher includes='.*k(?:/|$)'>
104 f beans/black ../beans/black
104 f beans/black ../beans/black
105 f fenugreek ../fenugreek
105 f fenugreek ../fenugreek
106 f mammals/skunk skunk
106 f mammals/skunk skunk
@@ -108,7 +108,7
108 * matcher:
108 * matcher:
109 <intersectionmatcher
109 <intersectionmatcher
110 m1=<patternmatcher patterns='mammals(?:/|$)'>,
110 m1=<patternmatcher patterns='mammals(?:/|$)'>,
111 m2=<includematcher includes='(?:|.*/)[^/]*k(?:/|$)'>>
111 m2=<includematcher includes='.*k(?:/|$)'>>
112 f mammals/skunk skunk
112 f mammals/skunk skunk
113 $ hg debugwalk -v -I 're:.*k$'
113 $ hg debugwalk -v -I 're:.*k$'
114 * matcher:
114 * matcher:
General Comments 0
You need to be logged in to leave comments. Login now