From a61910fde100fa1112ec57dd3e456719724997ef Mon Sep 17 00:00:00 2001
From: Carl George <carl@george.computer>
Date: Wed, 9 Feb 2022 17:15:39 -0600
Subject: [PATCH] Switch from nose to pytest

This is not a full rewrite to pytest style tests, it just changes the
minimum to allow pytest to run the existing tests.

Resolves #72
---
 .github/workflows/pythonpackage.yml | 6 +++---
 Makefile                            | 3 +--
 README.rst                          | 4 ++--
 gitdb.pro.user                      | 3 +--
 gitdb/test/db/test_pack.py          | 4 ++--
 gitdb/test/lib.py                   | 4 ++--
 gitdb/test/test_pack.py             | 4 ++--
 7 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml
index 7f35b61..c695ad3 100644
--- a/.github/workflows/pythonpackage.yml
+++ b/.github/workflows/pythonpackage.yml
@@ -36,9 +36,9 @@ jobs:
         flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
         # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
         flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
-    - name: Test with nose
+    - name: Test with pytest
       run: |
-        pip install nose
+        pip install pytest
         ulimit -n 48
         ulimit -n
-        nosetests -v
+        pytest -v
diff --git a/Makefile b/Makefile
index 8290756..e063028 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,5 @@
 PYTHON = python
 SETUP = $(PYTHON) setup.py
-TESTRUNNER = $(shell which nosetests)
 TESTFLAGS =
 
 all::
@@ -37,5 +36,5 @@ clean::
 	rm -f *.so
 
 coverage:: build
-	PYTHONPATH=. $(PYTHON) $(TESTRUNNER) --cover-package=gitdb --with-coverage --cover-erase --cover-inclusive gitdb
+	PYTHONPATH=. $(PYTHON) -m pytest --cov=gitdb gitdb
 
diff --git a/README.rst b/README.rst
index 44b3edd..29c70f7 100644
--- a/README.rst
+++ b/README.rst
@@ -30,7 +30,7 @@ If you want to go up to 20% faster, you can install gitdb-speedups with:
 REQUIREMENTS
 ============
 
-* Python  Nose - for running the tests
+* pytest - for running the tests
 
 SOURCE
 ======
@@ -45,7 +45,7 @@ Once the clone is complete, please be sure to initialize the submodules using
 
 Run the tests with
 
- nosetests
+ pytest
 
 DEVELOPMENT
 ===========
diff --git a/gitdb.pro.user b/gitdb.pro.user
index 398cb70..3ca1e21 100644
--- a/gitdb.pro.user
+++ b/gitdb.pro.user
@@ -233,8 +233,7 @@
    </valuemap>
    <valuemap key="ProjectExplorer.Target.RunConfiguration.1" type="QVariantMap">
     <valuelist key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments" type="QVariantList">
-     <value type="QString">/usr/bin/nosetests</value>
-     <value type="QString">-s</value>
+     <value type="QString">/usr/bin/pytest</value>
      <value type="QString">gitdb/test/test_pack.py</value>
     </valuelist>
     <value key="ProjectExplorer.CustomExecutableRunConfiguration.BaseEnvironmentBase" type="int">2</value>
diff --git a/gitdb/test/db/test_pack.py b/gitdb/test/db/test_pack.py
index ff96a58..4539f42 100644
--- a/gitdb/test/db/test_pack.py
+++ b/gitdb/test/db/test_pack.py
@@ -16,7 +16,7 @@
 import random
 import sys
 
-from nose.plugins.skip import SkipTest
+import pytest
 
 class TestPackDB(TestDBBase):
 
@@ -24,7 +24,7 @@ class TestPackDB(TestDBBase):
     @with_packs_rw
     def test_writing(self, path):
         if sys.platform == "win32":
-            raise SkipTest("FIXME: Currently fail on windows")
+            pytest.skip("FIXME: Currently fail on windows")
 
         pdb = PackedDB(path)
 
diff --git a/gitdb/test/lib.py b/gitdb/test/lib.py
index a04084f..abd4ad5 100644
--- a/gitdb/test/lib.py
+++ b/gitdb/test/lib.py
@@ -65,8 +65,8 @@ def skip_on_travis_ci(func):
     @wraps(func)
     def wrapper(self, *args, **kwargs):
         if 'TRAVIS' in os.environ:
-            import nose
-            raise nose.SkipTest("Cannot run on travis-ci")
+            import pytest
+            pytest.skip("Cannot run on travis-ci")
         # end check for travis ci
         return func(self, *args, **kwargs)
     # end wrapper
diff --git a/gitdb/test/test_pack.py b/gitdb/test/test_pack.py
index 4b01741..f946197 100644
--- a/gitdb/test/test_pack.py
+++ b/gitdb/test/test_pack.py
@@ -26,7 +26,7 @@
 from gitdb.exc import UnsupportedOperation
 from gitdb.util import to_bin_sha
 
-from nose import SkipTest
+import pytest
 
 import os
 import tempfile
@@ -246,4 +246,4 @@ def rewind_streams():
     def test_pack_64(self):
         # TODO: hex-edit a pack helping us to verify that we can handle 64 byte offsets
         # of course without really needing such a huge pack
-        raise SkipTest()
+        pytest.skip('not implemented')