mirror of
https://github.com/bndr/pipreqs.git
synced 2025-06-06 03:25:21 +00:00

**TL;DR: this post-commit hook ensures that valid versions are automatically tagged based on changes in the `pyproject.toml` file.** This post-commit hook automates the tagging of the project based on changes in the `pyproject.toml` file. Here's a breakdown of what it does: **1. Extracting the version number:** * `git diff HEAD^..HEAD`: This line compares the current commit (`HEAD`) to its immediate predecessor (`HEAD^`). * `-- "$(git rev-parse --show-toplevel)"/pyproject.toml`: This specifies the `pyproject.toml` file within the project root directory. * `grep -m 1 '^\+.*version'`: This searches for the first line starting with a "+" and containing the word "version". * `sed -s 's/[^A-Z0-9\.\-]//g'`: This removes any characters except numbers, letters, dots, and hyphens from the matched line. * `version=`: Finally, the extracted version string is stored in the `version` variable. **2. Validating the version format:** * `if [[ ! $version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(\-[A-Z]+\.[0-9]+)?$ ]]; then`: This checks if the extracted version string matches a specific format: * `^`: Starts with the beginning of the string. * `([0-9]+)`: Matches one or more digits (major version). * `\.`: Matches a literal dot. * `([0-9]+)`: Matches one or more digits (minor version). * `\.`: Matches a literal dot. * `([0-9]+)`: Matches one or more digits (patch version). * `(\-[A-Z]+\.[0-9]+)?`: This is optional and matches a hyphen followed by one or more uppercase letters and a dot and another number (pre-release + build information). * `$`: Matches the end of the string. * If the format is invalid, it logs a message and exits with an error code. **3. Creating the tag:** * `git tag -a "v$version"`: This creates a new annotated tag named `v$version` (with the prefix "v") using the extracted version number. * ``-m "`git log -1 --format=%s`"``: This sets the tag message with the full commit message of the current commit. * `echo "Created a new tag, v$version"`: This prints a confirmation message. Co-authored-by: Darwish Ahmad Herati <13837531+daherati@users.noreply.github.com>
============================================================================= ``pipreqs`` - Generate requirements.txt file for any project based on imports ============================================================================= .. image:: https://img.shields.io/travis/bndr/pipreqs.svg :target: https://travis-ci.org/bndr/pipreqs .. image:: https://img.shields.io/pypi/v/pipreqs.svg :target: https://pypi.python.org/pypi/pipreqs .. image:: https://codecov.io/gh/bndr/pipreqs/branch/master/graph/badge.svg?token=0rfPfUZEAX :target: https://codecov.io/gh/bndr/pipreqs .. image:: https://img.shields.io/pypi/l/pipreqs.svg :target: https://pypi.python.org/pypi/pipreqs Installation ------------ .. code-block:: sh pip install pipreqs Usage ----- :: Usage: pipreqs [options] [<path>] Arguments: <path> The path to the directory containing the application files for which a requirements file should be generated (defaults to the current working directory) Options: --use-local Use ONLY local package info instead of querying PyPI --pypi-server <url> Use custom PyPi server --proxy <url> Use Proxy, parameter will be passed to requests library. You can also just set the environments parameter in your terminal: $ export HTTP_PROXY="http://10.10.1.10:3128" $ export HTTPS_PROXY="https://10.10.1.10:1080" --debug Print debug information --ignore <dirs>... Ignore extra directories, each separated by a comma --no-follow-links Do not follow symbolic links in the project --encoding <charset> Use encoding parameter for file open --savepath <file> Save the list of requirements in the given file --print Output the list of requirements in the standard output --force Overwrite existing requirements.txt --diff <file> Compare modules in requirements.txt to project imports --clean <file> Clean up requirements.txt by removing modules that are not imported in project --mode <scheme> Enables dynamic versioning with <compat>, <gt> or <non-pin> schemes <compat> | e.g. Flask~=1.1.2 <gt> | e.g. Flask>=1.1.2 <no-pin> | e.g. Flask Example ------- :: $ pipreqs /home/project/location Successfully saved requirements file in /home/project/location/requirements.txt Contents of requirements.txt :: wheel==0.23.0 Yarg==0.1.9 docopt==0.6.2 Why not pip freeze? ------------------- - ``pip freeze`` only saves the packages that are installed with ``pip install`` in your environment. - ``pip freeze`` saves all packages in the environment including those that you don't use in your current project (if you don't have ``virtualenv``). - and sometimes you just need to create ``requirements.txt`` for a new project without installing modules.
Description
Languages
Python
88.3%
Jupyter Notebook
8.6%
Makefile
3.1%