@@ -474,45 +474,50 @@ def run(self):
474
474
475
475
data_files = self .distribution .data_files or []
476
476
for (path , patterns ) in data_spec :
477
- data_files .append ((path , _get_data_files (patterns )))
477
+ data_files .append ((path , _get_files (patterns )))
478
478
479
479
self .distribution .data_files = data_files
480
480
481
481
return FileHandler
482
482
483
483
484
- def _get_data_files (file_patterns , top = HERE ):
485
- """Expand file patterns to a list of `data_files` paths.
484
+ def _get_files (file_patterns , top = HERE ):
485
+ """Expand file patterns to a list of paths.
486
486
487
487
Parameters
488
488
-----------
489
489
file_patterns: list or str
490
490
A list of glob patterns for the data file locations.
491
491
The globs can be recursive if they include a `**`.
492
- They should be relative paths from the root directory or
492
+ They should be relative paths from the top directory or
493
493
absolute paths.
494
+ top: str
495
+ the directory to consider for data files
494
496
495
497
Note:
496
- Files in `node_modules` are ignored. Only handles a single
497
- '**' in the pattern.
498
+ Files in `node_modules` are ignored.
498
499
"""
499
500
if not isinstance (file_patterns , (list , tuple )):
500
501
file_patterns = [file_patterns ]
501
502
503
+ for i , p in enumerate (file_patterns ):
504
+ if os .path .isabs (p ):
505
+ file_patterns [i ] = os .path .relpath (p , top )
506
+
502
507
matchers = [_compile_pattern (p ) for p in file_patterns ]
503
508
504
- files = []
509
+ files = set ()
505
510
for root , dirnames , filenames in os .walk (top ):
506
511
# Don't recurse into node_modules
507
512
if 'node_modules' in dirnames :
508
513
dirnames .remove ('node_modules' )
509
514
for m in matchers :
510
515
for filename in filenames :
511
- fn = pjoin (root , filename )
516
+ fn = os . path . relpath ( pjoin (root , filename ), top )
512
517
if m (fn ):
513
- files .append (fn .replace (os .sep , '/' ))
518
+ files .add (fn .replace (os .sep , '/' ))
514
519
515
- return files
520
+ return list ( files )
516
521
517
522
518
523
def _get_package_data (root , file_patterns = None ):
@@ -529,14 +534,13 @@ def _get_package_data(root, file_patterns=None):
529
534
absolute paths. If not given, all files will be used.
530
535
531
536
Note:
532
- Files in `node_modules` are ignored. Only handles a single
533
- '**' in the pattern.
537
+ Files in `node_modules` are ignored.
534
538
"""
535
539
if file_patterns is None :
536
540
file_patterns = ['*' ]
537
541
if not isinstance (file_patterns , (list , tuple )):
538
542
file_patterns = [file_patterns ]
539
- files = _get_data_files (file_patterns , pjoin (HERE , root ))
543
+ files = _get_files (file_patterns , pjoin (HERE , root ))
540
544
return [pjoin (root , f ) for f in files ]
541
545
542
546
0 commit comments