diff -r d70026504feb Lib/glob.py --- a/Lib/glob.py Sat Nov 07 18:06:24 2015 +0200 +++ b/Lib/glob.py Mon Nov 09 09:05:29 2015 +0200 @@ -30,6 +30,9 @@ def iglob(pathname, *, recursive=False): If recursive is true, the pattern '**' will match any files and zero or more directories and subdirectories. """ + return filter(None, _iglob(pathname, recursive)) + +def _iglob(pathname, recursive): dirname, basename = os.path.split(pathname) if not has_magic(pathname): if basename: @@ -50,7 +53,7 @@ def iglob(pathname, *, recursive=False): # drive or UNC path. Prevent an infinite recursion if a drive or UNC path # contains magic characters (i.e. r'\\?\C:'). if dirname != pathname and has_magic(dirname): - dirs = iglob(dirname, recursive=recursive) + dirs = _iglob(dirname, recursive) else: dirs = [dirname] if has_magic(basename): @@ -98,12 +101,10 @@ def glob0(dirname, basename): def glob2(dirname, pattern): assert _isrecursive(pattern) - if dirname: - yield pattern[:0] + yield pattern[:0] yield from _rlistdir(dirname) # Recursively yields relative pathnames inside a literal directory. - def _rlistdir(dirname): if not dirname: if isinstance(dirname, bytes): diff -r d70026504feb Lib/test/test_glob.py --- a/Lib/test/test_glob.py Sat Nov 07 18:06:24 2015 +0200 +++ b/Lib/test/test_glob.py Mon Nov 09 09:05:29 2015 +0200 @@ -31,6 +31,7 @@ class GlobTests(unittest.TestCase): self.mktemp('.bb', 'H') self.mktemp('aaa', 'zzzF') self.mktemp('ZZZ') + self.mktemp('EF') self.mktemp('a', 'bcd', 'EF') self.mktemp('a', 'bcd', 'efg', 'ha') if can_symlink(): @@ -200,7 +201,7 @@ class GlobTests(unittest.TestCase): def test_recursive_glob(self): eq = self.assertSequencesEqual_noorder - full = [('ZZZ',), + full = [('EF',), ('ZZZ',), ('a',), ('a', 'D'), ('a', 'bcd'), ('a', 'bcd', 'EF'), @@ -217,8 +218,8 @@ class GlobTests(unittest.TestCase): ('sym3', 'efg', 'ha'), ] eq(self.rglob('**'), self.joins(('',), *full)) - eq(self.rglob('.', '**'), self.joins(('.',''), - *(('.',) + i for i in full))) + eq(self.rglob(os.curdir, '**'), + self.joins((os.curdir, ''), *((os.curdir,) + i for i in full))) dirs = [('a', ''), ('a', 'bcd', ''), ('a', 'bcd', 'efg', ''), ('aaa', ''), ('aab', '')] if can_symlink(): @@ -229,11 +230,11 @@ class GlobTests(unittest.TestCase): ('a', ''), ('a', 'D'), ('a', 'bcd'), ('a', 'bcd', 'EF'), ('a', 'bcd', 'efg'), ('a', 'bcd', 'efg', 'ha'))) eq(self.rglob('a**'), self.joins(('a',), ('aaa',), ('aab',))) - expect = [('a', 'bcd', 'EF')] + expect = [('a', 'bcd', 'EF'), ('EF',)] if can_symlink(): expect += [('sym3', 'EF')] eq(self.rglob('**', 'EF'), self.joins(*expect)) - expect = [('a', 'bcd', 'EF'), ('aaa', 'zzzF'), ('aab', 'F')] + expect = [('a', 'bcd', 'EF'), ('aaa', 'zzzF'), ('aab', 'F'), ('EF',)] if can_symlink(): expect += [('sym3', 'EF')] eq(self.rglob('**', '*F'), self.joins(*expect)) @@ -247,10 +248,18 @@ class GlobTests(unittest.TestCase): eq(glob.glob('**', recursive=True), [join(*i) for i in full]) eq(glob.glob(join('**', ''), recursive=True), [join(*i) for i in dirs]) + eq(glob.glob(join('**', '*'), recursive=True), + [join(*i) for i in full]) + eq(glob.glob(join(os.curdir, '**'), recursive=True), + [join(os.curdir, '')] + [join(os.curdir, *i) for i in full]) + eq(glob.glob(join(os.curdir, '**', ''), recursive=True), + [join(os.curdir, '')] + [join(os.curdir, *i) for i in dirs]) + eq(glob.glob(join(os.curdir, '**', '*'), recursive=True), + [join(os.curdir, *i) for i in full]) eq(glob.glob(join('**','zz*F'), recursive=True), [join('aaa', 'zzzF')]) eq(glob.glob('**zz*F', recursive=True), []) - expect = [join('a', 'bcd', 'EF')] + expect = [join('a', 'bcd', 'EF'), 'EF'] if can_symlink(): expect += [join('sym3', 'EF')] eq(glob.glob(join('**', 'EF'), recursive=True), expect)