Hello community,

here is the log from the commit of package python-envisage for openSUSE:Factory 
checked in at 2019-05-15 12:34:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-envisage (Old)
 and      /work/SRC/openSUSE:Factory/.python-envisage.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-envisage"

Wed May 15 12:34:17 2019 rev:4 rq:702923 version:4.7.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-envisage/python-envisage.changes  
2018-12-31 09:47:19.254170698 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-envisage.new.5148/python-envisage.changes    
    2019-05-15 12:34:18.588548448 +0200
@@ -1,0 +2,6 @@
+Tue May 14 17:34:03 UTC 2019 - Gary Smith <[email protected]>
+
+- Update to version 4.7.2
+  * no changelog
+
+-------------------------------------------------------------------

Old:
----
  envisage-4.7.0.tar.gz

New:
----
  envisage-4.7.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-envisage.spec ++++++
--- /var/tmp/diff_new_pack.ecL7dU/_old  2019-05-15 12:34:19.160546801 +0200
+++ /var/tmp/diff_new_pack.ecL7dU/_new  2019-05-15 12:34:19.168546778 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-envisage
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,7 +12,7 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
@@ -21,7 +21,7 @@
 %define         X_display         ":98"
 %bcond_with     test
 Name:           python-envisage
-Version:        4.7.0
+Version:        4.7.2
 Release:        0
 Summary:        Extensible application framework for Python
 # Source code is under BSD but images are under different licenses

++++++ envisage-4.7.0.tar.gz -> envisage-4.7.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/CHANGES.txt 
new/envisage-4.7.2/CHANGES.txt
--- old/envisage-4.7.0/CHANGES.txt      1970-01-01 01:00:00.000000000 +0100
+++ new/envisage-4.7.2/CHANGES.txt      2019-05-03 11:49:52.000000000 +0200
@@ -0,0 +1,164 @@
+====================
+ Envisage CHANGELOG
+====================
+
+Version 4.7.2
+=============
+
+Released: 03 May 2019
+
+Fixes
+-----
+
+* Fix some broken imports and name errors in the ``envisage.developer``
+  package. (#130)
+* Add missing test data to support running tests on Python 3.7. (#136)
+* Fix reversed interpretation of the
+  ``TasksApplication.always_use_default_layout`` when creating task windows.
+  (#144)
+* In the ``InternalIPKernel`` plugin, restore original standard streams
+  (``stdout``, ``stdin``, ``stderr``) at plugin stop time. (#146)
+* In the ``InternalIPKernel`` plugin, fix ``ResourceWarnings`` from
+  unclosed pipes attached to qt consoles. (#147)
+
+
+Version 4.7.1
+=============
+
+Released : 31 January 2019
+
+Changes
+-------
+
+* Replace use of deprecated ``HasTraits.set`` method (#118)
+
+Fixes
+-----
+
+* Fix IPython GUI kernel issue when used with ipykernel 4.7.0 (#123)
+* Fix infinite recursion issue when harvesting extension methods (#121)
+
+
+Version 4.7.0
+=============
+
+Changes
+-------
+
+* Update CI setup and include ``ipykernel`` in devenv (#105, #111, #114)
+* Use ``--gui`` rather than ``--matplotlib`` when starting IPython kernel 
(#101)
+* Downgrade level of a logging message (#95)
+
+Fixes
+-----
+
+* Fix old-style relative import (#109)
+* Fix attractors example (#103)
+* Stop the IOPubThread as part of IPython kernel shutdown (#100)
+* Fix Sphinx conf to be able to build docs again (#91)
+* Fix deprecated IPython import (#92)
+* Fix task layout serialization under Python 3 (#90)
+
+
+Version 4.6.0
+=============
+
+This is an incremental release, mainly consisting of bug fixes.  The most
+significant change is the support for IPython >= 4 in the IPython plugin.
+
+Thanks to @corranwebster, @dpinte, @itziakos, @jonathanrocher, @kamalx,
+@rahulporuri, @robmcmullen, @sjagoe
+
+Enhancements
+------------
+
+* IPython kernel plugin now supports IPython >= 4 (#82)
+* Remove usage of deprecated IPython QtConsole API (#80)
+* Defer selection of toolkit and avoid creating GUI applications as 
side-effects as
+  much as possible (#77, #76)
+
+Fixes
+-----
+
+* Fixes for tests under Python 3.5 (#86)
+* Work around for issue with Traits in Python 3 (#78)
+* Replace uses of ‘file’ and ‘execfile’ (#75)
+* Fix MOTD_Using_Eggs example (#66)
+* Fix broken and outdated links in documentation (#72)
+* Fix link to docs from README (#70)
+* Fix degenerate case where window is created with no layout (#44)
+
+
+Version 4.5.1
+=============
+
+Enhancements
+------------
+
+* Add tox for testing package install (#67)
+
+Fixes
+-----
+
+* Include missing test files in the package data (#67)
+* Include missing test cases for Python 3.4 (#67)
+
+
+Version 4.5.0
+=============
+
+New features
+------------
+
+* IPythonKernelPlugin for Tasks: run an IPython kernel within the
+  envisage app and expose it as a service (#54).
+* Envisage now supports Python 3.4 (#61).
+
+Enhancements
+------------
+
+* Allow loading plugins from an egg basket even when some eggs are
+  invalid (#40, #46).
+* Add a simple ``GUIApplication`` to bootstrap basic plugin-driven
+  applications (#34).
+* Split the IPython kernel and IPython menu action into two separate
+  plugins for flexibility (#57).
+
+Fixes
+-----
+
+* Use new Traits interfaces and adaptation implementation (#37).
+* Envisage now configures the logger with a ``NullHandler`` to avoid
+  spurios unconfigured logger warnings (#45).
+* Envisage no longer swallows exceptions in plugin startup (#50).
+* Various fixes to continuous integration configuration (#47, #60).
+
+
+Version 4.4.0
+=============
+
+The major component of this feature is to work with the new
+``traits.adaptation`` mechanism in place of the deprecated
+``traits.protocols``, maintaining compatibility with ``traits`` version
+4.4.0.
+
+This release also adds a new method to retrieve a service that is
+required by the application and provides documentation and test updates.
+
+
+New features
+------------
+
+* Added a simple GUIApplication class (673c8f6)
+* Added a method to get a required service (94dfdea)
+
+Enhancements
+------------
+
+* Updated to use the new traits.adaptation functionality (34fa5e6)
+
+Fixes
+-----
+
+* Updated links to point to github instead of svn codebase (87cdb87)
+* Fixed test cases and added to Travis-CI (6c11d9f)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/LICENSE.txt 
new/envisage-4.7.2/LICENSE.txt
--- old/envisage-4.7.0/LICENSE.txt      1970-01-01 01:00:00.000000000 +0100
+++ new/envisage-4.7.2/LICENSE.txt      2018-09-10 16:20:43.000000000 +0200
@@ -0,0 +1,28 @@
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+Copyright (c) 2006, Enthought, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+ * Neither the name of Enthought, Inc. nor the names of its contributors may
+   be used to endorse or promote products derived from this software without
+   specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/MANIFEST.in 
new/envisage-4.7.2/MANIFEST.in
--- old/envisage-4.7.0/MANIFEST.in      2018-08-10 20:08:30.000000000 +0200
+++ new/envisage-4.7.2/MANIFEST.in      2019-05-03 10:28:58.000000000 +0200
@@ -1,3 +1,9 @@
+include CHANGES.txt
+include LICENSE.txt
+include MANIFEST.in
+include README.rst
+include image_LICENSE.txt
+include image_LICENSE_CP.txt
 recursive-include envisage/tests/plugins *.py
 recursive-include envisage/tests/eggs *.egg
 recursive-include envisage/tests/bad_eggs *.egg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/PKG-INFO new/envisage-4.7.2/PKG-INFO
--- old/envisage-4.7.0/PKG-INFO 2018-08-15 21:19:05.000000000 +0200
+++ new/envisage-4.7.2/PKG-INFO 2019-05-03 12:38:04.000000000 +0200
@@ -1,13 +1,14 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: envisage
-Version: 4.7.0
+Version: 4.7.2
 Summary: extensible application framework
 Home-page: http://docs.enthought.com/envisage
-Author: ETS Developers
-Author-email: [email protected]
+Author: Martin Chilvers, et. al.
+Author-email: [email protected]
+Maintainer: ETS Developers
+Maintainer-email: [email protected]
 License: BSD
 Download-URL: https://github.com/enthought/envisage
-Description-Content-Type: UNKNOWN
 Description: ==========================================
         envisage: extensible application framework
         ==========================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage/_version.py 
new/envisage-4.7.2/envisage/_version.py
--- old/envisage-4.7.0/envisage/_version.py     2018-08-15 21:19:04.000000000 
+0200
+++ new/envisage-4.7.2/envisage/_version.py     2019-05-03 12:38:03.000000000 
+0200
@@ -1,6 +1,6 @@
 # This file was automatically generated from the `setup.py` script.
-version = '4.7.0'
-full_version = '4.7.0'
+version = '4.7.2'
+full_version = '4.7.2'
 git_revision = 'Unknown'
 is_released = True
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage/developer/charm/charm.py 
new/envisage-4.7.2/envisage/developer/charm/charm.py
--- old/envisage-4.7.0/envisage/developer/charm/charm.py        2018-08-10 
20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/developer/charm/charm.py        2019-05-03 
11:49:52.000000000 +0200
@@ -2,7 +2,7 @@
 
 
 # Enthought library imports.
-from envisage.developer.api import CodeBrowser, Module
+from envisage.developer.code_browser.api import CodeBrowser, Module
 from traits.api import Event, HasTraits, Instance, Str
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/envisage-4.7.0/envisage/developer/ui/view/plugin_browser.py 
new/envisage-4.7.2/envisage/developer/ui/view/plugin_browser.py
--- old/envisage-4.7.0/envisage/developer/ui/view/plugin_browser.py     
2018-08-10 20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/developer/ui/view/plugin_browser.py     
2019-05-03 11:49:52.000000000 +0200
@@ -2,13 +2,13 @@
 
 
 # Enthought library imports.
-from envisage.api import ExtensionPoint, IPlugin
+from envisage.api import ExtensionPoint, IApplication, IExtensionPoint, IPlugin
 from traits.api import Delegate, HasTraits, Instance, List, Property
 from traits.api import Code, Str
 from traitsui.api import Item, TableEditor, View, VGroup
 from traitsui.table_column import ObjectColumn # fixme: non-api!
 
-class ExtensionPointModel(Hastraits):
+class ExtensionPointModel(HasTraits):
     """ A model for browsing an extension point. """
 
     # The plugin that offered the extension point.
@@ -21,7 +21,7 @@
 
 
 
-class ExtensionModel(Hastraits):
+class ExtensionModel(HasTraits):
     """ A model for browsing a contribution to an extension point. """
 
     # The plugin that made the contribution.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage/extension_point_binding.py 
new/envisage-4.7.2/envisage/extension_point_binding.py
--- old/envisage-4.7.0/envisage/extension_point_binding.py      2018-08-10 
20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/extension_point_binding.py      2019-05-03 
10:28:58.000000000 +0200
@@ -141,7 +141,7 @@
         value = self.extension_registry.get_extensions(self.extension_point_id)
         traits = {self.trait_name : value}
 
-        self.obj.set(trait_change_notify=notify, **traits)
+        self.obj.trait_set(trait_change_notify=notify, **traits)
 
         return
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage/plugin.py 
new/envisage-4.7.2/envisage/plugin.py
--- old/envisage-4.7.0/envisage/plugin.py       2018-08-10 20:08:30.000000000 
+0200
+++ new/envisage-4.7.2/envisage/plugin.py       2019-05-03 10:28:58.000000000 
+0200
@@ -365,9 +365,13 @@
         """ Harvest all method-based contributions. """
 
         extensions = []
-        for name, value in inspect.getmembers(self):
+        # Using inspect.getmembers(self) here will cause an infinite recursion,
+        # so use an internal HasTraits method for inspecting the MRO of the
+        # instance's type to find all methods instead.
+        for name in self._each_trait_method(self):
+            value = getattr(self, name)
             if self._is_extension_method(value, extension_point_id):
-                result = getattr(self, name)()
+                result = value()
                 if not isinstance(result, list):
                     result = [result]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/envisage-4.7.0/envisage/plugins/ipython_kernel/internal_ipkernel.py 
new/envisage-4.7.2/envisage/plugins/ipython_kernel/internal_ipkernel.py
--- old/envisage-4.7.0/envisage/plugins/ipython_kernel/internal_ipkernel.py     
2018-08-10 20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/plugins/ipython_kernel/internal_ipkernel.py     
2019-05-03 11:49:52.000000000 +0200
@@ -3,11 +3,18 @@
 
https://github.com/ipython/ipython/blob/2.x/examples/Embedding/internal_ipkernel.py
 
 """
+from distutils.version import StrictVersion as Version
+import sys
+
+import ipykernel
 from ipykernel.connect import connect_qtconsole
 from ipykernel.kernelapp import IPKernelApp
+from tornado import ioloop
 
 from traits.api import Any, HasStrictTraits, Instance, List
 
+NEEDS_IOLOOP_PATCH = Version(ipykernel.__version__) >= Version('4.7.0')
+
 
 def gui_kernel(gui_backend):
     """ Launch and return an IPython kernel GUI with support.
@@ -49,6 +56,12 @@
     #: This is a list of tuples (name, value).
     initial_namespace = List()
 
+    #: sys.stdout value at time kernel was started
+    _original_stdout = Any()
+
+    #: sys.stderr value at time kernel was started
+    _original_stderr = Any()
+
     def init_ipkernel(self, gui_backend):
         """ Initialize the IPython kernel.
 
@@ -58,9 +71,23 @@
           The GUI mode used to initialize the GUI mode. For options, see
           the `ipython --gui` help pages.
         """
+        # The IPython kernel modifies sys.stdout and sys.stderr when started,
+        # and doesn't currently provide a way to restore them. So we restore
+        # them ourselves at shutdown.
+        self._original_stdout = sys.stdout
+        self._original_stderr = sys.stderr
+
         # Start IPython kernel with GUI event loop support
         self.ipkernel = gui_kernel(gui_backend)
 
+        # Since ipykernel 4.7, the io_loop attribute of the kernel is not
+        # initialized anymore
+        # Reference: https://github.com/enthought/envisage/issues/107
+        # Workaround: Retrieve the kernel on the IPykernelApp and set the
+        # io_loop without starting it!
+        if NEEDS_IOLOOP_PATCH and not hasattr(self.ipkernel.kernel, 'io_loop'):
+            self.ipkernel.kernel.io_loop = ioloop.IOLoop.instance()
+
         # This application will also act on the shell user namespace
         self.namespace = self.ipkernel.shell.user_ns
         self.namespace.update(dict(self.initial_namespace))
@@ -76,6 +103,8 @@
         """ Kill all existing consoles. """
         for c in self.consoles:
             c.kill()
+            c.stdout.close()
+            c.stderr.close()
         self.consoles = []
 
     def shutdown(self):
@@ -87,5 +116,20 @@
             self.cleanup_consoles()
             self.ipkernel.shell.exit_now = True
             self.ipkernel.cleanup_connection_file()
+
+            # The stdout and stderr streams created by the kernel use the
+            # IOPubThread, so we need to close them and restore the originals
+            # before we shut down the thread. Without this, we get obscure
+            # errors of the form "TypeError: heap argument must be a list".
+            kernel_stdout = sys.stdout
+            if kernel_stdout is not self._original_stdout:
+                sys.stdout = self._original_stdout
+                kernel_stdout.close()
+
+            kernel_stderr = sys.stderr
+            if kernel_stderr is not self._original_stderr:
+                sys.stderr = self._original_stderr
+                kernel_stderr.close()
+
             self.ipkernel.iopub_thread.stop()
             self.ipkernel = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/envisage-4.7.0/envisage/plugins/ipython_kernel/tests/test_internal_ipkernel.py
 
new/envisage-4.7.2/envisage/plugins/ipython_kernel/tests/test_internal_ipkernel.py
--- 
old/envisage-4.7.0/envisage/plugins/ipython_kernel/tests/test_internal_ipkernel.py
  2018-08-10 20:08:30.000000000 +0200
+++ 
new/envisage-4.7.2/envisage/plugins/ipython_kernel/tests/test_internal_ipkernel.py
  2019-05-03 11:49:52.000000000 +0200
@@ -1,4 +1,5 @@
 import gc
+import sys
 import unittest
 
 try:
@@ -47,6 +48,27 @@
         self.assertEqual(kernel.namespace['x'], 42.1)
         kernel.shutdown()
 
+    def test_shutdown_restores_output_streams(self):
+        original_stdout = sys.stdout
+        original_stderr = sys.stderr
+
+        kernel = InternalIPKernel(initial_namespace=[('x', 42.1)])
+        kernel.init_ipkernel(gui_backend=None)
+        kernel.shutdown()
+
+        self.assertIs(sys.stdout, original_stdout)
+        self.assertIs(sys.stderr, original_stderr)
+
+    def test_shutdown_closes_console_pipes(self):
+        kernel = InternalIPKernel(initial_namespace=[('x', 42.1)])
+        kernel.init_ipkernel(gui_backend=None)
+        console = kernel.new_qt_console()
+        self.assertFalse(console.stdout.closed)
+        self.assertFalse(console.stderr.closed)
+        kernel.shutdown()
+        self.assertTrue(console.stdout.closed)
+        self.assertTrue(console.stderr.closed)
+
     def test_io_pub_thread_stopped(self):
         kernel = InternalIPKernel()
         kernel.init_ipkernel(gui_backend=None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
 
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
--- 
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
   2019-05-03 11:29:27.000000000 +0200
@@ -0,0 +1 @@
+(pymacs-load "enthought.plugins.remote_editor.communication.client")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
 
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
--- 
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
    2019-05-03 11:29:27.000000000 +0200
@@ -0,0 +1,33 @@
+"""
+"""
+
+# System library imports
+from Pymacs import lisp
+
+# ETS imports
+from envisage.plugins.remote_editor.plugins.editor_plugin import \
+        EditorPlugin
+
+
+client = EditorPlugin()
+client.register()
+
+def run_text():
+    start = lisp.point()
+    end = lisp.mark(True)
+    if start > end:
+        start, end = end, start
+    text = lisp.buffer_substring(start, end)
+    if len(text):
+        client.run_text(text)
+    else:
+        # TODO Complain in message bar
+        pass
+
+def run_file():
+    path = lisp.buffer_file_name()
+    if path is None:
+        # TODO Complain in message bar
+        pass
+    else:
+        client.run_file(path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/readme.txt 
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/readme.txt
--- old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/readme.txt 
1970-01-01 01:00:00.000000000 +0100
+++ new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/readme.txt 
2019-05-03 11:29:27.000000000 +0200
@@ -0,0 +1,4 @@
+The root of this directory contains abstract base classes for plugins.
+
+The subdirectories contain implementations of one or more of these plugins for
+some specific tool which is external to this project.
Binary files 
old/envisage-4.7.0/envisage/tests/bad_eggs/acme.bad-0.1a1-py3.7.egg and 
new/envisage-4.7.2/envisage/tests/bad_eggs/acme.bad-0.1a1-py3.7.egg differ
Binary files old/envisage-4.7.0/envisage/tests/eggs/acme.bar-0.1a1-py3.7.egg 
and new/envisage-4.7.2/envisage/tests/eggs/acme.bar-0.1a1-py3.7.egg differ
Binary files old/envisage-4.7.0/envisage/tests/eggs/acme.baz-0.1a1-py3.7.egg 
and new/envisage-4.7.2/envisage/tests/eggs/acme.baz-0.1a1-py3.7.egg differ
Binary files old/envisage-4.7.0/envisage/tests/eggs/acme.foo-0.1a1-py3.7.egg 
and new/envisage-4.7.2/envisage/tests/eggs/acme.foo-0.1a1-py3.7.egg differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage/tests/plugin_test_case.py 
new/envisage-4.7.2/envisage/tests/plugin_test_case.py
--- old/envisage-4.7.0/envisage/tests/plugin_test_case.py       2018-08-10 
20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/tests/plugin_test_case.py       2019-05-03 
10:28:58.000000000 +0200
@@ -449,6 +449,16 @@
 
         return
 
+    def test_no_recursion(self):
+        """ Regression test for #119. """
+
+        class PluginA(Plugin):
+            id = 'A'
+            x  = ExtensionPoint(List, id='bob')
+
+        application = Application(plugins=[PluginA()])
+        application.get_extensions('bob')
+
 
 # Entry point for stand-alone testing.
 if __name__ == '__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage/ui/single_project/DESIGN.txt 
new/envisage-4.7.2/envisage/ui/single_project/DESIGN.txt
--- old/envisage-4.7.0/envisage/ui/single_project/DESIGN.txt    1970-01-01 
01:00:00.000000000 +0100
+++ new/envisage-4.7.2/envisage/ui/single_project/DESIGN.txt    2018-09-10 
16:20:43.000000000 +0200
@@ -0,0 +1,47 @@
+These are some design notes for the E3 version of the single_project plugin,
+including a rough background adapated from the README of the E2 single_project
+plugin, and plans for implementing various aspects of the new plugin.
+*Note: This is very much a WIP and will probably be updated/modified heavily
+in a short period of time.
+
+
+BACKGROUND:
+-----------
+This plugin is designed to work with a single project at a time and build
+up 'state' within that project until the user explicitly saves the project.
+
+The plugin contributes two services to an Envisage application -- one for the
+model and one for the UI.  Additionally, the plugin contributes a 'Project'
+perspective, 'Project' view, and a number of actions to the UI so that the
+user can create, open, save, save as, and close projects.  Finally, it should
+be noted that the plugin manages an indicator applied to the application
+window(s) titlebar as a representation that the current project has unsaved
+modifications.
+
+The current project is visualized by a TreeEditor by default, but the user can
+contribute additional Views.  By contributing your own Project factory, the
+user can define your own custom projects.
+
+
+E2 single_projects vs. E3 single_projects:
+-----------------------------------------
+As described by Martin Chilvers:
+    "domain-objects" are at the highest level of abstraction in your design and
+hence are the objects that are understood by the user (e.g. Book, Person, Log,
+LogSuite, Well etc).
+
+The original single_project plugin used resources and resource types to adapt
+domain-objects to add certain behaviours to them that various Envisage plugins
+expected.  However, this approach restricted the addition of new behaviours to
+resource types, as well as added a lot of cruft to the process of registering
+new resources/resource types.
+
+The E3 single_project plugin uses Traits Adapters and takes advantage of the 
new
+ITreeNode interface.  The new TreeEditor has been extended to support handling
+unknown domain-objects by adapting them to the ITreeNode interface.  An
+ITreeNodeAdapter needs to be defined for any object that you want to be
+displayed in the TreeEditor, such as your Project class and it's sub-nodes.
+The Adapter exposes certain key ITreeNode interface methods, such as
+get_children, when_children_changed, get_lable, etc...  This eliminates the
+extra cruft that was necessary in the E2 single_project plugin, such as the
+node monitor, node resource type, etc...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage/ui/single_project/README.txt 
new/envisage-4.7.2/envisage/ui/single_project/README.txt
--- old/envisage-4.7.0/envisage/ui/single_project/README.txt    1970-01-01 
01:00:00.000000000 +0100
+++ new/envisage-4.7.2/envisage/ui/single_project/README.txt    2018-09-10 
16:20:43.000000000 +0200
@@ -0,0 +1,128 @@
+Last updated: 2006.02.05
+
+
+BACKGROUND:
+-----------
+This plugin is designed to work with a single project at a time and build
+up 'state' within that project until the user explicitly saves the project.
+
+The plugin contributes two services to an Envisage application -- one for the
+model and one for the UI.  Additionally, the plugin contributes a 'Project'
+perspective, 'Project' view, and a number of actions to the UI so that the
+user can create, open, save, save as, and close projects.  Finally, it should
+be noted that the plugin manages an indicator applied to the application
+window(s) titlebar as a representation that the current project has unsaved
+modifications.
+
+The current project is visualized using a ResourceTree control and thus
+supports all the visualization and interaction customization of resources.
+This also makes makes it easy to build a hierarchy of nodes within the tree
+by implementing the apptools.naming.Context interface.
+
+Finally, this plugin contributes a single extension point which provides the
+capability to define your own custom projects.
+
+
+PRE-REQUISITES:
+---------------
+This plugin requires the use of the envisage framework and the
+following plugins:
+        - envisage.core
+        - envisage.resource
+        - envisage.workbench
+        - envisage.plugins.python_shell
+
+
+HOW TO USE:
+-----------
+This plugin provides a base class for projects but, as of now, that class
+has no capability to contain any data.  So for this plugin to be useful within
+an Envisage application you have to complete the following:
+
+- Contribute a project_plugin_definition.FactoryDefinition to the Envisage
+  application.  This definition should point to a class derived from
+  project_factory.ProjectFactory which will be used to create new projects
+  as well as handle opening of persisted projects.  To do that, your
+  ProjectFactory should override the 'create' and 'open' methods as
+  appropriate to return an instance of a class derived from project.Project.
+  Note that multiple plugins can contribute FactoryDefinitions but only the
+  first contributed definition with the highest priority will be used.
+
+- You will need to derive a class from project.Project which will be used to
+  contain your project's data.  This class should:
+    - override the trait_view trait to provide the UI content that will be
+      shown by the plugin (within a wizard dialog) to allow a user to
+      initialize a newly created project.
+    - override the _contains_resource() method so that the plugin can close
+      editors for resources in your project when your project closes.
+    - set the 'dirty' trait to True anytime modifications are made to your
+      project data
+    - optionally override the Project.start() and Project.stop() methods
+      to handle any work needing to be done when a project becomes the
+      current project or is no longer the current project.  For example,
+      the base Project uses the stop() method to close any editors associated
+      with resources contained in the project.
+    - optionally override the _load_hook() and _save() methods if you wish
+      to use the base class's infrastructure for loading and saving projects
+      but have additional work that needs to be accomplished during those
+      events.  Note that the plugin's UI service calls the save() method and
+      the ProjectFactory calls the load() method.
+    - optionally override the 'load()' and 'save()' methods if you want to
+      completely replace the base class's infrastructure for loading and
+      saving projects.  Note that the plugin's UI service calls the save()
+      method and the ProjectFactory calls the load() method.
+
+- You will likely want to register resource types -- and associated classes
+  such as node types, monitors, and resource references -- for the resources
+  that can be contained within your project.  This will allow you to take
+  maximum advantage of the infrastructure of the Project view's ResourceTree
+  control.  If you do this, you should note that this plugin registers a
+  ProjectResourceType, pointing to a ProjectNodeType, that is used to
+  visualize the root project node.  You don't need to derive from these unless
+  you want to customize the resource definition of the project node.
+
+- Another option for implementing the visualization of project contents would
+  be to derive from ProjectView and override the _create_project_control()
+  and _update_project_control() methods to replace the ResourceTree control
+  with some other UI control.  If you do the later, you will likely need to
+  create your own project plugin definition but you should be able to reuse
+  almost all of the infrastructure classes contained in this plugin.
+
+- If the resources within your project can be edited in Editors, you should
+  derive Editor classes from ProjectEditor so that the project plugin
+  framework can close these editors when the project closes.
+
+
+KNOWN ISSUES:
+-------------
+- Due to the current capabilities of the workbench plugin, this plugin can't
+  do the ideal closing hook whereby, if the current project is modified, the
+  user gets prompted to save it, close it, or cancel the closing of the window.
+  The best we can do is follow the prompt to close the workbench window with a
+  dialog querying the user whether they want to save the current project or
+  not.  There is an Enthought Trac ticket to add the necessary capability to
+  the workbench plugin and this plugin will be 'fixed' shortly thereafter.
+
+- The Project class doesn't support any sort of versioning framework in its
+  saving and loading.  This will cause problems as the content and
+  capabilities of projects evolve throughout the software development cycle
+  of an application that uses this plugin.
+
+
+TO-DO:
+------
+- It would be nice if the Project class was modified such that it could
+  actually be used without needing to be derived from.  One possibility for
+  this would be to make it a full-fledged folder type Context in and of
+  itself including support for binding and unbinding.  If this was done, it
+  should be easy enough to re-use resource types, node types, etc. defined
+  for other Envisage plugins within projects.
+
+- It might be nice if editors that were open when a project was saved were
+  restored when the project was re-loaded.  One mechanism to do this would
+  be to modify the Project._editors trait to contain ResourceReferences rather
+  than Resources as the keys.  Then when pickling, we would simple dump the
+  editor references and persist just these keys.  Upon loading, iterate through
+  the keys/resource references and open an editor for each.  One question about
+  this mechanism is that currently we don't track order or position of editors
+  so that info wouldn't be recovered.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage/ui/single_project/TODO.txt 
new/envisage-4.7.2/envisage/ui/single_project/TODO.txt
--- old/envisage-4.7.0/envisage/ui/single_project/TODO.txt      1970-01-01 
01:00:00.000000000 +0100
+++ new/envisage-4.7.2/envisage/ui/single_project/TODO.txt      2018-09-10 
16:20:43.000000000 +0200
@@ -0,0 +1,9 @@
+To-Do List:
+
+ * Update README and other documentation/examples.
+ * Implement a way to publish the ITreeNodeAdapters so that they don't have to
+   be in the same file as the class which they adapt.
+ * Improve the way we are binding dynamic objects and how they are being
+   retrieved.
+ * Improve the handling of children in the adapters to remove redudancy.
+ * Lots of cleanup left.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/envisage-4.7.0/envisage/ui/single_project/view/project_view.py 
new/envisage-4.7.2/envisage/ui/single_project/view/project_view.py
--- old/envisage-4.7.0/envisage/ui/single_project/view/project_view.py  
2018-08-10 20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/ui/single_project/view/project_view.py  
2019-05-03 11:49:52.000000000 +0200
@@ -12,7 +12,6 @@
 
 # Standard library imports.
 import logging
-from string import rfind
 
 # Enthought library imports
 from apptools.naming.api import Binding
@@ -262,7 +261,7 @@
         # on the new suffix, if any.
         name = self.name
         if old is not None and len(old) > 0:
-            index = rfind(name, " " + old)
+            index = (" " + old).rfind(name)
             if index > -1:
                 name = name[0:index]
         if new is not None and len(new) > 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/envisage-4.7.0/envisage/ui/tasks/tasks_application.py 
new/envisage-4.7.2/envisage/ui/tasks/tasks_application.py
--- old/envisage-4.7.0/envisage/ui/tasks/tasks_application.py   2018-08-10 
20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/ui/tasks/tasks_application.py   2019-05-03 
11:49:52.000000000 +0200
@@ -301,8 +301,10 @@
 
         # Create a TaskWindow for each TaskWindowLayout.
         for window_layout in window_layouts:
-            window = self.create_window(window_layout,
-                                        restore=self.always_use_default_layout)
+            if self.always_use_default_layout:
+                window = self.create_window(window_layout, restore=False)
+            else:
+                window = self.create_window(window_layout, restore=True)
             window.open()
 
     def _get_task_factory(self, id):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage.egg-info/PKG-INFO 
new/envisage-4.7.2/envisage.egg-info/PKG-INFO
--- old/envisage-4.7.0/envisage.egg-info/PKG-INFO       2018-08-15 
21:19:04.000000000 +0200
+++ new/envisage-4.7.2/envisage.egg-info/PKG-INFO       2019-05-03 
12:38:03.000000000 +0200
@@ -1,13 +1,14 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: envisage
-Version: 4.7.0
+Version: 4.7.2
 Summary: extensible application framework
 Home-page: http://docs.enthought.com/envisage
-Author: ETS Developers
-Author-email: [email protected]
+Author: Martin Chilvers, et. al.
+Author-email: [email protected]
+Maintainer: ETS Developers
+Maintainer-email: [email protected]
 License: BSD
 Download-URL: https://github.com/enthought/envisage
-Description-Content-Type: UNKNOWN
 Description: ==========================================
         envisage: extensible application framework
         ==========================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/envisage.egg-info/SOURCES.txt 
new/envisage-4.7.2/envisage.egg-info/SOURCES.txt
--- old/envisage-4.7.0/envisage.egg-info/SOURCES.txt    2018-08-15 
21:19:04.000000000 +0200
+++ new/envisage-4.7.2/envisage.egg-info/SOURCES.txt    2019-05-03 
12:38:04.000000000 +0200
@@ -1,5 +1,9 @@
+CHANGES.txt
+LICENSE.txt
 MANIFEST.in
 README.rst
+image_LICENSE.txt
+image_LICENSE_CP.txt
 setup.py
 envisage/__init__.py
 envisage/_compat.py
@@ -148,6 +152,7 @@
 envisage/plugins/remote_editor/communication/tests/test_communication.py
 envisage/plugins/remote_editor/editor_plugins/__init__.py
 envisage/plugins/remote_editor/editor_plugins/editor_plugin.py
+envisage/plugins/remote_editor/editor_plugins/readme.txt
 envisage/plugins/remote_editor/editor_plugins/editra/__init__.py
 envisage/plugins/remote_editor/editor_plugins/editra/editra_plugin.py
 envisage/plugins/remote_editor/editor_plugins/editra/start_editra.py
@@ -160,6 +165,9 @@
 
envisage/plugins/remote_editor/editor_plugins/editra/images/python_runsel_24x24.png
 
envisage/plugins/remote_editor/editor_plugins/editra/images/python_runsel_32x32.png
 
envisage/plugins/remote_editor/editor_plugins/editra/images/python_runsel_48x48.png
+envisage/plugins/remote_editor/editor_plugins/emacs/__init__.py
+envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
+envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
 envisage/plugins/tasks/__init__.py
 envisage/plugins/tasks/python_shell_plugin.py
 envisage/plugins/text_editor/__init__.py
@@ -222,24 +230,28 @@
 envisage/tests/bad_eggs/acme.bad-0.1a1-py3.4.egg
 envisage/tests/bad_eggs/acme.bad-0.1a1-py3.5.egg
 envisage/tests/bad_eggs/acme.bad-0.1a1-py3.6.egg
+envisage/tests/bad_eggs/acme.bad-0.1a1-py3.7.egg
 envisage/tests/eggs/acme.bar-0.1a1-py2.6.egg
 envisage/tests/eggs/acme.bar-0.1a1-py2.7.egg
 envisage/tests/eggs/acme.bar-0.1a1-py3.3.egg
 envisage/tests/eggs/acme.bar-0.1a1-py3.4.egg
 envisage/tests/eggs/acme.bar-0.1a1-py3.5.egg
 envisage/tests/eggs/acme.bar-0.1a1-py3.6.egg
+envisage/tests/eggs/acme.bar-0.1a1-py3.7.egg
 envisage/tests/eggs/acme.baz-0.1a1-py2.6.egg
 envisage/tests/eggs/acme.baz-0.1a1-py2.7.egg
 envisage/tests/eggs/acme.baz-0.1a1-py3.3.egg
 envisage/tests/eggs/acme.baz-0.1a1-py3.4.egg
 envisage/tests/eggs/acme.baz-0.1a1-py3.5.egg
 envisage/tests/eggs/acme.baz-0.1a1-py3.6.egg
+envisage/tests/eggs/acme.baz-0.1a1-py3.7.egg
 envisage/tests/eggs/acme.foo-0.1a1-py2.6.egg
 envisage/tests/eggs/acme.foo-0.1a1-py2.7.egg
 envisage/tests/eggs/acme.foo-0.1a1-py3.3.egg
 envisage/tests/eggs/acme.foo-0.1a1-py3.4.egg
 envisage/tests/eggs/acme.foo-0.1a1-py3.5.egg
 envisage/tests/eggs/acme.foo-0.1a1-py3.6.egg
+envisage/tests/eggs/acme.foo-0.1a1-py3.7.egg
 envisage/tests/plugins/banana/__init__.py
 envisage/tests/plugins/banana/banana_plugin.py
 envisage/tests/plugins/banana/plugins.py
@@ -265,6 +277,9 @@
 envisage/ui/action/tests/__init__.py
 envisage/ui/action/tests/action_manager_builder_test_case.py
 envisage/ui/action/tests/dummy_action_manager_builder.py
+envisage/ui/single_project/DESIGN.txt
+envisage/ui/single_project/README.txt
+envisage/ui/single_project/TODO.txt
 envisage/ui/single_project/__init__.py
 envisage/ui/single_project/api.py
 envisage/ui/single_project/default_path_preference_page.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/image_LICENSE.txt 
new/envisage-4.7.2/image_LICENSE.txt
--- old/envisage-4.7.0/image_LICENSE.txt        1970-01-01 01:00:00.000000000 
+0100
+++ new/envisage-4.7.2/image_LICENSE.txt        2018-09-10 16:20:43.000000000 
+0200
@@ -0,0 +1,39 @@
+The icons are mostly derived work from other icons. As such they are
+licensed accordingly to the original license:
+
+Project                 License                   File
+----------------------------------------------------------------------------
+CP (Crystal Project)    LGPL                      image_LICENSE_CP.txt
+GV (Gael Varoquaux)     BSD-like                  LICENSE.txt
+PSF                     Python Software Fo.       see 1)
+CCL                     Creative Commons          see 2)
+
+Unless stated in this file, icons are the work of Enthought, and are
+released under a 3 clause BSD license.
+
+1) The Python logo is a trademark of the Python Software Foundation.
+   Please refer to: http://www.python.org/psf/trademarks/
+
+2) Creative Commons Attribution ShareAlike license versions
+   3.0, 2.5, 2.0, and 1.0
+
+
+Files and orginal authors:
+----------------------------------------------------------------------------
+envisage/ui/workbench/images:
+                          about.png | PSF
+                    application.ico | GV
+
+envisage/ui/workbench/action/images:
+                           exit.png | CP
+                    preferences.png | CP
+
+examples/workbench/AcmeLab/acme/acmelab/images:
+                          about.png | Public domain
+                        acmelab.ico | GV
+                         splash.jpg | CCL
+
+examples/workbench/AcmeLabUsingEggs/src/acme.acmelab/acme/acmelab/images:
+                          about.png | Public domain
+                        acmelab.ico | GV
+                         splash.jpg | CCL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/image_LICENSE_CP.txt 
new/envisage-4.7.2/image_LICENSE_CP.txt
--- old/envisage-4.7.0/image_LICENSE_CP.txt     1970-01-01 01:00:00.000000000 
+0100
+++ new/envisage-4.7.2/image_LICENSE_CP.txt     2018-09-10 16:20:43.000000000 
+0200
@@ -0,0 +1,351 @@
+License
+
+The Crystal Project are released under LGPL.
+
+GNU General Public License.
+
+   0. This License Agreement applies to any software library or other program
+      which contains a notice placed by the copyright holder or other
+      authorized party saying it may be distributed under the terms of this
+      Lesser General Public License (also called "this License"). Each
+      licensee is addressed as "you".
+
+      A "library" means a collection of software functions and/or data
+      prepared so as to be conveniently linked with application programs
+      (which use some of those functions and data) to form executables.
+
+      The "Library", below, refers to any such software library or work which
+      has been distributed under these terms. A "work based on the Library"
+      means either the Library or any derivative work under copyright law:
+      that is to say, a work containing the Library or a portion of it,
+      either verbatim or with modifications and/or translated
+      straightforwardly into another language. (Hereinafter, translation is
+      included without limitation in the term "modification".)
+
+      "Source code" for a work means the preferred form of the work for
+      making modifications to it. For a library, complete source code means
+      all the source code for all modules it contains, plus any associated
+      interface definition files, plus the scripts used to control
+      compilation and installation of the library.
+
+      Activities other than copying, distribution and modification are not
+      covered by this License; they are outside its scope. The act of running a
+      program using the Library is not restricted, and output from such a
+      program is covered only if its contents constitute a work based on the
+      Library (independent  of the use of the Library in a tool for writing
+      it). Whether that is true depends on what the Library does and what the
+      program that uses the Library does.
+
+
+   1. You may copy and distribute verbatim copies of the Library's complete
+      source code as you receive it, in any medium, provided that you
+      conspicuously and appropriately publish on each copy an appropriate
+      copyright notice and disclaimer of warranty; keep intact all the notices
+      that refer to this License and to the absence of any warranty; and
+      distribute a copy of this License along with the Library.
+
+      You may charge a fee for the physical act of transferring a copy, and
+      you may at your option offer warranty protection in exchange for a fee.
+
+
+   2. You may modify your copy or copies of the Library or any portion of it,
+      thus forming a work based on the Library, and copy and distribute such
+      modifications or work under the terms of Section 1 above, provided that
+      you also meet all of these conditions:
+
+         a. The modified work must itself be a software library.
+
+         b. You must cause the files modified to carry prominent notices
+            stating that you changed the files and the date of any change.
+
+         c. You must cause the whole of the work to be licensed at no charge
+            to all third parties under the terms of this License.
+
+         d. If a facility in the modified Library refers to a function or a
+            table of data to be supplied by an application program that uses 
the
+            facility, other than as an argument passed when the facility is
+            invoked, then you must make a good faith effort to ensure that, in
+            the event an application does not supply such function or table,
+            the facility still operates, and performs whatever part of its
+            purpose remains meaningful.
+
+      (For example, a function in a library to compute square roots has a
+      purpose that is entirely well-defined independent of the
+      application. Therefore, Subsection 2d requires that any
+      application-supplied function or table used by this function must be
+      optional: if the application does not supply it, the square root
+      function must still compute square roots.)
+
+      These requirements apply to the modified work as a whole. If
+      identifiable sections of that work are not derived from the Library, and
+      can be reasonably considered independent and separate works in
+      themselves, then this License, and its terms, do not apply to those
+      sections when you distribute them as separate works. But when you
+      distribute the same sections as part of a whole which is a work based on
+      the Library, the distribution of the whole must be on the terms of this
+      License, whose permissions for other licensees extend to the entire
+      whole, and thus to each and every part regardless of who wrote it.
+
+      Thus, it is not the intent of this section to claim rights or contest
+      your rights to work written entirely by you; rather, the intent is to
+      exercise the right to control the distribution of derivative or
+      collective works based on the Library.
+
+      In addition, mere aggregation of another work not based on the Library
+      with the Library (or with a work based on the Library) on a volume of a
+      storage or distribution medium does not bring the other work under the
+      scope of this License.
+
+
+   3. You may opt to apply the terms of the ordinary GNU General Public
+      License instead of this License to a given copy of the Library. To do
+      this, you must alter all the notices that refer to this License, so that
+      they refer to the ordinary GNU General Public License, version 2,
+      instead of to this License. (If a newer version than version 2 of the
+      ordinary GNU General Public License has appeared, then you can specify
+      that version instead if you wish.) Do not make any other change in these
+      notices.
+
+      Once this change is made in a given copy, it is irreversible for that
+      copy, so the ordinary GNU General Public License applies to all
+      subsequent copies and derivative works made from that copy.
+
+      This option is useful when you wish to copy part of the code of the
+      Library into a program that is not a library.
+
+
+   4. You may copy and distribute the Library (or a portion or derivative of
+      it, under Section 2) in object code or executable form under the terms
+      of Sections 1 and 2 above provided that you accompany it with the
+      complete corresponding machine-readable source code, which must be
+      distributed under the terms of Sections 1 and 2 above on a medium
+      customarily used for software interchange.
+
+      If distribution of object code is made by offering access to copy from a
+      designated place, then offering equivalent access to copy the source code
+      from the same place satisfies the requirement to distribute the source
+      code, even though third parties are not compelled to copy the source 
along
+      with the object code.
+
+
+   5. A program that contains no derivative of any portion of the Library, but
+      is designed to work with the Library by being compiled or linked with
+      it, is called a "work that uses the Library". Such a work, in isolation,
+      is not a derivative work of the Library, and therefore falls outside the
+      scope of this License.
+
+      However, linking a "work that uses the Library" with the Library creates
+      an executable that is a derivative of the Library (because it contains
+      portions of the Library), rather than a "work that uses the
+      library". The executable is therefore covered by this License. Section 6
+      states terms for distribution of such executables.
+
+      When a "work that uses the Library" uses material from a header file
+      that is part of the Library, the object code for the work may be a
+      derivative work of the Library even though the source code is
+      not. Whether this is true is especially significant if the work can be
+      linked without the Library, or if the work is itself a library. The
+      threshold for this to be true is not precisely defined by law.
+
+      If such an object file uses only numerical parameters, data structure
+      layouts and accessors, and small macros and small inline functions (ten
+      lines or less in length), then the use of the object file is
+      unrestricted, regardless of whether it is legally a derivative
+      work. (Executables containing this object code plus portions of the
+      Library will still fall under Section 6.)
+
+      Otherwise, if the work is a derivative of the Library, you may
+      distribute the object code for the work under the terms of Section 6. Any
+      executables containing that work also fall under Section 6, whether or 
not
+      they are linked directly with the Library itself.
+
+
+   6. As an exception to the Sections above, you may also combine or link a
+      "work that uses the Library" with the Library to produce a work
+      containing portions of the Library, and distribute that work under terms
+      of your choice, provided that the terms permit modification of the work
+      for the customer's own use and reverse engineering for debugging such
+      modifications.
+
+      You must give prominent notice with each copy of the work that the
+      Library is used in it and that the Library and its use are covered by
+      this License. You must supply a copy of this License. If the work during
+      execution displays copyright notices, you must include the copyright
+      notice for the Library among them, as well as a reference directing the
+      user to the copy of this License. Also, you must do one of these things:
+
+         a. Accompany the work with the complete corresponding
+            machine-readable source code for the Library including whatever
+            changes were used in the work (which must be distributed under
+            Sections 1 and 2 above); and, if the work is an executable linked
+            with the Library, with the complete machine-readable "work that 
uses
+            the Library", as object code and/or source code, so that the user
+            can modify the Library and then relink to produce a modified
+            executable containing the modified Library. (It is understood that
+            the user who changes the contents of definitions files in the
+            Library will not necessarily be able to recompile the application
+            to use the modified definitions.) .
+
+         b. Use a suitable shared library mechanism for linking with the
+            Library. A suitable mechanism is one that (1) uses at run time a
+            copy of the library already present on the user's computer system,
+            rather than copying library functions into the executable, and (2)
+            will operate properly with a modified version of the library, if
+            the user installs one, as long as the modified version is
+            interface-compatible with the version that the work was made with.
+
+         c. Accompany the work with a written offer, valid for at least three
+            years, to give the same user the materials specified in Subsection
+            6a, above, for a charge no more than the cost of performing this
+            distribution.
+
+         d. If distribution of the work is made by offering access to copy
+            from a designated place, offer equivalent access to copy the above
+            specified materials from the same place.
+
+         e. Verify that the user has already received a copy of these
+            materials or that you have already sent this user a copy.
+
+      For an executable, the required form of the "work that uses the Library"
+      must include any data and utility programs needed for reproducing the
+      executable from it. However, as a special exception, the materials to be
+      distributed need not include anything that is normally distributed (in
+      either source or binary form) with the major components (compiler,
+      kernel, and so on) of the operating system on which the executable runs,
+      unless that component itself accompanies the executable.
+
+      It may happen that this requirement contradicts the license restrictions
+      of other proprietary libraries that do not normally accompany the
+      operating system. Such a contradiction means you cannot use both them
+      and the Library together in an executable that you distribute.
+
+
+   7. You may place library facilities that are a work based on the Library
+      side-by-side in a single library together with other library facilities
+      not covered by this License, and distribute such a combined library,
+      provided that the separate distribution of the work based on the Library
+      and of the other library facilities is otherwise permitted, and provided
+      that you do these two things:
+
+         a. Accompany the combined library with a copy of the same work based
+            on the Library, uncombined with any other library facilities. This
+            must be distributed under the terms of the Sections above.
+
+         b. Give prominent notice with the combined library of the fact that
+            part of it is a work based on the Library, and explaining where to
+            find the accompanying uncombined form of the same work.
+
+
+   8. You may not copy, modify, sublicense, link with, or distribute the
+      Library except as expressly provided under this License. Any attempt
+      otherwise to copy, modify, sublicense, link with, or distribute the
+      Library is void, and will automatically terminate your rights under this
+      License. However, parties who have received copies, or rights, from you
+      under this License will not have their licenses terminated so long as
+      such parties remain in full compliance.
+
+
+   9. You are not required to accept this License, since you have not signed
+      it. However, nothing else grants you permission to modify or distribute
+      the Library or its derivative works. These actions are prohibited by law
+      if you do not accept this License. Therefore, by modifying or
+      distributing the Library (or any work based on the Library), you
+      indicate your acceptance of this License to do so, and all its terms and
+      conditions for copying, distributing or modifying the Library or works
+      based on it.
+
+
+  10. Each time you redistribute the Library (or any work based on the
+      Library), the recipient automatically receives a license from the
+      original licensor to copy, distribute, link with or modify the Library
+      subject to these terms and conditions. You may not impose any further
+      restrictions on the recipients' exercise of the rights granted
+      herein. You are not responsible for enforcing compliance by third
+      parties with this License.
+
+
+  11. If, as a consequence of a court judgment or allegation of patent
+      infringement or for any other reason (not limited to patent issues),
+      conditions are imposed on you (whether by court order, agreement or
+      otherwise) that contradict the conditions of this License, they do not
+      excuse you from the conditions of this License. If you cannot distribute
+      so as to satisfy simultaneously your obligations under this License and
+      any other pertinent obligations, then as a consequence you may not
+      distribute the Library at all. For example, if a patent license would
+      not permit royalty-free redistribution of the Library by all those who
+      receive copies directly or indirectly through you, then the only way you
+      could satisfy both it and this License would be to refrain entirely from
+      distribution of the Library.
+
+      If any portion of this section is held invalid or unenforceable under
+      any particular circumstance, the balance of the section is intended to
+      apply, and the section as a whole is intended to apply in other
+      circumstances.
+
+      It is not the purpose of this section to induce you to infringe any
+      patents or other property right claims or to contest validity of any
+      such claims; this section has the sole purpose of protecting the
+      integrity of the free software distribution system which is implemented
+      by public license practices. Many people have made generous
+      contributions to the wide range of software distributed through that
+      system in reliance on consistent application of that system; it is up to
+      the author/donor to decide if he or she is willing to distribute
+      software through any other system and a licensee cannot impose that
+      choice.
+
+      This section is intended to make thoroughly clear what is believed to be
+      a consequence of the rest of this License.
+
+
+  12. If the distribution and/or use of the Library is restricted in certain
+      countries either by patents or by copyrighted interfaces, the original
+      copyright holder who places the Library under this License may add an
+      explicit geographical distribution limitation excluding those countries,
+      so that distribution is permitted only in or among countries not thus
+      excluded. In such case, this License incorporates the limitation as if
+      written in the body of this License.
+
+
+  13. The Free Software Foundation may publish revised and/or new versions of
+      the Lesser General Public License from time to time. Such new versions
+      will be similar in spirit to the present version, but may differ in
+      detail to address new problems or concerns.
+
+      Each version is given a distinguishing version number. If the Library
+      specifies a version number of this License which applies to it and "any
+      later version", you have the option of following the terms and conditions
+      either of that version or of any later version published by the Free
+      Software Foundation. If the Library does not specify a license version
+      number, you may choose any version ever published by the Free Software
+      Foundation.
+
+
+  14. If you wish to incorporate parts of the Library into other free programs
+      whose distribution conditions are incompatible with these, write to the
+      author to ask for permission. For software which is copyrighted by the
+      Free Software Foundation, write to the Free Software Foundation; we
+      sometimes make exceptions for this. Our decision will be guided by the
+      two goals of preserving the free status of all derivatives of our free
+      software and of promoting the sharing and reuse of software generally.
+
+       No Warranty
+
+  15. Because the library is licensed free of charge, there is no warranty for
+      the library, to the extent permitted by applicable law. Except when
+      otherwise stated in writing the copyright holders and/or other parties
+      provide the library "as is" without warranty of any kind, either 
expressed
+      or implied, including, but not limited to, the implied warranties of
+      merchantability and fitness for a particular purpose. The entire risk as
+      to the quality and performance of the library is with you. Should the
+      library prove defective, you assume the cost of all necessary servicing,
+      repair or correction.
+
+  16. In no event unless required by applicable law or agreed to in writing
+      will any copyright holder, or any other party who may modify and/or
+      redistribute the library as permitted above, be liable to you for
+      damages, including any general, special, incidental or consequential
+      damages arising out of the use or inability to use the library
+      (including but not limited to loss of data or data being rendered
+      inaccurate or losses sustained by you or third parties or a failure of
+      the library to operate with any other software), even if such holder or
+      other party has been advised of the possibility of such damages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/envisage-4.7.0/setup.py new/envisage-4.7.2/setup.py
--- old/envisage-4.7.0/setup.py 2018-08-13 18:36:23.000000000 +0200
+++ new/envisage-4.7.2/setup.py 2019-05-03 12:06:44.000000000 +0200
@@ -8,9 +8,9 @@
 
 MAJOR = 4
 MINOR = 7
-MICRO = 0
+MICRO = 2
 
-IS_RELEASED = True 
+IS_RELEASED = True
 
 VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO)
 
@@ -153,12 +153,21 @@
         install_requires = __requires__,
         license = "BSD",
         packages = find_packages(),
-        package_data = {'': ['images/*', '*.ini',],
-                        'envisage.tests': ['bad_eggs/*.egg',
-                                           'eggs/*.egg',
-                                           'plugins/pear/*.py',
-                                           'plugins/banana/*.py',
-                                           'plugins/orange/*.py']},
+        package_data = {
+            '': ['images/*', '*.ini'],
+            'envisage.tests': [
+                'bad_eggs/*.egg',
+                'eggs/*.egg',
+                'plugins/pear/*.py',
+                'plugins/banana/*.py',
+                'plugins/orange/*.py',
+            ],
+            'envisage.ui.single_project': [
+                '*.txt',
+            ],
+            'envisage.plugins.remote_editor.editor_plugins': ["*.txt"],
+            'envisage.plugins.remote_editor.editor_plugins.emacs': ["*.el"],
+        },
         platforms = ["Windows", "Linux", "Mac OS-X", "Unix", "Solaris"],
         zip_safe = False,
     )


Reply via email to