[Python-checkins] r43428 - in sandbox/trunk/setuptools: setup.py setuptools.egg-info/entry_points.txt setuptools.txt setuptools/command/sdist.py

phillip.eby python-checkins at python.org
Thu Mar 30 00:23:39 CEST 2006


Author: phillip.eby
Date: Thu Mar 30 00:23:38 2006
New Revision: 43428
Modified:
 sandbox/trunk/setuptools/setup.py
 sandbox/trunk/setuptools/setuptools.egg-info/entry_points.txt
 sandbox/trunk/setuptools/setuptools.txt
 sandbox/trunk/setuptools/setuptools/command/sdist.py
Log:
Added ``setuptools.file_finders`` entry point group to allow implementing
revision control plugins.
Modified: sandbox/trunk/setuptools/setup.py
==============================================================================
--- sandbox/trunk/setuptools/setup.py	(original)
+++ sandbox/trunk/setuptools/setup.py	Thu Mar 30 00:23:38 2006
@@ -77,9 +77,9 @@
 "easy_install-%s = setuptools.command.easy_install:main"
 % sys.version[:3]
 ],
- },
-
-
+ "setuptools.file_finders":
+ ["svn_cvs = setuptools.command.sdist:_default_revctrl"]
+ },
 classifiers = [f.strip() for f in """
 Development Status :: 3 - Alpha
 Intended Audience :: Developers
Modified: sandbox/trunk/setuptools/setuptools.egg-info/entry_points.txt
==============================================================================
--- sandbox/trunk/setuptools/setuptools.egg-info/entry_points.txt	(original)
+++ sandbox/trunk/setuptools/setuptools.egg-info/entry_points.txt	Thu Mar 30 00:23:38 2006
@@ -12,6 +12,9 @@
 zip_safe = setuptools.dist:assert_bool
 tests_require = setuptools.dist:check_requirements
 
+[setuptools.file_finders]
+svn_cvs = setuptools.command.sdist:_default_revctrl
+
 [egg_info.writers]
 dependency_links.txt = setuptools.command.egg_info:overwrite_arg
 requires.txt = setuptools.command.egg_info:write_requirements
Modified: sandbox/trunk/setuptools/setuptools.txt
==============================================================================
--- sandbox/trunk/setuptools/setuptools.txt	(original)
+++ sandbox/trunk/setuptools/setuptools.txt	Thu Mar 30 00:23:38 2006
@@ -635,7 +635,10 @@
 
 This tells setuptools to install any data files it finds in your packages. The
 data files must be under CVS or Subversion control, or else they must be
-specified via the distutils' ``MANIFEST.in`` file.
+specified via the distutils' ``MANIFEST.in`` file. (They can also be tracked
+by another revision control system, using an appropriate plugin. See the
+section below on `Adding Support for Other Revision Control Systems`_ for
+information on how to write such plugins.)
 
 If you want finer-grained control over what files are included (for example, if
 you have documentation files in your package directories and want to exclude
@@ -1346,6 +1349,10 @@
 (And, if you already have one, you might consider deleting it the next time
 you would otherwise have to change it.)
 
+(NOTE: other revision control systems besides CVS and Subversion can be
+supported using plugins; see the section below on `Adding Support for Other
+Revision Control Systems`_ for information on how to write such plugins.)
+
 If you need to include automatically generated files, or files that are kept in
 an unsupported revision control system, you'll need to create a ``MANIFEST.in``
 file to specify any files that the default file location algorithm doesn't
@@ -2328,6 +2335,60 @@
 those methods' docstrings for more details.
 
 
+Adding Support for Other Revision Control Systems
+-------------------------------------------------
+
+If you would like to create a plugin for ``setuptools`` to find files in other
+source control systems besides CVS and Subversion, you can do so by adding an
+entry point to the ``setuptools.file_finders`` group. The entry point should
+be a function accepting a single directory name, and should yield
+all the filenames within that directory (and any subdirectories thereof) that
+are under revision control.
+
+For example, if you were going to create a plugin for a revision control system
+called "foobar", you would write a function something like this::
+
+ def find_files_for_foobar(dirname):
+ # loop to yield paths that start with `dirname`
+
+And you would register it in a setup script using something like this:
+
+ entry_points = {
+ "setuptools.file_finders": [
+ "foobar = my_foobar_module:find_files_for_foobar"
+ ]
+ }
+
+Then, anyone who wants to use your plugin can simply install it, and their
+local setuptools installation will be able to find the necessary files.
+
+It is not necessary to distribute source control plugins with projects that
+simply use the other source control system, or to specify the plugins in
+``setup_requires``. When you create a source distribution with the ``sdist``
+command, setuptools automatically records what files were found in the
+``SOURCES.txt`` file. That way, recipients of source distributions don't need
+to have revision control at all. However, if someone is working on a package
+by checking out with that system, they will need the same plugin(s) that the
+original author is using.
+
+A few important points for writing revision control file finders:
+
+* Your finder function MUST return relative paths, created by appending to the
+ passed-in directory name. Absolute paths are NOT allowed, nor are relative
+ paths that reference a parent directory of the passed-in directory.
+
+* Your finder function MUST accept an empty string as the directory name,
+ meaning the current directory. You MUST NOT convert this to a dot; just
+ yield relative paths. So, yielding a subdirectory named ``some/dir`` under
+ the current directory should NOT be rendered as ``./some/dir`` or
+ ``/somewhere/some/dir``, but *always* as simply ``some/dir``
+
+* Your finder function SHOULD NOT raise any errors, and SHOULD deal gracefully
+ with the absence of needed programs (i.e., ones belonging to the revision
+ control system itself. It *may*, however, use ``distutils.log.warn()`` to
+ inform the user of the missing program(s).
+ 
+
 Subclassing ``Command``
 -----------------------
 
@@ -2371,6 +2432,9 @@
 ----------------------------
 
 0.6a11
+ * Added ``setuptools.file_finders`` entry point group to allow implementing
+ revision control plugins.
+
 * Added ``--identity`` option to ``upload`` command.
 
 * Added ``dependency_links`` to allow specifying URLs for ``--find-links``.
Modified: sandbox/trunk/setuptools/setuptools/command/sdist.py
==============================================================================
--- sandbox/trunk/setuptools/setuptools/command/sdist.py	(original)
+++ sandbox/trunk/setuptools/setuptools/command/sdist.py	Thu Mar 30 00:23:38 2006
@@ -1,6 +1,6 @@
 from distutils.command.sdist import sdist as _sdist
 from distutils.util import convert_path
-import os, re, sys
+import os, re, sys, pkg_resources
 
 entities = [
 ("&lt;","<"), ("&gt;", ">"), ("&quot;", '"'), ("&apos;", "'"),
@@ -39,13 +39,13 @@
 
 
 
-def walk_revctrl(dirname='', memo=None):
+def walk_revctrl(dirname=''):
 """Find all files under revision control"""
- if memo is None:
- memo = {}
- if dirname in memo:
- # Don't rescan a scanned directory
- return
+ for ep in pkg_resources.iter_entry_points('setuptools.file_finders'):
+ for item in ep.load()(dirname):
+ yield item
+
+def _default_revctrl(dirname=''):
 for path, finder in finders:
 path = joinpath(dirname,path)
 if os.path.isfile(path):
@@ -53,7 +53,7 @@
 if os.path.isfile(path):
 yield path
 elif os.path.isdir(path):
- for item in walk_revctrl(path, memo):
+ for item in _default_revctrl(path):
 yield item
 
 def externals_finder(dirname, filename):


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /