Hello community,

here is the log from the commit of package python-oslo.concurrency for 
openSUSE:Factory checked in at 2020-06-05 20:13:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.concurrency (Old)
 and      /work/SRC/openSUSE:Factory/.python-oslo.concurrency.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-oslo.concurrency"

Fri Jun  5 20:13:47 2020 rev:16 rq:803587 version:4.0.2

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-oslo.concurrency/python-oslo.concurrency.changes
  2020-03-24 22:32:46.517102034 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-oslo.concurrency.new.3606/python-oslo.concurrency.changes
        2020-06-05 20:15:51.842903111 +0200
@@ -1,0 +2,25 @@
+Tue May 12 09:54:07 UTC 2020 - [email protected]
+
+- update to version 4.0.2
+  - Spiff up docs for *_with_prefix
+  - Blacklist sphinx 2.1.0 (autodoc bug)
+  - tox: Keeping going with docs
+  - Stop to build universal wheel
+  - Update the constraints url
+  - tox: Trivial cleanup
+  - Update master for stable/train
+  - ignore reno builds artifacts
+  - Drop python 2.7 support and testing
+  - Document management and history of lock files
+  - Update hacking for Python3
+  - Switch to Ussuri jobs
+  - Add lock_with_prefix convenience utility
+  - Fix remove_lock test
+  - trivial: Cleanup tox.ini
+  - remove outdated header
+  - Use unittest.mock instead of third party mock
+  - Stop configuring install_command in tox.
+  - Some test cleanup
+  - Bump the openstackdocstheme extension to 1.20
+
+-------------------------------------------------------------------

Old:
----
  oslo.concurrency-3.30.0.tar.gz

New:
----
  oslo.concurrency-4.0.2.tar.gz

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

Other differences:
------------------
++++++ python-oslo.concurrency.spec ++++++
--- /var/tmp/diff_new_pack.ENShfI/_old  2020-06-05 20:15:52.766906511 +0200
+++ /var/tmp/diff_new_pack.ENShfI/_new  2020-06-05 20:15:52.766906511 +0200
@@ -17,13 +17,13 @@
 
 
 Name:           python-oslo.concurrency
-Version:        3.30.0
+Version:        4.0.2
 Release:        0
 Summary:        OpenStack oslo.concurrency library
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/oslo.concurrency
-Source0:        
https://files.pythonhosted.org/packages/source/o/oslo.concurrency/oslo.concurrency-3.30.0.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/o/oslo.concurrency/oslo.concurrency-4.0.2.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-eventlet
 BuildRequires:  python3-fasteners >= 0.7.0
@@ -77,7 +77,7 @@
 This package contains the documentation.
 
 %prep
-%autosetup -p1 -n oslo.concurrency-3.30.0
+%autosetup -p1 -n oslo.concurrency-4.0.2
 %py_req_cleanup
 
 %build

++++++ _service ++++++
--- /var/tmp/diff_new_pack.ENShfI/_old  2020-06-05 20:15:52.814906687 +0200
+++ /var/tmp/diff_new_pack.ENShfI/_new  2020-06-05 20:15:52.814906687 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/train/openstack/oslo.concurrency/oslo.concurrency.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/ussuri/openstack/oslo.concurrency/oslo.concurrency.spec.j2</param>
     <param name="output-name">python-oslo.concurrency.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/oslo.concurrency/stable/train/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/oslo.concurrency/raw/branch/stable/ussuri/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,oslo.concurrency</param>
   </service>

++++++ oslo.concurrency-3.30.0.tar.gz -> oslo.concurrency-4.0.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/.zuul.yaml 
new/oslo.concurrency-4.0.2/.zuul.yaml
--- old/oslo.concurrency-3.30.0/.zuul.yaml      2019-09-04 16:25:11.000000000 
+0200
+++ new/oslo.concurrency-4.0.2/.zuul.yaml       2020-04-07 12:10:50.000000000 
+0200
@@ -1,12 +1,10 @@
 - project:
     templates:
       - check-requirements
-      - lib-forward-testing
       - lib-forward-testing-python3
       - openstack-cover-jobs
       - openstack-lower-constraints-jobs
-      - openstack-python-jobs
-      - openstack-python3-train-jobs
+      - openstack-python3-ussuri-jobs
       - periodic-stable-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/AUTHORS 
new/oslo.concurrency-4.0.2/AUTHORS
--- old/oslo.concurrency-3.30.0/AUTHORS 2019-09-04 16:25:50.000000000 +0200
+++ new/oslo.concurrency-4.0.2/AUTHORS  2020-04-07 12:11:49.000000000 +0200
@@ -30,6 +30,7 @@
 Dirk Mueller <[email protected]>
 Doug Hellmann <[email protected]>
 Doug Hellmann <[email protected]>
+Eric Fried <[email protected]>
 Eric Windisch <[email protected]>
 Flaper Fesp <[email protected]>
 Flavio Percoco <[email protected]>
@@ -37,6 +38,7 @@
 Gary Kotton <[email protected]>
 Gevorg Davoian <[email protected]>
 Ghanshyam Mann <[email protected]>
+Gorka Eguileor <[email protected]>
 HervĂ© Beraud <[email protected]>
 IWAMOTO Toshihiro <[email protected]>
 Ian Cordasco <[email protected]>
@@ -72,9 +74,11 @@
 Salvatore Orlando <[email protected]>
 Sean Dague <[email protected]>
 Sean M. Collins <[email protected]>
+Sean McGinnis <[email protected]>
 Sergey Kraynev <[email protected]>
 Sergey Lukjanov <[email protected]>
 Shawn Boyette <[email protected]>
+Stephen Finucane <[email protected]>
 Steve Kowalik <[email protected]>
 Steve Martinelli <[email protected]>
 Thomas Bechtold <[email protected]>
@@ -91,6 +95,7 @@
 ZhijunWei <[email protected]>
 ZhongShengping <[email protected]>
 Zhongyue Luo <[email protected]>
+caoyuan <[email protected]>
 gecong1973 <[email protected]>
 gengchc2 <[email protected]>
 howardlee <[email protected]>
@@ -98,6 +103,7 @@
 jichenjc <[email protected]>
 loooosy <[email protected]>
 melissaml <[email protected]>
+pengyuesheng <[email protected]>
 prashkre <[email protected]>
 ricolin <[email protected]>
 shangxiaobj <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/ChangeLog 
new/oslo.concurrency-4.0.2/ChangeLog
--- old/oslo.concurrency-3.30.0/ChangeLog       2019-09-04 16:25:50.000000000 
+0200
+++ new/oslo.concurrency-4.0.2/ChangeLog        2020-04-07 12:11:49.000000000 
+0200
@@ -1,6 +1,42 @@
 CHANGES
 =======
 
+4.0.2
+-----
+
+* Use unittest.mock instead of third party mock
+* Update hacking for Python3
+
+4.0.1
+-----
+
+* trivial: Cleanup tox.ini
+* ignore reno builds artifacts
+* remove outdated header
+* Stop to build universal wheel
+
+4.0.0
+-----
+
+* Drop python 2.7 support and testing
+* Stop configuring install\_command in tox
+* tox: Trivial cleanup
+* Fix remove\_lock test
+
+3.31.0
+------
+
+* Spiff up docs for \*\_with\_prefix
+* Switch to Ussuri jobs
+* tox: Keeping going with docs
+* Document management and history of lock files
+* Bump the openstackdocstheme extension to 1.20
+* Blacklist sphinx 2.1.0 (autodoc bug)
+* Update the constraints url
+* Update master for stable/train
+* Add lock\_with\_prefix convenience utility
+* Some test cleanup
+
 3.30.0
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/PKG-INFO 
new/oslo.concurrency-4.0.2/PKG-INFO
--- old/oslo.concurrency-3.30.0/PKG-INFO        2019-09-04 16:25:50.000000000 
+0200
+++ new/oslo.concurrency-4.0.2/PKG-INFO 2020-04-07 12:11:49.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: oslo.concurrency
-Version: 3.30.0
+Version: 4.0.2
 Summary: Oslo Concurrency library
 Home-page: https://docs.openstack.org/oslo.concurrency/latest/
 Author: OpenStack
@@ -41,8 +41,9 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/doc/requirements.txt 
new/oslo.concurrency-4.0.2/doc/requirements.txt
--- old/oslo.concurrency-3.30.0/doc/requirements.txt    2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/doc/requirements.txt     2020-04-07 
12:10:50.000000000 +0200
@@ -2,9 +2,8 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 # this is required for the docs build jobs
-sphinx!=1.6.6,!=1.6.7,>=1.6.2,<2.0.0;python_version=='2.7' # BSD
-sphinx!=1.6.6,!=1.6.7,>=1.6.2;python_version>='3.4' # BSD
-openstackdocstheme>=1.18.1 # Apache-2.0
+sphinx>=1.8.0,!=2.1.0 # BSD
+openstackdocstheme>=1.20.0 # Apache-2.0
 reno>=2.5.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
 sphinxcontrib-apidoc>=0.2.0  # BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/doc/source/admin/index.rst 
new/oslo.concurrency-4.0.2/doc/source/admin/index.rst
--- old/oslo.concurrency-3.30.0/doc/source/admin/index.rst      1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.concurrency-4.0.2/doc/source/admin/index.rst       2020-04-07 
12:10:50.000000000 +0200
@@ -0,0 +1,96 @@
+=====================
+ Administrator Guide
+=====================
+
+This section contains information useful to administrators operating a service
+that uses oslo.concurrency.
+
+Lock File Management
+====================
+
+For services that use oslo.concurrency's external lock functionality for
+interprocess locking, lock files will be stored in the location specified
+by the ``lock_path`` config option in the ``oslo_concurrency`` section.
+These lock files are not automatically deleted by oslo.concurrency because
+the library has no way to know when the service is done with a lock, and
+deleting a lock file that is being held by the service would cause
+concurrency problems. Some services do delete lock files when they are done
+with them, but deletion of a service's lock files while the service is
+running should only be done by the service itself. External cleanup methods
+cannot reasonably know when a lock is no longer needed.
+
+However, to prevent the ``lock_path`` directory from growing indefinitely,
+it is a good idea to occasionally delete all the lock files from it. The only
+safe time to do this is when the service is not running, such as after a
+reboot or when the service is down for maintenance. In the latter case, make
+sure that all related services (such as api, worker, conductor, etc) are down
+If any process that might hold locks is still running, deleting lock files may
+introduce inconsistency in the service. One possible approach to this cleanup
+is to put the ``lock_path`` in tmpfs so it will be automatically cleared on
+reboot.
+
+Note that in general, leftover lock files are a cosmetic nuisance at worst.
+If you do run into a functional problem as a result of large numbers of
+lock files, please report it to the Oslo team so we can look into other
+mitigation strategies.
+
+Frequently Asked Questions
+==========================
+
+What is the history of the lock file issue?
+-------------------------------------------
+
+It comes up every few months when a deployer of OpenStack notices that they
+have a large number of lock files lying around, apparently unused. A thread
+is started on the mailing list and one of the Oslo developers has to provide
+an explanation of why it works the way it does. This FAQ is intended to be an
+official replacement for the one-off explanation that is usually given.
+
+The code responsible for this behavior has actually moved to the
+`fasteners <https://github.com/harlowja/fasteners>`_ project, and there
+is an
+`issue addressing the leftover lock files 
<https://github.com/harlowja/fasteners/issues/26>`_
+there. It covers much of the technical history of the problem, as well as
+some proposed solutions.
+
+Why hasn't this been fixed yet?
+-------------------------------
+
+Because to the Oslo developers' knowledge, no one has ever had a functional
+issue as a result of leftover lock files. This makes it a lower priority
+problem, and because of the complexity of fixing it nobody has been able to
+yet. If functional issues are found, they should be reported as a bug
+against oslo.concurrency so they can be tracked. In the meantime, this will
+likely continue to be treated as a cosmetic annoyance and prioritized
+appropriately.
+
+Why aren't lock files deleted when the lock is released?
+--------------------------------------------------------
+
+In our testing, when a lock file was deleted while another process was waiting
+for it, it created a sort of split-brain situation between any process that had
+been waiting for the deleted file, and any process that attempted to lock the
+file after it had been deleted. Essentially, two processes could end up holding
+the same lock at the same time, which made this an unacceptable solution.
+
+Why don't you use some other method of interprocess locking?
+------------------------------------------------------------
+
+We tried. Both Posix and SysV IPC were explored as alternatives. Unfortunately,
+both have significant issues on Linux. Posix locks cannot be broken if the
+process holding them crashes (at least not without a reboot). SysV locks have
+a limited range of numerical ids, and because oslo.concurrency supports
+string-based lock names, the possibility of collisions when hashing names was
+too high. It was deemed better to have the file-based locking mechanism that
+would always work than a different method that introduced serious new problems.
+
+Bonus Question: Why doesn't ``lock_path`` default to a temp directory?
+----------------------------------------------------------------------
+
+Because every process that may need to hold a lock must use the same value
+for ``lock_path`` or it becomes useless. If we allowed ``lock_path`` to be
+unset and just created a temp directory on startup, each process would create
+its own temp directory and there would be no actual coordination between them.
+
+While this isn't strictly related to the lock file issue, it is another FAQ
+about oslo.concurrency so it made sense to mention it here.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/doc/source/conf.py 
new/oslo.concurrency-4.0.2/doc/source/conf.py
--- old/oslo.concurrency-3.30.0/doc/source/conf.py      2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/doc/source/conf.py       2020-04-07 
12:10:50.000000000 +0200
@@ -32,7 +32,6 @@
 master_doc = 'index'
 
 # General information about the project.
-project = u'oslo.concurrency'
 copyright = u'2014, OpenStack Foundation'
 
 # If true, '()' will be appended to :func: etc. cross-reference text.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/doc/source/index.rst 
new/oslo.concurrency-4.0.2/doc/source/index.rst
--- old/oslo.concurrency-3.30.0/doc/source/index.rst    2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/doc/source/index.rst     2020-04-07 
12:10:50.000000000 +0200
@@ -10,6 +10,7 @@
    :maxdepth: 1
 
    install/index
+   admin/index
    user/index
    configuration/index
    contributor/index
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/lower-constraints.txt 
new/oslo.concurrency-4.0.2/lower-constraints.txt
--- old/oslo.concurrency-3.30.0/lower-constraints.txt   2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/lower-constraints.txt    2020-04-07 
12:10:50.000000000 +0200
@@ -24,12 +24,11 @@
 linecache2==1.0.0
 MarkupSafe==1.0
 mccabe==0.2.1
-mock==2.0.0
 monotonic==0.6
 mox3==0.20.0
 netaddr==0.7.18
 netifaces==0.10.4
-openstackdocstheme==1.18.1
+openstackdocstheme==1.20.0
 os-client-config==1.28.0
 oslo.config==5.2.0
 oslo.i18n==3.15.3
@@ -51,7 +50,7 @@
 six==1.10.0
 smmap==0.9.0
 snowballstemmer==1.2.1
-Sphinx==1.6.2
+Sphinx==1.8.0
 sphinxcontrib-websupport==1.0.1
 stevedore==1.20.0
 stestr==2.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/oslo.concurrency.egg-info/PKG-INFO 
new/oslo.concurrency-4.0.2/oslo.concurrency.egg-info/PKG-INFO
--- old/oslo.concurrency-3.30.0/oslo.concurrency.egg-info/PKG-INFO      
2019-09-04 16:25:50.000000000 +0200
+++ new/oslo.concurrency-4.0.2/oslo.concurrency.egg-info/PKG-INFO       
2020-04-07 12:11:49.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: oslo.concurrency
-Version: 3.30.0
+Version: 4.0.2
 Summary: Oslo Concurrency library
 Home-page: https://docs.openstack.org/oslo.concurrency/latest/
 Author: OpenStack
@@ -41,8 +41,9 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/oslo.concurrency.egg-info/SOURCES.txt 
new/oslo.concurrency-4.0.2/oslo.concurrency.egg-info/SOURCES.txt
--- old/oslo.concurrency-3.30.0/oslo.concurrency.egg-info/SOURCES.txt   
2019-09-04 16:25:50.000000000 +0200
+++ new/oslo.concurrency-4.0.2/oslo.concurrency.egg-info/SOURCES.txt    
2020-04-07 12:11:49.000000000 +0200
@@ -18,6 +18,7 @@
 doc/requirements.txt
 doc/source/conf.py
 doc/source/index.rst
+doc/source/admin/index.rst
 doc/source/configuration/index.rst
 doc/source/contributor/contributing.rst
 doc/source/contributor/history.rst
@@ -60,6 +61,7 @@
 releasenotes/notes/add-option-for-fair-locks-b6d660e97683cec6.yaml
 releasenotes/notes/add-python-exec-kwarg-3a7a0c0849f9bb21.yaml
 releasenotes/notes/add_reno-3b4ae0789e9c45b4.yaml
+releasenotes/notes/drop-python27-support-7d837a45dae941bb.yaml
 releasenotes/source/conf.py
 releasenotes/source/index.rst
 releasenotes/source/newton.rst
@@ -68,6 +70,7 @@
 releasenotes/source/queens.rst
 releasenotes/source/rocky.rst
 releasenotes/source/stein.rst
+releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/oslo.concurrency.egg-info/pbr.json 
new/oslo.concurrency-4.0.2/oslo.concurrency.egg-info/pbr.json
--- old/oslo.concurrency-3.30.0/oslo.concurrency.egg-info/pbr.json      
2019-09-04 16:25:50.000000000 +0200
+++ new/oslo.concurrency-4.0.2/oslo.concurrency.egg-info/pbr.json       
2020-04-07 12:11:49.000000000 +0200
@@ -1 +1 @@
-{"git_version": "610df38", "is_release": true}
\ No newline at end of file
+{"git_version": "60a157a", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/oslo.concurrency.egg-info/requires.txt 
new/oslo.concurrency-4.0.2/oslo.concurrency.egg-info/requires.txt
--- old/oslo.concurrency-3.30.0/oslo.concurrency.egg-info/requires.txt  
2019-09-04 16:25:50.000000000 +0200
+++ new/oslo.concurrency-4.0.2/oslo.concurrency.egg-info/requires.txt   
2020-04-07 12:11:49.000000000 +0200
@@ -4,6 +4,3 @@
 oslo.utils>=3.33.0
 six>=1.10.0
 fasteners>=0.7.0
-
-[:(python_version=='2.7' or python_version=='2.6' or python_version=='3.3')]
-enum34>=1.0.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/oslo_concurrency/lockutils.py 
new/oslo.concurrency-4.0.2/oslo_concurrency/lockutils.py
--- old/oslo.concurrency-3.30.0/oslo_concurrency/lockutils.py   2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/oslo_concurrency/lockutils.py    2020-04-07 
12:10:50.000000000 +0200
@@ -281,6 +281,37 @@
                 LOG.debug('Releasing lock "%(lock)s"', {'lock': name})
 
 
+def lock_with_prefix(lock_file_prefix):
+    """Partial object generator for the lock context manager.
+
+    Redefine lock in each project like so::
+
+        (in nova/utils.py)
+        from oslo_concurrency import lockutils
+
+        _prefix = 'nova'
+        lock = lockutils.lock_with_prefix(_prefix)
+        lock_cleanup = lockutils.remove_external_lock_file_with_prefix(_prefix)
+
+
+        (in nova/foo.py)
+        from nova import utils
+
+        with utils.lock('mylock'):
+           ...
+
+    Eventually clean up with::
+
+        lock_cleanup('mylock')
+
+    :param lock_file_prefix: A string used to provide lock files on disk with a
+        meaningful prefix. Will be separated from the lock name with a hyphen,
+        which may optionally be included in the lock_file_prefix (e.g.
+        ``'nova'`` and ``'nova-'`` are equivalent).
+    """
+    return functools.partial(lock, lock_file_prefix=lock_file_prefix)
+
+
 def synchronized(name, lock_file_prefix=None, external=False, lock_path=None,
                  semaphores=None, delay=0.01, fair=False):
     """Synchronization decorator.
@@ -350,7 +381,9 @@
         (in nova/utils.py)
         from oslo_concurrency import lockutils
 
-        synchronized = lockutils.synchronized_with_prefix('nova-')
+        _prefix = 'nova'
+        synchronized = lockutils.synchronized_with_prefix(_prefix)
+        lock_cleanup = lockutils.remove_external_lock_file_with_prefix(_prefix)
 
 
         (in nova/foo.py)
@@ -360,8 +393,14 @@
         def bar(self, *args):
            ...
 
-    The lock_file_prefix argument is used to provide lock files on disk with a
-    meaningful prefix.
+    Eventually clean up with::
+
+        lock_cleanup('mylock')
+
+    :param lock_file_prefix: A string used to provide lock files on disk with a
+        meaningful prefix. Will be separated from the lock name with a hyphen,
+        which may optionally be included in the lock_file_prefix (e.g.
+        ``'nova'`` and ``'nova-'`` are equivalent).
     """
 
     return functools.partial(synchronized, lock_file_prefix=lock_file_prefix)
@@ -375,18 +414,25 @@
         (in nova/utils.py)
         from oslo_concurrency import lockutils
 
-        synchronized = lockutils.synchronized_with_prefix('nova-')
-        synchronized_remove = lockutils.remove_external_lock_file_with_prefix(
-            'nova-')
+        _prefix = 'nova'
+        synchronized = lockutils.synchronized_with_prefix(_prefix)
+        lock = lockutils.lock_with_prefix(_prefix)
+        lock_cleanup = lockutils.remove_external_lock_file_with_prefix(_prefix)
 
         (in nova/foo.py)
         from nova import utils
 
         @utils.synchronized('mylock')
         def bar(self, *args):
-           ...
+            ...
+
+        def baz(self, *args):
+            ...
+            with utils.lock('mylock'):
+                ...
+            ...
 
-        <eventually call synchronized_remove('mylock') to cleanup>
+        <eventually call lock_cleanup('mylock') to clean up>
 
     The lock_file_prefix argument is used to provide lock files on disk with a
     meaningful prefix.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/oslo_concurrency/tests/unit/test_lockutils.py 
new/oslo.concurrency-4.0.2/oslo_concurrency/tests/unit/test_lockutils.py
--- old/oslo.concurrency-3.30.0/oslo_concurrency/tests/unit/test_lockutils.py   
2019-09-04 16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/oslo_concurrency/tests/unit/test_lockutils.py    
2020-04-07 12:10:50.000000000 +0200
@@ -15,13 +15,13 @@
 import collections
 import multiprocessing
 import os
-import shutil
 import signal
 import subprocess
 import sys
 import tempfile
 import threading
 import time
+from unittest import mock
 
 from oslo_config import cfg
 from oslotest import base as test_base
@@ -188,65 +188,54 @@
 
     def test_nested_synchronized_external_works(self):
         """We can nest external syncs."""
-        tempdir = tempfile.mkdtemp()
-        try:
-            self.config(lock_path=tempdir, group='oslo_concurrency')
-            sentinel = object()
-
-            @lockutils.synchronized('testlock1', 'test-', external=True)
-            def outer_lock():
-
-                @lockutils.synchronized('testlock2', 'test-', external=True)
-                def inner_lock():
-                    return sentinel
-                return inner_lock()
-
-            self.assertEqual(sentinel, outer_lock())
-
-        finally:
-            if os.path.exists(tempdir):
-                shutil.rmtree(tempdir)
+        self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
+        sentinel = object()
+
+        @lockutils.synchronized('testlock1', 'test-', external=True)
+        def outer_lock():
+
+            @lockutils.synchronized('testlock2', 'test-', external=True)
+            def inner_lock():
+                return sentinel
+            return inner_lock()
+
+        self.assertEqual(sentinel, outer_lock())
 
     def _do_test_lock_externally(self):
         """We can lock across multiple processes."""
-        handles_dir = tempfile.mkdtemp()
-        try:
-            children = []
-            for n in range(50):
-                queue = multiprocessing.Queue()
-                proc = multiprocessing.Process(
-                    target=lock_files,
-                    args=(handles_dir, queue))
-                proc.start()
-                children.append((proc, queue))
-            for child, queue in children:
-                child.join()
-                count = queue.get(block=False)
-                self.assertEqual(50, count)
-        finally:
-            if os.path.exists(handles_dir):
-                shutil.rmtree(handles_dir, ignore_errors=True)
+        children = []
+        for n in range(50):
+            queue = multiprocessing.Queue()
+            proc = multiprocessing.Process(
+                target=lock_files,
+                args=(tempfile.mkdtemp(), queue))
+            proc.start()
+            children.append((proc, queue))
+        for child, queue in children:
+            child.join()
+            count = queue.get(block=False)
+            self.assertEqual(50, count)
 
     def test_lock_externally(self):
-        lock_dir = tempfile.mkdtemp()
-        self.config(lock_path=lock_dir, group='oslo_concurrency')
+        self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
 
-        try:
-            self._do_test_lock_externally()
-        finally:
-            if os.path.exists(lock_dir):
-                shutil.rmtree(lock_dir, ignore_errors=True)
+        self._do_test_lock_externally()
 
     def test_lock_externally_lock_dir_not_exist(self):
         lock_dir = tempfile.mkdtemp()
         os.rmdir(lock_dir)
         self.config(lock_path=lock_dir, group='oslo_concurrency')
 
-        try:
-            self._do_test_lock_externally()
-        finally:
-            if os.path.exists(lock_dir):
-                shutil.rmtree(lock_dir, ignore_errors=True)
+        self._do_test_lock_externally()
+
+    def test_lock_with_prefix(self):
+        # TODO(efried): Embetter this test
+        self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
+        foo = lockutils.lock_with_prefix('mypfix-')
+
+        with foo('mylock', external=True):
+            # We can't check much
+            pass
 
     def test_synchronized_with_prefix(self):
         lock_name = 'mylock'
@@ -264,115 +253,93 @@
         self.assertTrue(bar(lock_dir, lock_pfix, lock_name))
 
     def test_synchronized_without_prefix(self):
-        lock_dir = tempfile.mkdtemp()
-        self.config(lock_path=lock_dir, group='oslo_concurrency')
+        self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
 
         @lockutils.synchronized('lock', external=True)
         def test_without_prefix():
             # We can't check much
             pass
 
-        try:
-            test_without_prefix()
-        finally:
-            if os.path.exists(lock_dir):
-                shutil.rmtree(lock_dir, ignore_errors=True)
+        test_without_prefix()
 
     def test_synchronized_prefix_without_hypen(self):
-        lock_dir = tempfile.mkdtemp()
-        self.config(lock_path=lock_dir, group='oslo_concurrency')
+        self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
 
         @lockutils.synchronized('lock', 'hypen', True)
         def test_without_hypen():
             # We can't check much
             pass
 
-        try:
-            test_without_hypen()
-        finally:
-            if os.path.exists(lock_dir):
-                shutil.rmtree(lock_dir, ignore_errors=True)
+        test_without_hypen()
 
     def test_contextlock(self):
-        lock_dir = tempfile.mkdtemp()
-        self.config(lock_path=lock_dir, group='oslo_concurrency')
+        self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
 
-        try:
-            # Note(flaper87): Lock is not external, which means
-            # a semaphore will be yielded
-            with lockutils.lock("test") as sem:
-                if six.PY2:
-                    self.assertIsInstance(sem, threading._Semaphore)
-                else:
-                    self.assertIsInstance(sem, threading.Semaphore)
+        # Note(flaper87): Lock is not external, which means
+        # a semaphore will be yielded
+        with lockutils.lock("test") as sem:
+            if six.PY2:
+                self.assertIsInstance(sem, threading._Semaphore)
+            else:
+                self.assertIsInstance(sem, threading.Semaphore)
+
+            # NOTE(flaper87): Lock is external so an InterProcessLock
+            # will be yielded.
+            with lockutils.lock("test2", external=True) as lock:
+                self.assertTrue(lock.exists())
 
-                # NOTE(flaper87): Lock is external so an InterProcessLock
-                # will be yielded.
-                with lockutils.lock("test2", external=True) as lock:
-                    self.assertTrue(lock.exists())
-
-                with lockutils.lock("test1",
-                                    external=True) as lock1:
-                    self.assertIsInstance(lock1,
-                                          lockutils.InterProcessLock)
-        finally:
-            if os.path.exists(lock_dir):
-                shutil.rmtree(lock_dir, ignore_errors=True)
+            with lockutils.lock("test1", external=True) as lock1:
+                self.assertIsInstance(lock1, lockutils.InterProcessLock)
 
     def test_contextlock_unlocks(self):
-        lock_dir = tempfile.mkdtemp()
-        self.config(lock_path=lock_dir, group='oslo_concurrency')
-
-        sem = None
+        self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
 
-        try:
-            with lockutils.lock("test") as sem:
-                if six.PY2:
-                    self.assertIsInstance(sem, threading._Semaphore)
-                else:
-                    self.assertIsInstance(sem, threading.Semaphore)
-
-                with lockutils.lock("test2", external=True) as lock:
-                    self.assertTrue(lock.exists())
+        with lockutils.lock("test") as sem:
+            if six.PY2:
+                self.assertIsInstance(sem, threading._Semaphore)
+            else:
+                self.assertIsInstance(sem, threading.Semaphore)
 
-                # NOTE(flaper87): Lock should be free
-                with lockutils.lock("test2", external=True) as lock:
-                    self.assertTrue(lock.exists())
+            with lockutils.lock("test2", external=True) as lock:
+                self.assertTrue(lock.exists())
 
             # NOTE(flaper87): Lock should be free
-            # but semaphore should already exist.
-            with lockutils.lock("test") as sem2:
-                self.assertEqual(sem, sem2)
-        finally:
-            if os.path.exists(lock_dir):
-                shutil.rmtree(lock_dir, ignore_errors=True)
-
-    def _test_remove_lock_external_file(self, lock_dir, use_external=False):
-        lock_name = 'mylock'
-        lock_pfix = 'mypfix-remove-lock-test-'
+            with lockutils.lock("test2", external=True) as lock:
+                self.assertTrue(lock.exists())
 
-        if use_external:
-            lock_path = lock_dir
-        else:
-            lock_path = None
-
-        lockutils.remove_external_lock_file(lock_name, lock_pfix, lock_path)
-
-        for ent in os.listdir(lock_dir):
-            self.assertRaises(OSError, ent.startswith, lock_pfix)
-
-        if os.path.exists(lock_dir):
-            shutil.rmtree(lock_dir, ignore_errors=True)
-
-    def test_remove_lock_external_file(self):
-        lock_dir = tempfile.mkdtemp()
-        self.config(lock_path=lock_dir, group='oslo_concurrency')
-        self._test_remove_lock_external_file(lock_dir)
-
-    def test_remove_lock_external_file_lock_path(self):
-        lock_dir = tempfile.mkdtemp()
-        self._test_remove_lock_external_file(lock_dir,
-                                             use_external=True)
+        # NOTE(flaper87): Lock should be free
+        # but semaphore should already exist.
+        with lockutils.lock("test") as sem2:
+            self.assertEqual(sem, sem2)
+
+    @mock.patch('logging.Logger.info')
+    @mock.patch('os.remove')
+    @mock.patch('oslo_concurrency.lockutils._get_lock_path')
+    def test_remove_lock_external_file_exists(self, path_mock, remove_mock,
+                                              log_mock):
+        lockutils.remove_external_lock_file(mock.sentinel.name,
+                                            mock.sentinel.prefix,
+                                            mock.sentinel.lock_path)
+
+        path_mock.assert_called_once_with(mock.sentinel.name,
+                                          mock.sentinel.prefix,
+                                          mock.sentinel.lock_path)
+        remove_mock.assert_called_once_with(path_mock.return_value)
+        log_mock.assert_not_called()
+
+    @mock.patch('logging.Logger.info')
+    @mock.patch('os.remove', side_effect=OSError)
+    @mock.patch('oslo_concurrency.lockutils._get_lock_path')
+    def test_remove_lock_external_file_doesnt_exists(self, path_mock,
+                                                     remove_mock, log_mock):
+        lockutils.remove_external_lock_file(mock.sentinel.name,
+                                            mock.sentinel.prefix,
+                                            mock.sentinel.lock_path)
+        path_mock.assert_called_once_with(mock.sentinel.name,
+                                          mock.sentinel.prefix,
+                                          mock.sentinel.lock_path)
+        remove_mock.assert_called_once_with(path_mock.return_value)
+        log_mock.assert_called()
 
     def test_no_slash_in_b64(self):
         # base64(sha1(foobar)) has a slash in it
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/oslo_concurrency/tests/unit/test_lockutils_eventlet.py
 
new/oslo.concurrency-4.0.2/oslo_concurrency/tests/unit/test_lockutils_eventlet.py
--- 
old/oslo.concurrency-3.30.0/oslo_concurrency/tests/unit/test_lockutils_eventlet.py
  2019-09-04 16:25:11.000000000 +0200
+++ 
new/oslo.concurrency-4.0.2/oslo_concurrency/tests/unit/test_lockutils_eventlet.py
   2020-04-07 12:10:50.000000000 +0200
@@ -13,7 +13,6 @@
 #    under the License.
 
 import os
-import shutil
 import tempfile
 
 import eventlet
@@ -28,32 +27,27 @@
     def test_concurrent_green_lock_succeeds(self):
         """Verify spawn_n greenthreads with two locks run concurrently."""
         tmpdir = tempfile.mkdtemp()
-        try:
-            self.completed = False
+        self.completed = False
 
-            def locka(wait):
-                a = lockutils.InterProcessLock(os.path.join(tmpdir, 'a'))
-                with a:
-                    wait.wait()
-                self.completed = True
-
-            def lockb(wait):
-                b = lockutils.InterProcessLock(os.path.join(tmpdir, 'b'))
-                with b:
-                    wait.wait()
-
-            wait1 = eventlet.event.Event()
-            wait2 = eventlet.event.Event()
-            pool = greenpool.GreenPool()
-            pool.spawn_n(locka, wait1)
-            pool.spawn_n(lockb, wait2)
-            wait2.send()
-            eventlet.sleep(0)
-            wait1.send()
-            pool.waitall()
-
-            self.assertTrue(self.completed)
-
-        finally:
-            if os.path.exists(tmpdir):
-                shutil.rmtree(tmpdir)
+        def locka(wait):
+            a = lockutils.InterProcessLock(os.path.join(tmpdir, 'a'))
+            with a:
+                wait.wait()
+            self.completed = True
+
+        def lockb(wait):
+            b = lockutils.InterProcessLock(os.path.join(tmpdir, 'b'))
+            with b:
+                wait.wait()
+
+        wait1 = eventlet.event.Event()
+        wait2 = eventlet.event.Event()
+        pool = greenpool.GreenPool()
+        pool.spawn_n(locka, wait1)
+        pool.spawn_n(lockb, wait2)
+        wait2.send()
+        eventlet.sleep(0)
+        wait1.send()
+        pool.waitall()
+
+        self.assertTrue(self.completed)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/oslo_concurrency/tests/unit/test_processutils.py 
new/oslo.concurrency-4.0.2/oslo_concurrency/tests/unit/test_processutils.py
--- 
old/oslo.concurrency-3.30.0/oslo_concurrency/tests/unit/test_processutils.py    
    2019-09-04 16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/oslo_concurrency/tests/unit/test_processutils.py 
2020-04-07 12:10:50.000000000 +0200
@@ -26,9 +26,9 @@
 import subprocess
 import sys
 import tempfile
+from unittest import mock
 
 import fixtures
-import mock
 from oslotest import base as test_base
 import six
 
@@ -190,18 +190,18 @@
         stdout = """
         Lo, praise of the prowess of people-kings
         of spear-armed Danes, in days long sped,
-        we have heard, and what honot the athelings won!
+        we have heard, and what honor the athelings won!
         Oft Scyld the Scefing from squadroned foes,
         from many a tribe, the mead-bench tore,
-        awing the earls. Since erse he lay
+        awing the earls. Since erst he lay
         friendless, a foundling, fate repaid him:
-        for he waxed under welkin, in wealth he trove,
+        for he waxed under welkin, in wealth he throve,
         till before him the folk, both far and near,
         who house by the whale-path, heard his mandate,
-        gabe him gits: a good king he!
+        gave him gifts: a good king he!
         To him an heir was afterward born,
         a son in his halls, whom heaven sent
-        to favor the fol, feeling their woe
+        to favor the folk, feeling their woe
         that erst they had lacked an earl for leader
         so long a while; the Lord endowed him,
         the Wielder of Wonder, with world's renown.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/releasenotes/notes/drop-python27-support-7d837a45dae941bb.yaml
 
new/oslo.concurrency-4.0.2/releasenotes/notes/drop-python27-support-7d837a45dae941bb.yaml
--- 
old/oslo.concurrency-3.30.0/releasenotes/notes/drop-python27-support-7d837a45dae941bb.yaml
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo.concurrency-4.0.2/releasenotes/notes/drop-python27-support-7d837a45dae941bb.yaml
   2020-04-07 12:10:50.000000000 +0200
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    Python 2.7 is no longer supported. The minimum supported version of Python
+    is now Python 3.6.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/releasenotes/source/conf.py 
new/oslo.concurrency-4.0.2/releasenotes/source/conf.py
--- old/oslo.concurrency-3.30.0/releasenotes/source/conf.py     2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/releasenotes/source/conf.py      2020-04-07 
12:10:50.000000000 +0200
@@ -43,7 +43,6 @@
 repository_name = 'openstack/oslo.config'
 bug_project = 'oslo.config'
 bug_tag = ''
-html_last_updated_fmt = '%Y-%m-%d %H:%M'
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
@@ -58,7 +57,6 @@
 master_doc = 'index'
 
 # General information about the project.
-project = u'oslo.concurrency Release Notes'
 copyright = u'2016, oslo.concurrency Developers'
 
 # Release notes do not need a version in the title, they span
@@ -194,17 +192,6 @@
 
 # -- Options for LaTeX output ---------------------------------------------
 
-latex_elements = {
-    # The paper size ('letterpaper' or 'a4paper').
-    # 'papersize': 'letterpaper',
-
-    # The font size ('10pt', '11pt' or '12pt').
-    # 'pointsize': '10pt',
-
-    # Additional stuff for the LaTeX preamble.
-    # 'preamble': '',
-}
-
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/releasenotes/source/index.rst 
new/oslo.concurrency-4.0.2/releasenotes/source/index.rst
--- old/oslo.concurrency-3.30.0/releasenotes/source/index.rst   2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/releasenotes/source/index.rst    2020-04-07 
12:10:50.000000000 +0200
@@ -6,6 +6,7 @@
     :maxdepth: 1
 
     unreleased
+    train
     stein
     rocky
     queens
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.concurrency-3.30.0/releasenotes/source/train.rst 
new/oslo.concurrency-4.0.2/releasenotes/source/train.rst
--- old/oslo.concurrency-3.30.0/releasenotes/source/train.rst   1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.concurrency-4.0.2/releasenotes/source/train.rst    2020-04-07 
12:10:50.000000000 +0200
@@ -0,0 +1,6 @@
+==========================
+Train Series Release Notes
+==========================
+
+.. release-notes::
+   :branch: stable/train
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/requirements.txt 
new/oslo.concurrency-4.0.2/requirements.txt
--- old/oslo.concurrency-3.30.0/requirements.txt        2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/requirements.txt 2020-04-07 12:10:50.000000000 
+0200
@@ -3,7 +3,6 @@
 # process, which may cause wedges in the gate later.
 
 pbr!=2.1.0,>=2.0.0 # Apache-2.0
-enum34>=1.0.4;python_version=='2.7' or python_version=='2.6' or 
python_version=='3.3' # BSD
 oslo.config>=5.2.0 # Apache-2.0
 oslo.i18n>=3.15.3 # Apache-2.0
 oslo.utils>=3.33.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/setup.cfg 
new/oslo.concurrency-4.0.2/setup.cfg
--- old/oslo.concurrency-3.30.0/setup.cfg       2019-09-04 16:25:50.000000000 
+0200
+++ new/oslo.concurrency-4.0.2/setup.cfg        2020-04-07 12:11:49.000000000 
+0200
@@ -6,6 +6,7 @@
 author = OpenStack
 author-email = [email protected]
 home-page = https://docs.openstack.org/oslo.concurrency/latest/
+python-requires = >=3.6
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Information Technology
@@ -13,11 +14,11 @@
        License :: OSI Approved :: Apache Software License
        Operating System :: POSIX :: Linux
        Programming Language :: Python
-       Programming Language :: Python :: 2
-       Programming Language :: Python :: 2.7
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3.6
        Programming Language :: Python :: 3.7
+       Programming Language :: Python :: 3 :: Only
+       Programming Language :: Python :: Implementation :: CPython
 
 [files]
 packages = 
@@ -29,15 +30,6 @@
 console_scripts = 
        lockutils-wrapper = oslo_concurrency.lockutils:main
 
-[build_sphinx]
-source-dir = doc/source
-build-dir = doc/build
-all_files = 1
-warning-is-error = 1
-
-[upload_sphinx]
-upload-dir = doc/build/html
-
 [compile_catalog]
 directory = oslo_concurrency/locale
 domain = oslo_concurrency
@@ -52,12 +44,6 @@
 mapping_file = babel.cfg
 output_file = oslo_concurrency/locale/oslo_concurrency.pot
 
-[pbr]
-warnerrors = True
-
-[bdist_wheel]
-universal = 1
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/setup.py 
new/oslo.concurrency-4.0.2/setup.py
--- old/oslo.concurrency-3.30.0/setup.py        2019-09-04 16:25:11.000000000 
+0200
+++ new/oslo.concurrency-4.0.2/setup.py 2020-04-07 12:10:50.000000000 +0200
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
 import setuptools
 
 # In python < 2.7.4, a lazy loading of package `pbr` will break
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/test-requirements.txt 
new/oslo.concurrency-4.0.2/test-requirements.txt
--- old/oslo.concurrency-3.30.0/test-requirements.txt   2019-09-04 
16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/test-requirements.txt    2020-04-07 
12:10:50.000000000 +0200
@@ -2,13 +2,11 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 
-hacking>=1.1.0,<1.2.0 # Apache-2.0
+hacking>=3.0,<3.1.0 # Apache-2.0
 oslotest>=3.2.0 # Apache-2.0
 coverage!=4.4,>=4.0 # Apache-2.0
-futures>=3.0.0;python_version=='2.7' or python_version=='2.6' # BSD
 fixtures>=3.0.0 # Apache-2.0/BSD
 stestr>=2.0.0 # Apache-2.0
-
 eventlet!=0.18.3,!=0.20.1,>=0.18.2 # MIT
 
 # Bandit security code scanner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.concurrency-3.30.0/tox.ini 
new/oslo.concurrency-4.0.2/tox.ini
--- old/oslo.concurrency-3.30.0/tox.ini 2019-09-04 16:25:11.000000000 +0200
+++ new/oslo.concurrency-4.0.2/tox.ini  2020-04-07 12:10:50.000000000 +0200
@@ -1,46 +1,39 @@
 [tox]
-minversion = 2.0
-envlist = py27,py37,pep8
+minversion = 3.2.0
+envlist = py37,pep8
+ignore_basepython_conflict = True
 
 [testenv]
-install_command = pip install {opts} {packages}
+basepython = python3
 deps =
-  
-c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
+  
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/test-requirements.txt
-  -r{toxinidir}/requirements.txt
 # We want to support both vanilla stdlib and eventlet monkey patched
+whitelist_externals = env
 commands =
-  lockutils-wrapper stestr run --slowest {posargs}
+  env TEST_EVENTLET=0 lockutils-wrapper stestr run --slowest {posargs}
   env TEST_EVENTLET=1 lockutils-wrapper stestr run --slowest {posargs}
 
-[testenv:py27]
-basepython = python2.7
-
 [testenv:pep8]
-basepython = python3
-deps =
-  -r{toxinidir}/test-requirements.txt
+deps = {[testenv]deps}
 commands =
   flake8
   # Run security linter
   bandit -r oslo_concurrency -x tests -n5 --skip B311,B404,B603,B606
 
 [testenv:venv]
-basepython = python3
 commands = {posargs}
 
 [testenv:docs]
-basepython = python3
 whitelist_externals = rm
 deps =
-  {[testenv]deps}
+  
-c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
   -r{toxinidir}/doc/requirements.txt
 commands =
   rm -fr doc/build
-  sphinx-build -W -b html doc/source doc/build/html {posargs}
+  sphinx-build -W --keep-going -b html doc/source doc/build/html {posargs}
 
 [testenv:cover]
-basepython = python3
 setenv =
   PYTHON=coverage run --source oslo_concurrency --parallel-mode
 commands =
@@ -51,7 +44,7 @@
 
 [flake8]
 show-source = True
-ignore = H405
+ignore = H405,W504
 exclude=.venv,.git,.tox,dist,*lib/python*,*egg,build
 
 [hacking]
@@ -59,12 +52,11 @@
   oslo_concurrency._i18n
 
 [testenv:releasenotes]
-basepython = python3
-deps = -r{toxinidir}/doc/requirements.txt
-commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html
+deps = {[testenv:docs]deps}
+commands =
+  sphinx-build -a -E -W -d releasenotes/build/doctrees --keep-going -b html 
releasenotes/source releasenotes/build/html
 
 [testenv:lower-constraints]
-basepython = python3
 deps =
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt


Reply via email to