##// END OF EJS Templates
Unescape failed glob patterns in shellglob
Takafumi Arakaki -
Show More
@@ -356,6 +356,13 b' def expand_path(s):'
356 return s
356 return s
357
357
358
358
359 def unescape_glob(string):
360 """Unescape glob pattern in `string`."""
361 for pattern in '*[]!?':
362 string = string.replace(r'\{0}'.format(pattern), pattern)
363 return string
364
365
359 def shellglob(args):
366 def shellglob(args):
360 """
367 """
361 Do glob expansion for each element in `args` and return a flattened list.
368 Do glob expansion for each element in `args` and return a flattened list.
@@ -365,7 +372,7 b' def shellglob(args):'
365 """
372 """
366 expanded = []
373 expanded = []
367 for a in args:
374 for a in args:
368 expanded.extend(glob.glob(a) or [a])
375 expanded.extend(glob.glob(a) or [unescape_glob(a)])
369 return expanded
376 return expanded
370
377
371
378
@@ -475,5 +475,14 b' def test_shellglob():'
475 + filenames_start_with_a
475 + filenames_start_with_a
476 + filenames_end_with_b
476 + filenames_end_with_b
477 + ['*c'])
477 + ['*c'])
478
479 assert_match([r'\*'], ['*'])
480 assert_match([r'a\*', 'a*'], ['a*'] + filenames_start_with_a)
481 assert_match(['a[012]'], filenames_start_with_a)
482 assert_match([r'a\[012]'], ['a[012]'])
478 finally:
483 finally:
479 os.chdir(save)
484 os.chdir(save)
485
486
487 def test_unescape_glob():
488 nt.assert_equals(path.unescape_glob(r'\*\[\!\]\?'), '*[!]?')
General Comments 0
You need to be logged in to leave comments. Login now