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 uv:
uv tool install paul-mclendahand
With pip from PyPI:
pip install paul-mclendahand
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
Configure git
When cherry-picking commits, pmac sometimes causes Git to push you to resolve the same issue multiple times. For this reason, we encourage you to set rerere.enabled to true.
Globally:
$ git config --global rerere.enabled true
Local to the git repository you’re in:
$ git config rerere.enabled true
git will keep track of resolutions and re-apply them.
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
File details
Details for the file paul_mclendahand-3.2.0.tar.gz
.
File metadata
- Download URL: paul_mclendahand-3.2.0.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.13.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84238ffc7cef0f49a4ba32c2cdf64b516e192c0d0096d5546332143ba0177a7a |
|
MD5 | 64f6e78a3105e349c041a9cbd779a69c |
|
BLAKE2b-256 | 73ab32c947619151a71591ccfe318dea6cbe98a61364a2ce21fc3f852c4e07f2 |
File details
Details for the file paul_mclendahand-3.2.0-py3-none-any.whl
.
File metadata
- Download URL: paul_mclendahand-3.2.0-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.13.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13b1246a3b046f019753b55e02ff09f3fd91ce11fe9af5a29ed56ed41ce37c04 |
|
MD5 | e6ecbfddfda4076cebd77387e128519c |
|
BLAKE2b-256 | efa8c9cf07f6addf8046f45c788dd7f6da211907ecd93dee460830dfd7550ee8 |