Hello community,

here is the log from the commit of package python-stestr for openSUSE:Factory 
checked in at 2019-09-23 12:03:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-stestr (Old)
 and      /work/SRC/openSUSE:Factory/.python-stestr.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-stestr"

Mon Sep 23 12:03:57 2019 rev:11 rq:729756 version:2.5.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-stestr/python-stestr.changes      
2019-07-30 13:04:49.526396465 +0200
+++ /work/SRC/openSUSE:Factory/.python-stestr.new.7948/python-stestr.changes    
2019-09-23 12:03:59.809939187 +0200
@@ -1,0 +2,7 @@
+Tue Sep 10 09:51:35 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 2.5.1:
+  * documentation updates
+  * various bugfixes
+
+-------------------------------------------------------------------

Old:
----
  stestr-2.4.0.tar.gz

New:
----
  stestr-2.5.1.tar.gz

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

Other differences:
------------------
++++++ python-stestr.spec ++++++
--- /var/tmp/diff_new_pack.B9zM7m/_old  2019-09-23 12:04:02.265938782 +0200
+++ /var/tmp/diff_new_pack.B9zM7m/_new  2019-09-23 12:04:02.269938781 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-stestr
-Version:        2.4.0
+Version:        2.5.1
 Release:        0
 Summary:        A test runner runner similar to testrepository
 License:        Apache-2.0
@@ -86,6 +86,7 @@
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
+# test_empty_with_pretty_out - edge case not triggered in OBS
 %{python_expand mkdir build/bin
 for filepath in %{buildroot}/%{_bindir}/stestr*-%{$python_bin_suffix}; do
   filename=$(basename $filepath)
@@ -94,7 +95,7 @@
 done
 export PATH="$(pwd)/build/bin:$PATH"
 export PYTHONPATH=%{buildroot}%{$python_sitelib}
-py.test-%{$python_bin_suffix} -v stestr/tests
+py.test-%{$python_bin_suffix} -v stestr/tests -k 'not 
test_empty_with_pretty_out'
 rm -r build/bin
 }
 

++++++ stestr-2.4.0.tar.gz -> stestr-2.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/.mailmap new/stestr-2.5.1/.mailmap
--- old/stestr-2.4.0/.mailmap   1970-01-01 01:00:00.000000000 +0100
+++ new/stestr-2.5.1/.mailmap   2019-09-03 15:17:17.000000000 +0200
@@ -0,0 +1,15 @@
+# Entries in this file are made for two reasons:
+# 1) to merge multiple git commit authors that correspond to a single author
+# 2) to change the canonical name and/or email address of an author.
+#
+# Format is:
+#     Canonical Name <Canonical@email> commit name <commit@email>
+#     \--------------+---------------/ \----------+-------------/
+#                 replace                       find
+# See also: 'git shortlog --help' and 'git check-mailmap --help'.
+Andrea Frittoli <[email protected]> 
<[email protected]>
+Jonathan Lange <[email protected]> <[email protected]>
+Masayuki Igawa <[email protected]> <[email protected]>
+Masayuki Igawa <[email protected]> <[email protected]>
+Matthew Treinish <[email protected]> <[email protected]>
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/AUTHORS new/stestr-2.5.1/AUTHORS
--- old/stestr-2.4.0/AUTHORS    2019-07-18 03:25:38.000000000 +0200
+++ new/stestr-2.5.1/AUTHORS    2019-09-03 15:17:27.000000000 +0200
@@ -1,10 +1,8 @@
 Alfredo Moralejo <[email protected]>
 Chandan Kumar <[email protected]>
 Luigi Toscano <[email protected]>
-Masayuki Igawa <[email protected]>
 Masayuki Igawa <[email protected]>
 Matthew Treinish <[email protected]>
 Sergey Vilgelm <[email protected]>
 Sorin Sbarnea <[email protected]>
 Tony Breeds <[email protected]>
-Zane Bitter <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/ChangeLog new/stestr-2.5.1/ChangeLog
--- old/stestr-2.4.0/ChangeLog  2019-07-18 03:25:38.000000000 +0200
+++ new/stestr-2.5.1/ChangeLog  2019-09-03 15:17:27.000000000 +0200
@@ -1,6 +1,34 @@
 CHANGES
 =======
 
+2.5.1
+-----
+
+* Remove stray reference to removed short form of --random
+* Remove abbreviated option for stestr run --random
+* Only use stdlib based unittest runner for py >=3.5
+
+2.5.0
+-----
+
+* Handle NoneType timestamps in subunit results
+* Add links to translated version README
+* Add README\_ja.rst
+* Update docs
+* Revert to the trimmed stdout usage
+* Revert to previous stdout and remove usage modification
+* Revert "Add back more of the \_get\_runner() logic"
+* Add back more of the \_get\_runner() logic
+* Remove unused bits from test runner
+* Use StringIO instead of tempfile
+* Remove console script entrypoint for the runner
+* Add license to package metadata
+* Add unit tests for output functions
+* Add mailmap file to deduplicate authors list
+* Add custom test runner and remove testtools runner dependency
+* Fix edge case where there are no test times in output
+* Mention IRC channel in README
+
 2.4.0
 -----
 
@@ -86,14 +114,3 @@
 2.1.0
 -----
 
-* Uncap pbr
-* Revert "Cap pip version in windows ci"
-* Revert "Uncap pbr"
-* Uncap pbr
-* Clarify docs on group\_regex
-* Remove Python 2.6 code
-* Switch python doc reference from 2 to 3
-* Cleanup manual section on configuration
-* Fix abbreviate option in run subcommand
-* Ignore errors on cleanup in test\_return\_codes
-* Cap pip version in windows ci
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/PKG-INFO new/stestr-2.5.1/PKG-INFO
--- old/stestr-2.4.0/PKG-INFO   2019-07-18 03:25:38.000000000 +0200
+++ new/stestr-2.5.1/PKG-INFO   2019-09-03 15:17:27.000000000 +0200
@@ -1,11 +1,11 @@
 Metadata-Version: 2.1
 Name: stestr
-Version: 2.4.0
+Version: 2.5.1
 Summary: A parallel Python test runner built around subunit
 Home-page: http://stestr.readthedocs.io/en/latest/
 Author: Matthew Treinish
 Author-email: [email protected]
-License: UNKNOWN
+License: Apache-2.0
 Project-URL: Documentation, https://stestr.readthedocs.io
 Project-URL: Source Code, https://github.com/mtreinish/stestr
 Project-URL: Bug Tracker, https://github.com/mtreinish/stestr/issues
@@ -28,9 +28,13 @@
             :target: https://pypi.python.org/pypi/stestr
             :alt: Latest Version
         
+        * Read this in other languages: `English`_, `日本語`_
         * You can see the full rendered docs at: 
http://stestr.readthedocs.io/en/latest/
         * The code of the project is on Github: 
https://github.com/mtreinish/stestr
         
+        .. _English: https://github.com/mtreinish/stestr/blob/master/README.rst
+        .. _日本語: https://github.com/mtreinish/stestr/blob/master/README_ja.rst
+        
         .. note:: stestr v2.x.x release series will be the last series that 
supports
             Python 2. Support for Python 2.7 will be dropped in stestr release 
3.0.0
             which is being planned for early 2020.
@@ -149,6 +153,15 @@
         
         .. _github pull requests: 
https://help.github.com/articles/about-pull-requests/
         
+        Community
+        ---------
+        
+        Besides Github interactions there is also a stestr IRC channel:
+        
+        #stestr on Freenode
+        
+        feel free to join to ask questions, or just discuss stestr.
+        
         
 Platform: UNKNOWN
 Classifier: Intended Audience :: Information Technology
@@ -166,3 +179,4 @@
 Classifier: Topic :: Software Development :: Testing
 Classifier: Topic :: Software Development :: Quality Assurance
 Provides-Extra: sql
+Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/README.rst new/stestr-2.5.1/README.rst
--- old/stestr-2.4.0/README.rst 2019-07-18 03:25:22.000000000 +0200
+++ new/stestr-2.5.1/README.rst 2019-09-03 15:17:17.000000000 +0200
@@ -17,9 +17,13 @@
     :target: https://pypi.python.org/pypi/stestr
     :alt: Latest Version
 
+* Read this in other languages: `English`_, `日本語`_
 * You can see the full rendered docs at: 
http://stestr.readthedocs.io/en/latest/
 * The code of the project is on Github: https://github.com/mtreinish/stestr
 
+.. _English: https://github.com/mtreinish/stestr/blob/master/README.rst
+.. _日本語: https://github.com/mtreinish/stestr/blob/master/README_ja.rst
+
 .. note:: stestr v2.x.x release series will be the last series that supports
     Python 2. Support for Python 2.7 will be dropped in stestr release 3.0.0
     which is being planned for early 2020.
@@ -137,3 +141,12 @@
 they will in CI. If CI fails on your change it will not be able to merge.
 
 .. _github pull requests: https://help.github.com/articles/about-pull-requests/
+
+Community
+---------
+
+Besides Github interactions there is also a stestr IRC channel:
+
+#stestr on Freenode
+
+feel free to join to ask questions, or just discuss stestr.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/README_ja.rst 
new/stestr-2.5.1/README_ja.rst
--- old/stestr-2.4.0/README_ja.rst      1970-01-01 01:00:00.000000000 +0100
+++ new/stestr-2.5.1/README_ja.rst      2019-09-03 15:17:17.000000000 +0200
@@ -0,0 +1,157 @@
+stestr(日本語訳)
+===================
+
+.. image:: 
https://img.shields.io/travis/mtreinish/stestr/master.svg?style=flat-square
+    :target: https://travis-ci.org/mtreinish/stestr
+    :alt: Build status
+
+.. image:: 
https://dev.azure.com/stestr/stestr/_apis/build/status/mtreinish.stestr?branchName=master
+    :target: 
https://dev.azure.com/stestr/stestr/_build/latest?definitionId=1&branchName=master
+    :alt: Azure DevOps build status
+
+.. image:: 
https://img.shields.io/coveralls/github/mtreinish/stestr/master.svg?style=flat-square
+    :target: https://coveralls.io/github/mtreinish/stestr?branch=master
+    :alt: Code coverage
+
+.. image:: https://img.shields.io/pypi/v/stestr.svg?style=flat-square
+    :target: https://pypi.python.org/pypi/stestr
+    :alt: Latest Version
+
+* 他の言語で読む場合はこちら: `English`_, `日本語`_
+* フルレンダリングされたドキュメントはこちら: http://stestr.readthedocs.io/en/latest/
+* プロジェクトのコードは GitHub にあります: https://github.com/mtreinish/stestr
+
+.. _English: https://github.com/mtreinish/stestr/blob/master/README.rst
+.. _日本語: https://github.com/mtreinish/stestr/blob/master/README_ja.rst
+
+.. note:: stestr v2.x.x リリースシリーズは、Python 2 をサポートする最後のシリ
+    ーズとなります。Python 2.7のサポートは、2020年の早い時期に予定されている、
+    「stestr リリース 3.0.0」にて打ち切られる予定です。
+
+概要
+----
+stestr は、パラレル Python テスト実行プログラムであり、一つのテストスイート
+を、分割実行するために、複数プロセスを使い、 `unittest`_ テストスイートを、
+実行するようデザインされています。また、実行失敗のデバッグや実行速度改善に向け
+たスケジューラ最適化のために、すべてのテスト実行履歴を保存しています。この目標
+達成のため、stestrでは、 `subunit`_ プロトコルを使用し、ストリーミングや、
+複数ワーカーからの結果を保存することを容易にしています。
+
+.. _unittest: https://docs.python.org/3/library/unittest.html
+.. _subunit: https://github.com/testing-cabal/subunit
+
+stestr は、元々 `testrepository`_ プロジェクトのフォークとして始まりました。
+しかし、subunit を使用する testrepository のようなあらゆるテストランナー
+インターフェースとなる代わりに、stestr は、python プロジェクトに特化・集中
+したテストランナーです。stestr は、元々 testrepository からフォークしました
+が、testrepository との後方互換性はありません。高いレベルでの基本的な実行
+コンセプトは、それら2つのプロジェクトの間で共有されているものの、実際の使用法
+は、完全に同一というわけでありません。
+
+.. _testrepository: https://testrepository.readthedocs.org/en/latest
+
+
+stestr のインストール
+-----------------------
+
+stestr は、pypi 経由で利用可能です。そのため、以下を実行するだけで::
+
+  pip install -U stestr
+
+あなたのシステムに、stestr を取得することができます。もし、開発バージョンの
+stestr を使う必要があれば、リポジトリをクローンし、ローカルにインストール
+することができます::
+
+  git clone https://github.com/mtreinish/stestr.git && pip install -e stestr
+
+この操作で、stestr をあなたの python 環境のローカル開発環境に対し、編集可能
+モードでインストールできます。
+
+stestr の利用
+-----------------
+
+stestr のインストール後、テスト実行のために使う方法は、とても簡単です。まずはじめに、
+``.stestr.conf`` ファイルをあなたのプロジェクトのために作成します。この
+ファイルは、「どこにテストがあるのか」「どうやってテストを実行する
+のか」という基本的な情報を stestr に伝えます。基本最小限の内容例としては次の
+ようなものとなります::
+
+  [DEFAULT]
+  test_path=./project_source_dir/tests
+
+この記述は、テスト探索のために使われるディレクトリの相対パスを、stestr に伝え
+ます。これは、標準的な `unittest discovery`_ の ``--start-directory`` と
+同様です。
+
+.. _unittest discovery: 
https://docs.python.org/3/library/unittest.html#test-discovery
+
+このファイルを作成すれば、stestr を使い始めるためにやるべきことはすべて完了
+です。テストを実行するためには、単に次のように使うだけです::
+
+    stestr run
+
+これにより、まず、結果を保持するためのリポジトリが、カレントワーキング
+ディレクトリの ``.stestr/`` に作成され、テスト探索により見つかったテストが
+すべて実行されます。もし、あなたが、単にひとつのテスト(あるいはモジュール)を
+実行し、テスト探索によるオーバーヘッドを避けたいのであれば、``--no-discover``
+もしくは ``-n`` オプションをそのテストに対して指定し、実行することにより
+可能です。
+
+これらのコマンドの詳細は、さらなるオプションの説明は、stestr マニュアルを
+参照してください: https://stestr.readthedocs.io/en/latest/MANUAL.html
+
+
+testrepository からの移行
+-----------------------------
+
+もし、testrepository を既に使用しているプロジェクトを持っているのであれば、
+stestr のソースリポジトリには、あなたのリポジトリを stestr を利用するように
+移行するための、ヘルパースクリプトがあります。このスクリプトは、単に、
+``.testr.conf`` ファイルから、 ``.stestr.conf`` ファイルを作成します。
+(標準的な subunit.run テストコマンド形式を利用していることを想定しています)
+これを実行するためには、あなたのプロジェクトリポジトリで、以下を実行します::
+
+    $STESTR_SOURCE_DIR/tools/testr_to_stestr.py
+
+これにより、 ``.stestr.conf`` が作成されます。
+
+
+manpage の生成
+------------------
+
+stestr マニュアルは、htmlと同様に、manpage としてもレンダリングするために整形
+されています。html 出力物と自動生成され公開されているものはこちらです:
+https://stestr.readthedocs.io/en/latest/MANUAL.html しかしながら、その manpage
+は、手動で生成する必要があります。このためには、手動で sphinx-build コマンドを
+manpage builder とともに実行する必要があります。これは、簡単なスクリプトで
+自動化されており、 stestr リポジトリのルートディレクトリで以下を実行します::
+
+  tools/build_manpage.sh
+
+これにより、troff ファイルが doc/build/man/stestr.1 に作成され、それは、
+パッケージ可能で、あなたのシステムの man page としても配置可能です。
+
+コントリビューション方法
+------------------------
+
+最新コードの参照: https://github.com/mtreinish/stestr
+最新コードのクローン: ``git clone https://github.com/mtreinish/stestr.git``
+
+コントリビューションのガイドラインドキュメント: 
http://stestr.readthedocs.io/en/latest/developer_guidelines.html
+
+パッチを出すためには、`github pull requests`_ を使用してください。
+プルリクエストを出す前には、手元の環境で ``tox`` を実行して、すべての自動
+テストがパスすることを確認してください。これは、CI環境で実行されるものと同様の
+テストスイートならびに、自動スタイルチェックを実行します。もし、あなたの変更に
+より、CI が fail となった場合、その変更はマージすることができません。
+
+.. _github pull requests: https://help.github.com/articles/about-pull-requests/
+
+コミュニティ
+-------------
+
+GitHub でのやり取りに加え、stestr の IRC チャネルもあります:
+
+Freenode の #stestr チャネル
+
+stestr に関する質問、もしくは議論をしていますので、気軽に参加してください。
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/doc/source/MANUAL.rst 
new/stestr-2.5.1/doc/source/MANUAL.rst
--- old/stestr-2.4.0/doc/source/MANUAL.rst      2019-07-18 03:25:22.000000000 
+0200
+++ new/stestr-2.5.1/doc/source/MANUAL.rst      2019-09-03 15:17:17.000000000 
+0200
@@ -102,7 +102,7 @@
 
   $ stestr run --no-discover project/tests/test_foo.py
 
-will also bypass discovery and directly call subunit.run on the module
+will also bypass discovery and directly call the test runner on the module
 specified.
 
 Additionally you can specify a specific class or method within that file using
@@ -110,7 +110,7 @@
 
   $ stestr run --no-discover project/tests/test_foo.py::TestFoo::test_method
 
-will skip discovery and directly call subunit.run on the test method in the
+will skip discovery and directly call the test runner on the test method in the
 specified test class.
 
 Test Selection
@@ -430,7 +430,7 @@
 includes respecting the other scheduler options, like ``group_regex`` or
 ``--random``.
 
-There is also an option on ``stestr run``, ``--random``/``-r`` to randomize the
+There is also an option on ``stestr run``, ``--random`` to randomize the
 order of tests as they are passed to the workers. This is useful in certain
 use cases, especially when you want to test isolation between test cases.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/doc/source/README.rst 
new/stestr-2.5.1/doc/source/README.rst
--- old/stestr-2.4.0/doc/source/README.rst      2019-07-18 03:25:22.000000000 
+0200
+++ new/stestr-2.5.1/doc/source/README.rst      2019-09-03 15:17:17.000000000 
+0200
@@ -17,9 +17,13 @@
     :target: https://pypi.python.org/pypi/stestr
     :alt: Latest Version
 
+* Read this in other languages: `English`_, `日本語`_
 * You can see the full rendered docs at: 
http://stestr.readthedocs.io/en/latest/
 * The code of the project is on Github: https://github.com/mtreinish/stestr
 
+.. _English: https://github.com/mtreinish/stestr/blob/master/README.rst
+.. _日本語: https://github.com/mtreinish/stestr/blob/master/README_ja.rst
+
 .. note:: stestr v2.x.x release series will be the last series that supports
     Python 2. Support for Python 2.7 will be dropped in stestr release 3.0.0
     which is being planned for early 2020.
@@ -137,3 +141,12 @@
 they will in CI. If CI fails on your change it will not be able to merge.
 
 .. _github pull requests: https://help.github.com/articles/about-pull-requests/
+
+Community
+---------
+
+Besides Github interactions there is also a stestr IRC channel:
+
+#stestr on Freenode
+
+feel free to join to ask questions, or just discuss stestr.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/doc/source/README_ja.rst 
new/stestr-2.5.1/doc/source/README_ja.rst
--- old/stestr-2.4.0/doc/source/README_ja.rst   1970-01-01 01:00:00.000000000 
+0100
+++ new/stestr-2.5.1/doc/source/README_ja.rst   2019-09-03 15:17:17.000000000 
+0200
@@ -0,0 +1,157 @@
+stestr(日本語訳)
+===================
+
+.. image:: 
https://img.shields.io/travis/mtreinish/stestr/master.svg?style=flat-square
+    :target: https://travis-ci.org/mtreinish/stestr
+    :alt: Build status
+
+.. image:: 
https://dev.azure.com/stestr/stestr/_apis/build/status/mtreinish.stestr?branchName=master
+    :target: 
https://dev.azure.com/stestr/stestr/_build/latest?definitionId=1&branchName=master
+    :alt: Azure DevOps build status
+
+.. image:: 
https://img.shields.io/coveralls/github/mtreinish/stestr/master.svg?style=flat-square
+    :target: https://coveralls.io/github/mtreinish/stestr?branch=master
+    :alt: Code coverage
+
+.. image:: https://img.shields.io/pypi/v/stestr.svg?style=flat-square
+    :target: https://pypi.python.org/pypi/stestr
+    :alt: Latest Version
+
+* 他の言語で読む場合はこちら: `English`_, `日本語`_
+* フルレンダリングされたドキュメントはこちら: http://stestr.readthedocs.io/en/latest/
+* プロジェクトのコードは GitHub にあります: https://github.com/mtreinish/stestr
+
+.. _English: https://github.com/mtreinish/stestr/blob/master/README.rst
+.. _日本語: https://github.com/mtreinish/stestr/blob/master/README_ja.rst
+
+.. note:: stestr v2.x.x リリースシリーズは、Python 2 をサポートする最後のシリ
+    ーズとなります。Python 2.7のサポートは、2020年の早い時期に予定されている、
+    「stestr リリース 3.0.0」にて打ち切られる予定です。
+
+概要
+----
+stestr は、パラレル Python テスト実行プログラムであり、一つのテストスイート
+を、分割実行するために、複数プロセスを使い、 `unittest`_ テストスイートを、
+実行するようデザインされています。また、実行失敗のデバッグや実行速度改善に向け
+たスケジューラ最適化のために、すべてのテスト実行履歴を保存しています。この目標
+達成のため、stestrでは、 `subunit`_ プロトコルを使用し、ストリーミングや、
+複数ワーカーからの結果を保存することを容易にしています。
+
+.. _unittest: https://docs.python.org/3/library/unittest.html
+.. _subunit: https://github.com/testing-cabal/subunit
+
+stestr は、元々 `testrepository`_ プロジェクトのフォークとして始まりました。
+しかし、subunit を使用する testrepository のようなあらゆるテストランナー
+インターフェースとなる代わりに、stestr は、python プロジェクトに特化・集中
+したテストランナーです。stestr は、元々 testrepository からフォークしました
+が、testrepository との後方互換性はありません。高いレベルでの基本的な実行
+コンセプトは、それら2つのプロジェクトの間で共有されているものの、実際の使用法
+は、完全に同一というわけでありません。
+
+.. _testrepository: https://testrepository.readthedocs.org/en/latest
+
+
+stestr のインストール
+-----------------------
+
+stestr は、pypi 経由で利用可能です。そのため、以下を実行するだけで::
+
+  pip install -U stestr
+
+あなたのシステムに、stestr を取得することができます。もし、開発バージョンの
+stestr を使う必要があれば、リポジトリをクローンし、ローカルにインストール
+することができます::
+
+  git clone https://github.com/mtreinish/stestr.git && pip install -e stestr
+
+この操作で、stestr をあなたの python 環境のローカル開発環境に対し、編集可能
+モードでインストールできます。
+
+stestr の利用
+-----------------
+
+stestr のインストール後、テスト実行のために使う方法は、とても簡単です。まずはじめに、
+``.stestr.conf`` ファイルをあなたのプロジェクトのために作成します。この
+ファイルは、「どこにテストがあるのか」「どうやってテストを実行する
+のか」という基本的な情報を stestr に伝えます。基本最小限の内容例としては次の
+ようなものとなります::
+
+  [DEFAULT]
+  test_path=./project_source_dir/tests
+
+この記述は、テスト探索のために使われるディレクトリの相対パスを、stestr に伝え
+ます。これは、標準的な `unittest discovery`_ の ``--start-directory`` と
+同様です。
+
+.. _unittest discovery: 
https://docs.python.org/3/library/unittest.html#test-discovery
+
+このファイルを作成すれば、stestr を使い始めるためにやるべきことはすべて完了
+です。テストを実行するためには、単に次のように使うだけです::
+
+    stestr run
+
+これにより、まず、結果を保持するためのリポジトリが、カレントワーキング
+ディレクトリの ``.stestr/`` に作成され、テスト探索により見つかったテストが
+すべて実行されます。もし、あなたが、単にひとつのテスト(あるいはモジュール)を
+実行し、テスト探索によるオーバーヘッドを避けたいのであれば、``--no-discover``
+もしくは ``-n`` オプションをそのテストに対して指定し、実行することにより
+可能です。
+
+これらのコマンドの詳細は、さらなるオプションの説明は、stestr マニュアルを
+参照してください: https://stestr.readthedocs.io/en/latest/MANUAL.html
+
+
+testrepository からの移行
+-----------------------------
+
+もし、testrepository を既に使用しているプロジェクトを持っているのであれば、
+stestr のソースリポジトリには、あなたのリポジトリを stestr を利用するように
+移行するための、ヘルパースクリプトがあります。このスクリプトは、単に、
+``.testr.conf`` ファイルから、 ``.stestr.conf`` ファイルを作成します。
+(標準的な subunit.run テストコマンド形式を利用していることを想定しています)
+これを実行するためには、あなたのプロジェクトリポジトリで、以下を実行します::
+
+    $STESTR_SOURCE_DIR/tools/testr_to_stestr.py
+
+これにより、 ``.stestr.conf`` が作成されます。
+
+
+manpage の生成
+------------------
+
+stestr マニュアルは、htmlと同様に、manpage としてもレンダリングするために整形
+されています。html 出力物と自動生成され公開されているものはこちらです:
+https://stestr.readthedocs.io/en/latest/MANUAL.html しかしながら、その manpage
+は、手動で生成する必要があります。このためには、手動で sphinx-build コマンドを
+manpage builder とともに実行する必要があります。これは、簡単なスクリプトで
+自動化されており、 stestr リポジトリのルートディレクトリで以下を実行します::
+
+  tools/build_manpage.sh
+
+これにより、troff ファイルが doc/build/man/stestr.1 に作成され、それは、
+パッケージ可能で、あなたのシステムの man page としても配置可能です。
+
+コントリビューション方法
+------------------------
+
+最新コードの参照: https://github.com/mtreinish/stestr
+最新コードのクローン: ``git clone https://github.com/mtreinish/stestr.git``
+
+コントリビューションのガイドラインドキュメント: 
http://stestr.readthedocs.io/en/latest/developer_guidelines.html
+
+パッチを出すためには、`github pull requests`_ を使用してください。
+プルリクエストを出す前には、手元の環境で ``tox`` を実行して、すべての自動
+テストがパスすることを確認してください。これは、CI環境で実行されるものと同様の
+テストスイートならびに、自動スタイルチェックを実行します。もし、あなたの変更に
+より、CI が fail となった場合、その変更はマージすることができません。
+
+.. _github pull requests: https://help.github.com/articles/about-pull-requests/
+
+コミュニティ
+-------------
+
+GitHub でのやり取りに加え、stestr の IRC チャネルもあります:
+
+Freenode の #stestr チャネル
+
+stestr に関する質問、もしくは議論をしていますので、気軽に参加してください。
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/doc/source/index.rst 
new/stestr-2.5.1/doc/source/index.rst
--- old/stestr-2.4.0/doc/source/index.rst       2019-07-18 03:25:22.000000000 
+0200
+++ new/stestr-2.5.1/doc/source/index.rst       2019-09-03 15:17:17.000000000 
+0200
@@ -12,6 +12,7 @@
    :maxdepth: 2
 
    README
+   README_ja
    MANUAL
    CONTRIBUTING
    developer_guidelines
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/doc/source/internal_arch.rst 
new/stestr-2.5.1/doc/source/internal_arch.rst
--- old/stestr-2.4.0/doc/source/internal_arch.rst       2019-07-18 
03:25:22.000000000 +0200
+++ new/stestr-2.5.1/doc/source/internal_arch.rst       2019-09-03 
15:17:17.000000000 +0200
@@ -72,12 +72,12 @@
 
 The basic flow when stestr run is called at a high level is fairly straight
 forward. In the default case when run is called the first operation performed
-is unittest discovery (via ``subunit.run --discover``) which is used to get a
-complete list of tests present. This list is then filtered by any user provided
-selection mechanisms. (for example a cli regex filter) This is used to select
-which tests the user actually intends to run. For more details on test
-selection see: :ref:`api_selection` which defines the functions which are used
-to actually perform the filtering.
+is unittest discovery which is used to get a complete list of tests present.
+This list is then filtered by any user provided selection mechanisms. (for
+example a cli regex filter) This is used to select which tests the user
+actually intends to run. For more details on test selection see:
+:ref:`api_selection` which defines the functions which are used to actually
+perform the filtering.
 
 Once there is complete list of tests that will be run the list gets passed
 to the scheduler/partitioner. The scheduler takes the list of tests and splits
@@ -89,7 +89,7 @@
 
 With the tests split into multiple groups for each worker process we're
 ready to start executing the tests. Each group of tests is used to launch a
-subunit.run worker subprocess. As the name implies this is a test runner that
+test runner worker subprocess. As the name implies this is a test runner that
 emits a subunit stream to stdout. These stdout streams are combined in real
 time and stored in the repository at the end of the run (using the load
 command). The combined stream is also used for the CLI output either in a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/setup.cfg new/stestr-2.5.1/setup.cfg
--- old/stestr-2.4.0/setup.cfg  2019-07-18 03:25:38.000000000 +0200
+++ new/stestr-2.5.1/setup.cfg  2019-09-03 15:17:27.000000000 +0200
@@ -6,6 +6,7 @@
 author = Matthew Treinish
 author-email = [email protected]
 home-page = http://stestr.readthedocs.io/en/latest/
+license = Apache-2.0
 classifier = 
        Intended Audience :: Information Technology
        Intended Audience :: System Administrators
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/commands/load.py 
new/stestr-2.5.1/stestr/commands/load.py
--- old/stestr-2.4.0/stestr/commands/load.py    2019-07-18 03:25:22.000000000 
+0200
+++ new/stestr-2.5.1/stestr/commands/load.py    2019-09-03 15:17:17.000000000 
+0200
@@ -271,10 +271,14 @@
         start_times = []
         stop_times = []
         for worker in subunit_trace.RESULTS:
-            start_times += [
-                x['timestamps'][0] for x in subunit_trace.RESULTS[worker]]
-            stop_times += [
-                x['timestamps'][1] for x in subunit_trace.RESULTS[worker]]
+            for test in subunit_trace.RESULTS[worker]:
+                if not test['timestamps'][0] or not test['timestamps'][1]:
+                    continue
+                start_times.append(test['timestamps'][0])
+                stop_times.append(test['timestamps'][1])
+        if not start_times or not stop_times:
+            sys.stderr.write("\nNo tests were successful during the run")
+            return 1
         start_time = min(start_times)
         stop_time = max(stop_times)
         elapsed_time = stop_time - start_time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/commands/run.py 
new/stestr-2.5.1/stestr/commands/run.py
--- old/stestr-2.4.0/stestr/commands/run.py     2019-07-18 03:25:22.000000000 
+0200
+++ new/stestr-2.5.1/stestr/commands/run.py     2019-09-03 15:17:17.000000000 
+0200
@@ -121,7 +121,7 @@
                             help="Takes in a single test to bypasses test "
                             "discover and just execute the test specified. A "
                             "file may be used in place of a test name.")
-        parser.add_argument('--random', '-r', action="store_true",
+        parser.add_argument('--random', action="store_true",
                             default=False,
                             help="Randomize the test order after they are "
                             "partitioned into separate workers")
@@ -381,7 +381,7 @@
         else:
             raise RuntimeError("The Python interpreter was not found and "
                                "PYTHON is not set")
-        run_cmd = python_bin + ' -m subunit.run ' + ids
+        run_cmd = python_bin + ' -m stestr.subunit_runner.run ' + ids
 
         def run_tests():
             run_proc = [('subunit', output.ReturnCodeToSubunit(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/config_file.py 
new/stestr-2.5.1/stestr/config_file.py
--- old/stestr-2.4.0/stestr/config_file.py      2019-07-18 03:25:22.000000000 
+0200
+++ new/stestr-2.5.1/stestr/config_file.py      2019-09-03 15:17:17.000000000 
+0200
@@ -120,7 +120,7 @@
                 raise RuntimeError("The Python interpreter was not found and "
                                    "PYTHON is not set")
 
-        command = '%s -m subunit.run discover -t "%s" "%s" ' \
+        command = '%s -m stestr.subunit_runner.run discover -t "%s" "%s" ' \
                   '$LISTOPT $IDOPTION' % (python, top_dir, test_path)
         listopt = "--list"
         idoption = "--load-list $IDFILE"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/output.py 
new/stestr-2.5.1/stestr/output.py
--- old/stestr-2.4.0/stestr/output.py   2019-07-18 03:25:22.000000000 +0200
+++ new/stestr-2.5.1/stestr/output.py   2019-09-03 15:17:17.000000000 +0200
@@ -75,7 +75,7 @@
 
     for test in tests:
         id_str = test.id()
-        output.write(id_str)
+        output.write(six.text_type(id_str))
         output.write(six.text_type('\n'))
 
 
@@ -139,16 +139,16 @@
 
 
 def output_stream(stream, output=sys.stdout):
-        _binary_stdout = subunit.make_stream_binary(output)
+    _binary_stdout = subunit.make_stream_binary(output)
+    contents = stream.read(65536)
+    assert type(contents) is bytes, \
+        "Bad stream contents %r" % type(contents)
+    # If there are unflushed bytes in the text wrapper, we need to sync..
+    output.flush()
+    while contents:
+        _binary_stdout.write(contents)
         contents = stream.read(65536)
-        assert type(contents) is bytes, \
-            "Bad stream contents %r" % type(contents)
-        # If there are unflushed bytes in the text wrapper, we need to sync..
-        output.flush()
-        while contents:
-            _binary_stdout.write(contents)
-            contents = stream.read(65536)
-        _binary_stdout.flush()
+    _binary_stdout.flush()
 
 
 class ReturnCodeToSubunit(object):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/subunit_runner/program.py 
new/stestr-2.5.1/stestr/subunit_runner/program.py
--- old/stestr-2.4.0/stestr/subunit_runner/program.py   1970-01-01 
01:00:00.000000000 +0100
+++ new/stestr-2.5.1/stestr/subunit_runner/program.py   2019-09-03 
15:17:17.000000000 +0200
@@ -0,0 +1,226 @@
+# Copyright 2019 Matthew Treinish
+# Copyright (c) 2009 testtools developers.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import functools
+import os
+import sys
+import unittest
+
+import extras
+
+
+def filter_by_ids(suite_or_case, test_ids):
+    """Remove tests from suite_or_case where their id is not in test_ids.
+
+    :param suite_or_case: A test suite or test case.
+    :param test_ids: Something that supports the __contains__ protocol.
+    :return: suite_or_case, unless suite_or_case was a case that itself
+        fails the predicate when it will return a new unittest.TestSuite with
+        no contents.
+
+    For subclasses of TestSuite, filtering is done by:
+        - attempting to call suite.filter_by_ids(test_ids)
+        - if there is no method, iterating the suite and identifying tests to
+          remove, then removing them from _tests, manually recursing into
+          each entry.
+
+    For objects with an id() method - TestCases, filtering is done by:
+        - attempting to return case.filter_by_ids(test_ids)
+        - if there is no such method, checking for case.id() in test_ids
+          and returning case if it is, or TestSuite() if it is not.
+
+    For anything else, it is not filtered - it is returned as-is.
+
+    To provide compatibility with this routine for a custom TestSuite, just
+    define a filter_by_ids() method that will return a TestSuite equivalent to
+    the original minus any tests not in test_ids.
+    Similarly to provide compatibility for a custom TestCase that does
+    something unusual define filter_by_ids to return a new TestCase object
+    that will only run test_ids that are in the provided container. If none
+    would run, return an empty TestSuite().
+
+    The contract for this function does not require mutation - each filtered
+    object can choose to return a new object with the filtered tests. However
+    because existing custom TestSuite classes in the wild do not have this
+    method, we need a way to copy their state correctly which is tricky:
+    thus the backwards-compatible code paths attempt to mutate in place rather
+    than guessing how to reconstruct a new suite.
+    """
+    # Compatible objects
+    if extras.safe_hasattr(suite_or_case, 'filter_by_ids'):
+        return suite_or_case.filter_by_ids(test_ids)
+    # TestCase objects.
+    if extras.safe_hasattr(suite_or_case, 'id'):
+        if suite_or_case.id() in test_ids:
+            return suite_or_case
+        else:
+            return unittest.TestSuite()
+    # Standard TestSuites or derived classes [assumed to be mutable].
+    if isinstance(suite_or_case, unittest.TestSuite):
+        filtered = []
+        for item in suite_or_case:
+            filtered.append(filter_by_ids(item, test_ids))
+        suite_or_case._tests[:] = filtered
+    # Everything else:
+    return suite_or_case
+
+
+def iterate_tests(test_suite_or_case):
+    """Iterate through all of the test cases in 'test_suite_or_case'."""
+    try:
+        suite = iter(test_suite_or_case)
+    except TypeError:
+        yield test_suite_or_case
+    else:
+        for test in suite:
+            for subtest in iterate_tests(test):
+                yield subtest
+
+
+def list_test(test):
+    """Return the test ids that would be run if test() was run.
+
+    When things fail to import they can be represented as well, though
+    we use an ugly hack (see http://bugs.python.org/issue19746 for details)
+    to determine that. The difference matters because if a user is
+    filtering tests to run on the returned ids, a failed import can reduce
+    the visible tests but it can be impossible to tell that the selected
+    test would have been one of the imported ones.
+
+    :return: A tuple of test ids that would run and error strings
+        describing things that failed to import.
+    """
+    unittest_import_strs = set([
+        'unittest2.loader.ModuleImportFailure.',
+        'unittest.loader.ModuleImportFailure.',
+        'discover.ModuleImportFailure.'
+        ])
+    test_ids = []
+    errors = []
+    for test in iterate_tests(test):
+        # Much ugly.
+        for prefix in unittest_import_strs:
+            if test.id().startswith(prefix):
+                errors.append(test.id()[len(prefix):])
+                break
+        else:
+            test_ids.append(test.id())
+    return test_ids, errors
+
+
+class TestProgram(unittest.TestProgram):
+
+    # defaults for testing
+    module = None
+    verbosity = 1
+    failfast = catchbreak = buffer = progName = None
+    _discovery_parser = None
+
+    def __init__(self, module='__main__', defaultTest=None, argv=None,
+                 testRunner=None, testLoader=unittest.defaultTestLoader,
+                 exit=False, verbosity=1, failfast=None, catchbreak=None,
+                 buffer=None, warnings=None, tb_locals=False):
+        if isinstance(module, str):
+            self.module = __import__(module)
+            for part in module.split('.')[1:]:
+                self.module = getattr(self.module, part)
+        else:
+            self.module = module
+        if argv is None:
+            argv = sys.argv
+
+        self.exit = exit
+        self.failfast = failfast
+        self.catchbreak = catchbreak
+        self.verbosity = verbosity
+        self.buffer = buffer
+        self.tb_locals = tb_locals
+        if warnings is None and not sys.warnoptions:
+            # even if DeprecationWarnings are ignored by default
+            # print them anyway unless other warnings settings are
+            # specified by the warnings arg or the -W python flag
+            self.warnings = 'default'
+        else:
+            # here self.warnings is set either to the value passed
+            # to the warnings args or to None.
+            # If the user didn't pass a value self.warnings will
+            # be None. This means that the behavior is unchanged
+            # and depends on the values passed to -W.
+            self.warnings = warnings
+        self.defaultTest = defaultTest
+        # XXX: Local edit (see http://bugs.python.org/issue22860)
+        self.listtests = False
+        self.load_list = None
+        self.testRunner = testRunner
+        self.testLoader = testLoader
+        self.progName = os.path.basename(argv[0])
+        self.parseArgs(argv)
+        # XXX: Local edit (see http://bugs.python.org/issue22860)
+        if self.load_list:
+            # TODO(mtreinish): preserve existing suites (like testresources
+            # does in OptimisingTestSuite.add, but with a standard protocol).
+            # This is needed because the load_tests hook allows arbitrary
+            # suites, even if that is rarely used.
+            source = open(self.load_list, 'rb')
+            try:
+                lines = source.readlines()
+            finally:
+                source.close()
+            test_ids = set(line.strip().decode('utf-8') for line in lines)
+            self.test = filter_by_ids(self.test, test_ids)
+        # XXX: Local edit (see http://bugs.python.org/issue22860)
+        if not self.listtests:
+            self.runTests()
+        else:
+            runner = self._get_runner()
+            if extras.safe_hasattr(runner, 'list'):
+                try:
+                    runner.list(self.test, loader=self.testLoader)
+                except TypeError:
+                    runner.list(self.test)
+            else:
+                for test in iterate_tests(self.test):
+                    sys.stdout.write('%s\n' % test.id())
+
+    def _getParentArgParser(self):
+        parser = super(TestProgram, self)._getParentArgParser()
+        # XXX: Local edit (see http://bugs.python.org/issue22860)
+        parser.add_argument(
+            '-l', '--list', dest='listtests', default=False,
+            action='store_true', help='List tests rather than executing them')
+        parser.add_argument(
+            '--load-list', dest='load_list', default=None,
+            help='Specifies a file containing test ids, only tests matching '
+                 'those ids are executed')
+        return parser
+
+    def _get_runner(self):
+        testRunner = self.testRunner
+        try:
+            testRunner = self.testRunner(failfast=self.failfast,
+                                         tb_locals=self.tb_locals)
+        except TypeError:
+            testRunner = self.testRunner()
+        # If for some reason we failed to initialize the runner initialize
+        # with defaults
+        if isinstance(testRunner, functools.partial):
+            testRunner = self.testRunner()
+        return testRunner
+
+    def runTests(self):
+        if self.catchbreak:
+            unittest.installHandler()
+        testRunner = self._get_runner()
+        self.result = testRunner.run(self.test)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/subunit_runner/run.py 
new/stestr-2.5.1/stestr/subunit_runner/run.py
--- old/stestr-2.4.0/stestr/subunit_runner/run.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/stestr-2.5.1/stestr/subunit_runner/run.py       2019-09-03 
15:17:17.000000000 +0200
@@ -0,0 +1,99 @@
+# Copyright 2019 Matthew Treinish
+# Copyright (C) Jelmer Vernooij <[email protected]> 2007
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from functools import partial
+import os
+import sys
+
+from subunit import StreamResultToBytes
+from subunit.test_results import AutoTimingTestResultDecorator
+from testtools import ExtendedToStreamDecorator
+
+from stestr.subunit_runner import program
+
+
+class SubunitTestRunner(object):
+    def __init__(self, failfast=False, tb_locals=False, stdout=sys.stdout):
+        """Create a Test Runner.
+
+        :param failfast: Stop running tests at the first failure.
+        :param stdout: Output stream parameter, defaults to sys.stdout
+        :param tb_locals: If set true local variables will be shown
+
+        Either stream or stdout can be supplied, and stream will take
+        precedence.
+        """
+        self.failfast = failfast
+        self.stream = stdout
+        self.tb_locals = tb_locals
+
+    def run(self, test):
+        "Run the given test case or test suite."
+        result, _ = self._list(test)
+        result = ExtendedToStreamDecorator(result)
+        result = AutoTimingTestResultDecorator(result)
+        if self.failfast is not None:
+            result.failfast = self.failfast
+            result.tb_locals = self.tb_locals
+        result.startTestRun()
+        try:
+            test(result)
+        finally:
+            result.stopTestRun()
+        return result
+
+    def list(self, test, loader=None):
+        "List the test."
+        result, errors = self._list(test)
+        if loader is not None:
+            errors = loader.errors
+        if errors:
+            failed_descr = '\n'.join(errors).encode('utf8')
+            result.status(file_name="import errors", runnable=False,
+                          file_bytes=failed_descr,
+                          mime_type="text/plain;charset=utf8")
+            sys.exit(2)
+
+    def _list(self, test):
+        test_ids, errors = program.list_test(test)
+        try:
+            fileno = self.stream.fileno()
+        except Exception:
+            fileno = None
+        if fileno is not None:
+            stream = os.fdopen(fileno, 'wb', 0)
+        else:
+            stream = self.stream
+        result = StreamResultToBytes(stream)
+        for test_id in test_ids:
+            result.status(test_id=test_id, test_status='exists')
+        return result, errors
+
+
+def main():
+    runner = SubunitTestRunner
+    if sys.version_info[0] >= 3 and sys.version_info[1] >= 5:
+        program.TestProgram(
+            module=None, argv=sys.argv,
+            testRunner=partial(runner, stdout=sys.stdout))
+    else:
+        from testtools import run as testtools_run
+        testtools_run.TestProgram(module=None, argv=sys.argv,
+                                  testRunner=runner,
+                                  stdout=sys.stdout, exit=False)
+
+
+if __name__ == '__main__':
+    main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/tests/test_config_file.py 
new/stestr-2.5.1/stestr/tests/test_config_file.py
--- old/stestr-2.4.0/stestr/tests/test_config_file.py   2019-07-18 
03:25:22.000000000 +0200
+++ new/stestr-2.5.1/stestr/tests/test_config_file.py   2019-09-03 
15:17:17.000000000 +0200
@@ -49,7 +49,7 @@
         self.assertEqual(mock_TestProcessorFixture.return_value, fixture)
         mock_get_repo_open.assert_called_once_with('file',
                                                    None)
-        command = '%s -m subunit.run discover -t "%s" "%s" ' \
+        command = '%s -m stestr.subunit_runner.run discover -t "%s" "%s" ' \
                   '$LISTOPT $IDOPTION' % (expected_python, 'fake_top_dir',
                                           'fake_test_path')
         # Ensure TestProcessorFixture is created with defaults except for where
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/tests/test_load.py 
new/stestr-2.5.1/stestr/tests/test_load.py
--- old/stestr-2.4.0/stestr/tests/test_load.py  1970-01-01 01:00:00.000000000 
+0100
+++ new/stestr-2.5.1/stestr/tests/test_load.py  2019-09-03 15:17:17.000000000 
+0200
@@ -0,0 +1,25 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import io
+
+from stestr.commands import load
+from stestr.tests import base
+
+
+class TestLoadCommand(base.TestCase):
+    def test_empty_with_pretty_out(self):
+        stream = io.BytesIO()
+        output = io.BytesIO()
+        res = load.load(in_streams=[('subunit', stream)], pretty_out=True,
+                        stdout=output)
+        self.assertEqual(1, res)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr/tests/test_output.py 
new/stestr-2.5.1/stestr/tests/test_output.py
--- old/stestr-2.4.0/stestr/tests/test_output.py        1970-01-01 
01:00:00.000000000 +0100
+++ new/stestr-2.5.1/stestr/tests/test_output.py        2019-09-03 
15:17:17.000000000 +0200
@@ -0,0 +1,72 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import io
+
+from stestr import output
+from stestr.tests import base
+
+
+class TestOutput(base.TestCase):
+
+    def test_output_table(self):
+        table = [['Header 1', 'Header 2', 'Header 999'],
+                 [1, '0000000002', 'foo'],
+                 ['bar', 6, 'This is a content.']]
+        expected = \
+            "Header 1  Header 2    Header 999\n" \
+            "--------  ----------  ------------------\n" \
+            "1         0000000002  foo\n" \
+            "bar       6           This is a content.\n"
+        with io.StringIO() as f:
+            output.output_table(table, f)
+            actual = f.getvalue()
+            self.assertEqual(expected, actual)
+
+    def test_output_tests(self):
+        class Test(object):
+            def __init__(self, i):
+                self.i = i
+
+            def id(self):
+                return self.i
+
+        tests = [Test('a'), Test('b'), Test('foo')]
+        expected = "a\nb\nfoo\n"
+        with io.StringIO() as f:
+            output.output_tests(tests, f)
+            actual = f.getvalue()
+            self.assertEqual(expected, actual)
+
+    def test_output_summary_passed(self):
+        expected = 'Ran 10 (+5) tests in 1.100s (+0.100s)\n' \
+            'PASSED (id=99 (+1), id=100 (+2))\n'
+        with io.StringIO() as f:
+            output.output_summary(
+                successful=True, tests=10, tests_delta=5,
+                time=1.1, time_delta=0.1,
+                values=[('id', 99, 1), ('id', '100', 2)],
+                output=f)
+            actual = f.getvalue()
+            self.assertEqual(expected, actual)
+
+    def test_output_summary_failed(self):
+        expected = 'Ran 10 (+5) tests in 1.100s (+0.100s)\n' \
+            'FAILED (id=99 (+1), id=100 (+2))\n'
+        with io.StringIO() as f:
+            output.output_summary(
+                successful=False, tests=10, tests_delta=5,
+                time=1.1, time_delta=0.1,
+                values=[('id', 99, 1), ('id', '100', 2)],
+                output=f)
+            actual = f.getvalue()
+            self.assertEqual(expected, actual)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr.egg-info/PKG-INFO 
new/stestr-2.5.1/stestr.egg-info/PKG-INFO
--- old/stestr-2.4.0/stestr.egg-info/PKG-INFO   2019-07-18 03:25:38.000000000 
+0200
+++ new/stestr-2.5.1/stestr.egg-info/PKG-INFO   2019-09-03 15:17:27.000000000 
+0200
@@ -1,11 +1,11 @@
 Metadata-Version: 2.1
 Name: stestr
-Version: 2.4.0
+Version: 2.5.1
 Summary: A parallel Python test runner built around subunit
 Home-page: http://stestr.readthedocs.io/en/latest/
 Author: Matthew Treinish
 Author-email: [email protected]
-License: UNKNOWN
+License: Apache-2.0
 Project-URL: Documentation, https://stestr.readthedocs.io
 Project-URL: Source Code, https://github.com/mtreinish/stestr
 Project-URL: Bug Tracker, https://github.com/mtreinish/stestr/issues
@@ -28,9 +28,13 @@
             :target: https://pypi.python.org/pypi/stestr
             :alt: Latest Version
         
+        * Read this in other languages: `English`_, `日本語`_
         * You can see the full rendered docs at: 
http://stestr.readthedocs.io/en/latest/
         * The code of the project is on Github: 
https://github.com/mtreinish/stestr
         
+        .. _English: https://github.com/mtreinish/stestr/blob/master/README.rst
+        .. _日本語: https://github.com/mtreinish/stestr/blob/master/README_ja.rst
+        
         .. note:: stestr v2.x.x release series will be the last series that 
supports
             Python 2. Support for Python 2.7 will be dropped in stestr release 
3.0.0
             which is being planned for early 2020.
@@ -149,6 +153,15 @@
         
         .. _github pull requests: 
https://help.github.com/articles/about-pull-requests/
         
+        Community
+        ---------
+        
+        Besides Github interactions there is also a stestr IRC channel:
+        
+        #stestr on Freenode
+        
+        feel free to join to ask questions, or just discuss stestr.
+        
         
 Platform: UNKNOWN
 Classifier: Intended Audience :: Information Technology
@@ -166,3 +179,4 @@
 Classifier: Topic :: Software Development :: Testing
 Classifier: Topic :: Software Development :: Quality Assurance
 Provides-Extra: sql
+Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr.egg-info/SOURCES.txt 
new/stestr-2.5.1/stestr.egg-info/SOURCES.txt
--- old/stestr-2.4.0/stestr.egg-info/SOURCES.txt        2019-07-18 
03:25:38.000000000 +0200
+++ new/stestr-2.5.1/stestr.egg-info/SOURCES.txt        2019-09-03 
15:17:27.000000000 +0200
@@ -1,4 +1,5 @@
 .coveragerc
+.mailmap
 .stestr.conf
 .travis.yml
 AUTHORS
@@ -7,6 +8,7 @@
 ChangeLog
 LICENSE
 README.rst
+README_ja.rst
 azure-pipelines.yml
 requirements.txt
 setup.cfg
@@ -18,6 +20,7 @@
 doc/source/CONTRIBUTING.rst
 doc/source/MANUAL.rst
 doc/source/README.rst
+doc/source/README_ja.rst
 doc/source/api.rst
 doc/source/conf.py
 doc/source/developer_guidelines.rst
@@ -79,11 +82,16 @@
 stestr/repository/memory.py
 stestr/repository/sql.py
 stestr/repository/util.py
+stestr/subunit_runner/__init__.py
+stestr/subunit_runner/program.py
+stestr/subunit_runner/run.py
 stestr/tests/__init__.py
 stestr/tests/base.py
 stestr/tests/test_bisect_return_codes.py
 stestr/tests/test_bisect_tests.py
 stestr/tests/test_config_file.py
+stestr/tests/test_load.py
+stestr/tests/test_output.py
 stestr/tests/test_return_codes.py
 stestr/tests/test_run.py
 stestr/tests/test_scheduler.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr.egg-info/pbr.json 
new/stestr-2.5.1/stestr.egg-info/pbr.json
--- old/stestr-2.4.0/stestr.egg-info/pbr.json   2019-07-18 03:25:38.000000000 
+0200
+++ new/stestr-2.5.1/stestr.egg-info/pbr.json   2019-09-03 15:17:27.000000000 
+0200
@@ -1 +1 @@
-{"git_version": "a9402eb", "is_release": true}
\ No newline at end of file
+{"git_version": "2957835", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/stestr-2.4.0/stestr.egg-info/requires.txt 
new/stestr-2.5.1/stestr.egg-info/requires.txt
--- old/stestr-2.4.0/stestr.egg-info/requires.txt       2019-07-18 
03:25:38.000000000 +0200
+++ new/stestr-2.5.1/stestr.egg-info/requires.txt       2019-09-03 
15:17:27.000000000 +0200
@@ -10,3 +10,17 @@
 
 [sql]
 subunit2sql>=1.8.0
+
+[test]
+hacking<0.12,>=0.11.0
+mock>=2.0
+subunit2sql>=1.8.0
+coverage>=4.0
+ddt>=1.0.1
+doc8>=0.8.0
+
+[test:(python_version=='2.7')]
+sphinx!=1.6.6,!=1.6.7,<2.0.0
+
+[test:(python_version>='3.4')]
+sphinx!=1.6.6,!=1.6.7,!=2.1.0


Reply via email to