diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 1d9bb40..164af8a 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -19,30 +19,13 @@ on: jobs: - linux-validate: + validate: name: Validate on Linux - Python ${{ matrix.python }} - runs-on: ubuntu-22.04 strategy: matrix: - python: [ '3.7', '3.8', '3.12' ] - steps: - - uses: actions/checkout@v5 - - - name: Setup python - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python }} - architecture: x64 - - - name: Run tests - run: python tests/run_tests.py - - windows-validate: - name: Validate on Windows - Python ${{ matrix.python }} - runs-on: windows-latest - strategy: - matrix: - python: [ '3.7', '3.8', '3.12' ] + python: [ '3.8', '3.12' ] + os: [ 'ubuntu-22.04', 'windows-latest' ] + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v5 @@ -51,6 +34,9 @@ jobs: with: python-version: ${{ matrix.python }} architecture: x64 + + - name: Install patch_ng + run: pip install . - name: Run tests run: python tests/run_tests.py diff --git a/patch_ng.py b/patch_ng.py old mode 100755 new mode 100644 index d84875c..7c46915 --- a/patch_ng.py +++ b/patch_ng.py @@ -28,10 +28,8 @@ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ -__author__ = "Conan.io " -__version__ = "1.20.0-dev" -__license__ = "MIT" -__url__ = "https://github.com/conan-io/python-patch" +from __future__ import print_function +import importlib.metadata import codecs import copy @@ -1389,7 +1387,7 @@ def main(): opt = OptionParser(usage="1. %prog [options] unified.diff\n" " 2. %prog [options] http://host/patch\n" " 3. %prog [options] -- < unified.diff", - version="python-patch %s" % __version__) + version="python-patch %s" % importlib.metadata.version('patch_ng')) opt.add_option("-q", "--quiet", action="store_const", dest="verbosity", const=0, help="print only warnings and errors", default=1) opt.add_option("-v", "--verbose", action="store_const", dest="verbosity", diff --git a/pyproject.toml b/pyproject.toml index 9787c3b..4e02b11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,32 @@ +[project] +name = "patch-ng" +version = "1.19.0" +requires-python = ">=3.8" + +description = "Library to parse and apply unified diffs." +readme = "README.md" +license = { text = "MIT" } +authors = [ + { name = "Conan.io", email = "info@conan.io" } +] + +# See https://pypi.python.org/pypi?%3Aaction=list_classifiers +classifiers = [ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'Topic :: Software Development :: Build Tools', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.8' +] + +keywords = ['patch', 'parse', 'diff', 'strip', 'diffstat'] + +[project.urls] +Repository = "https://github.com/conan-io/python-patch-ng/" + [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" + +[tool.setuptools.package-data] +patch_ng = ["LICENSE", "README.md"] diff --git a/setup.py b/setup.py deleted file mode 100644 index c3f6cd4..0000000 --- a/setup.py +++ /dev/null @@ -1,128 +0,0 @@ -"""A setuptools based setup module. -See: -https://packaging.python.org/en/latest/distributing.html -https://github.com/pypa/sampleproject -""" - -# Always prefer setuptools over distutils -import re -import os -from setuptools import setup -# To use a consistent encoding -from codecs import open - - -here = os.path.abspath(os.path.dirname(__file__)) - -# Get the long description from the README file -with open(os.path.join(here, 'README.md'), encoding='utf-8') as f: - long_description = f.read() - - -def get_requires(filename): - requirements = [] - with open(filename) as req_file: - for line in req_file.read().splitlines(): - if not line.strip().startswith("#"): - requirements.append(line) - return requirements - - -def load_version(): - """Loads a file content""" - filename = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), - "patch_ng.py")) - with open(filename, "rt") as version_file: - content = version_file.read() - version = re.search('__version__ = "([0-9a-z.-]+)"', content).group(1) - return version - -setup( - name='patch-ng', - python_requires='>=3.6', - # Versions should comply with PEP440. For a discussion on single-sourcing - # the version across setup.py and the project code, see - # https://packaging.python.org/en/latest/single_source_version.html - version=load_version(), - - # This is an optional longer description of your project that represents - # the body of text which users will see when they visit PyPI. - # - # Often, this is the same as your README, so you can just read it in from - # that file directly (as we have already done above) - # - # This field corresponds to the "Description" metadata field: - # https://packaging.python.org/specifications/core-metadata/#description-optional - long_description=long_description, # Optional - - description='Library to parse and apply unified diffs.', - - # The project's main homepage. - url='https://github.com/conan-io/python-patch', - - # Author details - author='Conan.io', - author_email='info@conan.io', - - # Choose your license - license='MIT', - - # See https://pypi.python.org/pypi?%3Aaction=list_classifiers - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'Topic :: Software Development :: Build Tools', - 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8' - ], - - # What does your project relate to? - keywords=['patch', 'parse', 'diff', 'strip', 'diffstat'], - - # You can just specify the packages manually here if your project is - # simple. Or you can use find_packages(). - # packages=find_packages(exclude=['tests']), - - # Alternatively, if you want to distribute just a my_module.py, uncomment - # this: - py_modules=["patch_ng"], - - # List run-time dependencies here. These will be installed by pip when - # your project is installed. For an analysis of "install_requires" vs pip's - # requirements files see: - # https://packaging.python.org/en/latest/requirements.html - # install_requires=get_requires('requirements.txt'), - - # List additional groups of dependencies here (e.g. development - # dependencies). You can install these using the following syntax, - # for example: - # $ pip install -e .[dev,test] - #extras_require={ - # 'test': get_requires(os.path.join('tests', 'requirements_test.txt')) - #}, - - # If there are data files included in your packages that need to be - # installed, specify them here. If using Python 2.6 or less, then these - # have to be included in MANIFEST.in as well. - package_data={ - '': ['*.md', 'LICENSE'], - }, - - # Although 'package_data' is the preferred approach, in some case you may - # need to place data files outside of your packages. See: - # http://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files # noqa - # In this case, 'data_file' will be installed into '/my_data' - # data_files=[('my_data', ['data/data_file'])], - - # To provide executable scripts, use entry points in preference to the - # "scripts" keyword. Entry points provide cross-platform support and allow - # pip to create the appropriate form of executable for the target platform. - #entry_points={ - # 'console_scripts': [ - # 'patch_ng.py=patch', - # ], - #}, -)