SVN: zpkgtools/trunk/ - add support for a default-collection configuration key that specifies the

"Fred L. Drake, Jr." <[email protected]>
Newsgroups gmane.comp.web.zope.public-cvs
Message-ID <[email protected]>
Log message for revision 38138:
  - add support for a default-collection configuration key that specifies the
    resource to be packaged if not specified on the command line
  - relax the test for non-Python-package packaging components; instead of
    requiring SETUP.cfg, allow DEPENDENCIES.cfg or PACKAGE.cfg to be sufficient
  

Changed:
  U   zpkgtools/trunk/doc/collections.txt
  U   zpkgtools/trunk/doc/zpkg.txt
  U   zpkgtools/trunk/zpkgtools/app.py
  U   zpkgtools/trunk/zpkgtools/config.py
  A   zpkgtools/trunk/zpkgtools/tests/input/package.conf
  U   zpkgtools/trunk/zpkgtools/tests/test_app.py
  U   zpkgtools/trunk/zpkgtools/tests/test_config.py

-=-
Modified: zpkgtools/trunk/doc/collections.txt
===================================================================
--- zpkgtools/trunk/doc/collections.txt	2005-08-29 14:39:01 UTC (rev 38137)
+++ zpkgtools/trunk/doc/collections.txt	2005-08-29 15:15:02 UTC (rev 38138)
@@ -94,9 +94,11 @@
 
 `SETUP.cfg`
   Information about what's included in the distrubution, primarily for
-  use by a `setup.py` script.  For components that aren't Python
-  packages, this file is required.
+  use by a `setup.py` script.
 
+For components that aren't Python packages, at least one of
+`DEPENDENCIES.cfg`, `PACKAGE.cfg`, or `SETUP.cfg` is required.
+
 Additional information on these files can be found in `Metadata
 Descriptions for Distributions <metadata.html>`_.
 

Modified: zpkgtools/trunk/doc/zpkg.txt
===================================================================
--- zpkgtools/trunk/doc/zpkg.txt	2005-08-29 14:39:01 UTC (rev 38137)
+++ zpkgtools/trunk/doc/zpkg.txt	2005-08-29 15:15:02 UTC (rev 38138)
@@ -128,6 +128,10 @@
 added to the distribution if they can be located.  This is the same as
 using the **-c** option on the command line.
 
+The ``default-collection`` value is used to specify a resource that
+should be used as the top-level collection to package if no collection
+is specified on the command line.
+
 The ``include-support-code`` key is used to control whether **zpkg**
 bundles the support code along with the resulting distribution.  The
 value is a boolean, where the strings ``true`` and ``false`` can be

Modified: zpkgtools/trunk/zpkgtools/app.py
===================================================================
--- zpkgtools/trunk/zpkgtools/app.py	2005-08-29 14:39:01 UTC (rev 38137)
+++ zpkgtools/trunk/zpkgtools/app.py	2005-08-29 15:15:02 UTC (rev 38138)
@@ -86,6 +86,10 @@
         # XXX Hack: This should be part of BuilderApplication
         if options.include_support_code is None:
             options.include_support_code = cf.include_support_code
+        if options.resource is None:
+            if not cf.default_collection:
+                self.error("no resource to package specified")
+            options.resource = cf.default_collection
 
     def error(self, message, rc=1):
         self.logger.critical(message)
@@ -385,8 +389,7 @@
         #
         # Check that this package is valid:
         #
-        setup_cfg = os.path.join(self.source, package.PACKAGE_CONF)
-        if self.is_python_package() or os.path.isfile(setup_cfg):
+        if self.is_python_package() or self.has_packaging_data():
             return
         raise zpkgtools.Error(
             "%r is an invalid distribution component: all components must"
@@ -447,6 +450,17 @@
             dir = self.source
         return os.path.isfile(os.path.join(dir, "__init__.py"))
 
+    def has_packaging_data(self):
+        """Return True iff this component contains packaging metadata."""
+        # Should PUBLICATION.cfg count toword this?
+        dir = self.source
+        for fn in (package.PACKAGE_CONF,
+                   include.PACKAGE_CONF,
+                   "DEPENDENCIES.cfg"):
+            if os.path.isfile(os.path.join(dir, fn)):
+                return True
+        return False
+
     def write_package(self, destination):
         self.destination = destination
         if not os.path.exists(destination):
@@ -624,11 +638,14 @@
               " (dependencies will be ignored)"))
 
     options, args = parser.parse_args(argv[1:])
-    if len(args) != 1:
-        parser.error("wrong number of arguments")
+    if len(args) > 1:
+        parser.error("too many arguments")
     options.program = prog
     options.args = args
-    options.resource = args[0]
+    if args:
+        options.resource = args[0]
+    else:
+        options.resource = None
     if options.revision_tag and not options.version:
         options.version = version_from_tagname(options.revision_tag)
     if not options.version:

Modified: zpkgtools/trunk/zpkgtools/config.py
===================================================================
--- zpkgtools/trunk/zpkgtools/config.py	2005-08-29 14:39:01 UTC (rev 38137)
+++ zpkgtools/trunk/zpkgtools/config.py	2005-08-29 15:15:02 UTC (rev 38138)
@@ -59,6 +59,7 @@
               "include-support-code": boolean,
               "collect-dependencies": boolean,
               "build-application": boolean,
+              "default-collection": non_empty_string,
               }, ["resources"], None))
         self.base = urlutils.file_url(filename)
         self.filename = filename
@@ -105,6 +106,7 @@
         self.location_maps = []
         self.locations = locationmap.LocationMap()
         self.include_support_code = True
+        self.default_collection = None
 
     def finalize(self):
         """Load the location maps into `locations`."""
@@ -169,6 +171,12 @@
                 "build-application can be specified at most once")
         if cf.build_application:
             self.application = cf.build_application[0]
+        # default-collection
+        if len(cf.default_collection) > 1:
+            raise cfgparser.ConfigurationError(
+                "default-collection can be specified at most once")
+        if cf.default_collection:
+            self.default_collection = cf.default_collection[0]
 
 
 def defaultConfigurationPath():

Added: zpkgtools/trunk/zpkgtools/tests/input/package.conf
===================================================================
--- zpkgtools/trunk/zpkgtools/tests/input/package.conf	2005-08-29 14:39:01 UTC (rev 38137)
+++ zpkgtools/trunk/zpkgtools/tests/input/package.conf	2005-08-29 15:15:02 UTC (rev 38138)
@@ -0,0 +1,6 @@
+# This configuration file is used from zpkgtools.tests.test_app, test
+# class BuilderApplicationTestCase, in the
+# test_building_default_collection() and
+# test_building_default_collection_override() methods.
+
+default-collection  package


Property changes on: zpkgtools/trunk/zpkgtools/tests/input/package.conf
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: zpkgtools/trunk/zpkgtools/tests/test_app.py
===================================================================
--- zpkgtools/trunk/zpkgtools/tests/test_app.py	2005-08-29 14:39:01 UTC (rev 38137)
+++ zpkgtools/trunk/zpkgtools/tests/test_app.py	2005-08-29 15:15:02 UTC (rev 38138)
@@ -419,19 +419,51 @@
         app = self.createApplication(
             ["-f", "-t", "-m", package_map, "package"])
         app.run()
-        # make sure the local tree is present and looks like one of
-        # our distributions:
-        self.assert_(os.path.isdir("package-0.0.0"))
-        self.assert_(os.path.isdir(os.path.join("package-0.0.0", "package")))
-        self.assert_(os.path.isdir(os.path.join("package-0.0.0", "Support")))
-        self.assert_(isfile("package-0.0.0", "setup.py"))
-        self.assert_(isfile("package-0.0.0", "setup.cfg"))
-        self.assert_(isfile("package-0.0.0", "MANIFEST"))
-        self.assert_(isfile("package-0.0.0", "Support", "MANIFEST"))
-        self.assert_(isfile("package-0.0.0", "Support", "README.txt"))
-        self.assert_(isfile("package-0.0.0", "Support", "setup.py"))
-        shutil.rmtree("package-0.0.0")
+        self.check_package_tree("package")
 
+    def test_building_default_collection(self):
+        # Test that a configuration's setting of a default collection
+        # is used to actually determine what's built.
+        config = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+                              "input", "package.conf")
+        package_map = self.createPackageMap()
+        app = self.createApplication(
+            ["-C", config, "-t", "-m", package_map])
+        app.run()
+        self.check_package_tree("package")
+
+    def test_building_default_collection_override(self):
+        # Test that a configuration's setting of a default collection
+        # can be overridden to actually determine what's built.
+        import logging
+        root_logger = logging.getLogger()
+        root_logger.addHandler(logging.StreamHandler())
+        config = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+                              "input", "package.conf")
+        package_map = self.createPackageMap()
+        app = self.createApplication(
+            ["-C", config, "-t", "-m", package_map, "collection-1"])
+        app.run()
+        self.check_package_tree("collection-1")
+
+    def check_package_tree(self, name, version="0.0.0"):
+        # Make sure the local tree is present and looks like one of
+        # our distributions; this relies on the tree being built
+        # unpacked (the -t option).
+        pd = "%s-%s" % (name, version)
+        self.assert_(os.path.isdir(pd))
+        try:
+            self.assert_(os.path.isdir(os.path.join(pd, name)))
+            self.assert_(os.path.isdir(os.path.join(pd, "Support")))
+            self.assert_(isfile(pd, "setup.py"))
+            self.assert_(isfile(pd, "setup.cfg"))
+            self.assert_(isfile(pd, "MANIFEST"))
+            self.assert_(isfile(pd, "Support", "MANIFEST"))
+            self.assert_(isfile(pd, "Support", "README.txt"))
+            self.assert_(isfile(pd, "Support", "setup.py"))
+        finally:
+            shutil.rmtree(pd)
+
     def test_adding_extra_support_code(self):
         package_map = self.createPackageMap()
         app = self.createApplication(

Modified: zpkgtools/trunk/zpkgtools/tests/test_config.py
===================================================================
--- zpkgtools/trunk/zpkgtools/tests/test_config.py	2005-08-29 14:39:01 UTC (rev 38137)
+++ zpkgtools/trunk/zpkgtools/tests/test_config.py	2005-08-29 15:15:02 UTC (rev 38138)
@@ -43,6 +43,7 @@
         self.assert_(not cf.collect_dependencies)
         self.assertEqual(len(cf.locations), 0)
         self.assertEqual(len(cf.location_maps), 0)
+        self.assert_(not cf.default_collection)
 
     def test_loadPath(self):
         path = os.path.join(here, "zpkg-ok.conf")
@@ -77,6 +78,15 @@
                           self.load_text, ("include-support-code false\n"
                                            "include-support-code false\n"))
 
+        # default-collection too many times
+        self.assertRaises(cfgparser.ConfigurationError,
+                          self.load_text, ("default-collection foo\n"
+                                           "default-collection foo\n"))
+
+    def test_default_collection(self):
+        cf = self.load_text("default-collection foo\n")
+        self.assertEqual(cf.default_collection, "foo")
+
     def test_loadPath_no_such_file(self):
         path = os.path.join(here, "no-such-file")
         cf = config.Configuration()

_______________________________________________
Zope-CVS maillist  -  [email protected]
http://mail.zope.org/mailman/listinfo/zope-cvs

Zope CVS instructions: http://dev.zope.org/CVS
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.