aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/__init__.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2015-12-31 10:51:55 -0500
committerJason R. Coombs <jaraco@jaraco.com>2015-12-31 10:51:55 -0500
commit29fa01621c3de0a5c78c4f49b5d051386d0d566f (patch)
treefce7387c8ba82178be987b004cbda1c22005a04f /setuptools/__init__.py
parent928324bd76f35e9c8c526df828577b5640a95ed0 (diff)
parent6bdbe8957d8c8d293e3fea3fa4baf45eb7c3a3a4 (diff)
downloadexternal_python_setuptools-29fa01621c3de0a5c78c4f49b5d051386d0d566f.tar.gz
external_python_setuptools-29fa01621c3de0a5c78c4f49b5d051386d0d566f.tar.bz2
external_python_setuptools-29fa01621c3de0a5c78c4f49b5d051386d0d566f.zip
Merge with master. Ref #229.
--HG-- branch : feature/issue-229
Diffstat (limited to 'setuptools/__init__.py')
-rw-r--r--setuptools/__init__.py69
1 files changed, 44 insertions, 25 deletions
diff --git a/setuptools/__init__.py b/setuptools/__init__.py
index 57236a5b..fffcac76 100644
--- a/setuptools/__init__.py
+++ b/setuptools/__init__.py
@@ -3,6 +3,7 @@
__import__('setuptools.bootstrap').bootstrap.ensure_deps()
import os
+import functools
import distutils.core
import distutils.filelist
from distutils.core import Command as _Command
@@ -76,21 +77,24 @@ class PackageFinder(object):
yield pkg
@staticmethod
- def _all_dirs(base_path):
+ def _candidate_dirs(base_path):
"""
- Return all dirs in base_path, relative to base_path
+ Return all dirs in base_path that might be packages.
"""
+ has_dot = lambda name: '.' in name
for root, dirs, files in os.walk(base_path, followlinks=True):
+ # Exclude directories that contain a period, as they cannot be
+ # packages. Mutate the list to avoid traversal.
+ dirs[:] = filterfalse(has_dot, dirs)
for dir in dirs:
yield os.path.relpath(os.path.join(root, dir), base_path)
@classmethod
def _find_packages_iter(cls, base_path):
- dirs = cls._all_dirs(base_path)
- suitable = filterfalse(lambda n: '.' in n, dirs)
+ candidates = cls._candidate_dirs(base_path)
return (
path.replace(os.path.sep, '.')
- for path in suitable
+ for path in candidates
if cls._looks_like_package(os.path.join(base_path, path))
)
@@ -123,30 +127,45 @@ class Command(_Command):
command_consumes_arguments = False
def __init__(self, dist, **kw):
- # Add support for keyword arguments
- _Command.__init__(self,dist)
- for k,v in kw.items():
- setattr(self,k,v)
+ """
+ Construct the command for dist, updating
+ vars(self) with any keyword parameters.
+ """
+ _Command.__init__(self, dist)
+ vars(self).update(kw)
def reinitialize_command(self, command, reinit_subcommands=0, **kw):
cmd = _Command.reinitialize_command(self, command, reinit_subcommands)
- for k,v in kw.items():
- setattr(cmd,k,v) # update command with keywords
+ vars(cmd).update(kw)
return cmd
-distutils.core.Command = Command # we can't patch distutils.cmd, alas
+# we can't patch distutils.cmd, alas
+distutils.core.Command = Command
+
+
+def _find_all_simple(path):
+ """
+ Find all files under 'path'
+ """
+ results = (
+ os.path.join(base, file)
+ for base, dirs, files in os.walk(path, followlinks=True)
+ for file in files
+ )
+ return filter(os.path.isfile, results)
+
-def findall(dir = os.curdir):
- """Find all files under 'dir' and return the list of full filenames
- (relative to 'dir').
+def findall(dir=os.curdir):
+ """
+ Find all files under 'dir' and return the list of full filenames.
+ Unless dir is '.', return full filenames with dir prepended.
"""
- all_files = []
- for base, dirs, files in os.walk(dir, followlinks=True):
- if base==os.curdir or base.startswith(os.curdir+os.sep):
- base = base[2:]
- if base:
- files = [os.path.join(base, f) for f in files]
- all_files.extend(filter(os.path.isfile, files))
- return all_files
-
-distutils.filelist.findall = findall # fix findall bug in distutils.
+ files = _find_all_simple(dir)
+ if dir == os.curdir:
+ make_rel = functools.partial(os.path.relpath, start=dir)
+ files = map(make_rel, files)
+ return list(files)
+
+
+# fix findall bug in distutils (http://bugs.python.org/issue12885)
+distutils.filelist.findall = findall