@@ -673,6 +673,24 @@ def looks_like_virtual_env(path):
673
673
os .path .exists (os .path .join (path , 'Scripts' , 'Python.exe' ))
674
674
)
675
675
676
+ def locate_editable_egg_info (base ):
677
+ candidates = []
678
+ for root , dirs , files in os .walk (base ):
679
+ for dir_ in vcs .dirnames :
680
+ if dir_ in dirs :
681
+ dirs .remove (dir_ )
682
+ # Iterate over a copy of ``dirs``, since mutating
683
+ # a list while iterating over it can cause trouble.
684
+ # (See https://github.com/pypa/pip/pull/462.)
685
+ for dir_ in list (dirs ):
686
+ if looks_like_virtual_env (os .path .join (root , dir_ )):
687
+ dirs .remove (dir_ )
688
+ # Also don't search through tests
689
+ elif dir_ == 'test' or dir_ == 'tests' :
690
+ dirs .remove (dir_ )
691
+ candidates .extend (os .path .join (root , dir_ ) for dir_ in dirs )
692
+ return [f for f in candidates if f .endswith ('.egg-info' )]
693
+
676
694
def depth_of_directory (dir_ ):
677
695
return (
678
696
dir_ .count (os .path .sep ) +
@@ -681,23 +699,7 @@ def depth_of_directory(dir_):
681
699
682
700
if self .editable :
683
701
base = self .source_dir
684
- filenames = []
685
- for root , dirs , files in os .walk (base ):
686
- for dir in vcs .dirnames :
687
- if dir in dirs :
688
- dirs .remove (dir )
689
- # Iterate over a copy of ``dirs``, since mutating
690
- # a list while iterating over it can cause trouble.
691
- # (See https://github.com/pypa/pip/pull/462.)
692
- for dir in list (dirs ):
693
- if looks_like_virtual_env (os .path .join (root , dir )):
694
- dirs .remove (dir )
695
- # Also don't search through tests
696
- elif dir == 'test' or dir == 'tests' :
697
- dirs .remove (dir )
698
- filenames .extend ([os .path .join (root , dir )
699
- for dir in dirs ])
700
- filenames = [f for f in filenames if f .endswith ('.egg-info' )]
702
+ filenames = locate_editable_egg_info (base )
701
703
else :
702
704
base = os .path .join (self .setup_py_dir , 'pip-egg-info' )
703
705
filenames = os .listdir (base )
0 commit comments