Tool for combining GitHub pull requests.
Project description
Tool for combining GitHub pull requests.
- Code:
- Issues:
- License:
MPL v2
- Documentation:
this README
Install
(Recommended) With pipx:
pipx install paul-mclendahand
With pip from PyPI:
pip install paul-mclendahand
With pip from GitHub main branch:
pip install https://github.com/willkg/paul-mclendahand/archive/main.zip
With pip from a clone of the repository with dev dependencies:
pip install -r requirements-dev.txt
Quick start
Configure pmac
pmac needs to know the GitHub user and GitHub project.
You can set configuration in the pyproject.toml file:
[tool.paul-mclendahand] github_user = "user" github_project = "project" main_branch = "git-main-branch-name"
Or you can set configuration in the setup.cfg file:
[tool:paul-mclendahand] github_user=user github_project=project main_branch=git-main-branch-name
You can override the configuration variables with environment variables:
PMAC_GITHUB_USER=user PMAC_GITHUB_PROJECT=project PMAC_MAIN_BRANCH=git-main-branch-name
Optional
You can also use a GitHub personal access token. You set it in the PMAC_GITHUB_API_TOKEN environment variable.
For example:
PMAC_GITHUB_API_TOKEN=abcdef0000000000000000000000000000000000 pmac listprs
Using pmac
After you’ve configured git, then you can use pmac like this:
Create a new branch:
git checkout <MAIN-BRANCH> git checkout -b update-prs
List open PRs:
pmac listprs
Combine some pull requests into it:
pmac add 5100 5101 5102
Use the same pull requests numbers as on GitHub.
Internally, pmac uses git am to apply commits from pull requests. If you hit a git am conflict, pmac will tell you. You can edit the file in another terminal to manually resolve the conflict. Then do:
git add FILE git commit git am --continue
After that, you can continue with pmac.
When you’re done, push the branch to GitHub and create a pull request.
pmac can help with the PR description:
pmac prmsg
pmac
Usage: pmac [OPTIONS] COMMAND [ARGS]... GitHub pull request combiner tool. pmac uses a "[tool:paul-mclendahand]" section in setup.cfg to set configuration variables. You can override these using PMAC_VARNAME environment variables. Additionally, if you want to use a GitHub personal access token, you need to provide the "PMAC_GITHUB_API_TOKEN" variable in the environment set to the token. For issues, see: https://github.com/willkg/paul-mclendahand/issues Options: --version Show the version and exit. --help Show this message and exit. Commands: add Combine specified PRs into this branch. listprs List available PRs for the project. prmsg Print out summary of commits suitable for a PR msg.
pmac listprs
Usage: pmac listprs [OPTIONS] List available PRs for the project. Options: --labels / --no-labels List labels --format [table|tab] --help Show this message and exit.
pmac add
Usage: pmac add [OPTIONS] PR... Combine specified PRs into this branch. Options: --help Show this message and exit.
pmac prmsg
Usage: pmac prmsg [OPTIONS] Print out summary of commits suitable for a PR msg. Options: --help Show this message and exit.
Why does this project exist?
Two main reasons.
First, GitHub doesn’t support combining pull requests. There is a forum post about it here: https://github.community/t/feature-request-combine-pull-requests/2250
Second, dependabot (also owned by GitHub) doesn’t support grouping dependency updates into a single pull request. If you have 50 dependency updates, it creates 50 pull requests (sometimes more!). I have a lot of projects and lack of grouping updates makes monthly maintenance miserable. There’s an issue for this: https://github.com/dependabot/dependabot-core/issues/1190
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for paul_mclendahand-3.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27fd1f4c397bbd7ded1f133bdec37acfd32ce9dc5da1a9f929b539cd3015ea56 |
|
MD5 | 4640cb9faa729d982be12b301a7d90ec |
|
BLAKE2b-256 | fededc5b5d0c0a440a0e98e741ffbf7d959e8d8e3472e3992d1eeac9a71a5193 |