mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-29 13:22:27 +03:00
122 lines
5.3 KiB
Markdown
122 lines
5.3 KiB
Markdown
# Pull requests
|
||
|
||
<div class=pagetoc>
|
||
<!-- toc -->
|
||
</div>
|
||
|
||
Most contributed hledger code (and some of the project maintainer's code)
|
||
is submitted and reviewed via Github pull requests.
|
||
Here are some tips for contributing PRs to hledger.
|
||
|
||
## Code review is important
|
||
|
||
We aim to improve and sustain hledger's quality and maintainability over the long term.
|
||
|
||
Many PRs, especially small ones, and even some big ones, can be merged quickly.
|
||
We love merging good PRs quickly.
|
||
|
||
Some bigger or more risky PRs can require substantial review, discussion, changes, or re-submission.
|
||
Sometimes this is a bigger task than the coding.
|
||
Much valuable design, quality control, and knowledge sharing happens at this time.
|
||
Some PRs get rejected, but their discussion and exploration can still be a useful contribution.
|
||
We very much want to avoid wasted work, but it occasionally happens.
|
||
Our process is evolving and imperfect.
|
||
All of this is normal.
|
||
|
||
We hope you'll see it as a golden opportunity to collaborate with experts,
|
||
share and receive knowledge, refine your design/documentation/code,
|
||
and practice real-world development and communication skills.
|
||
Patience and persistence pays.
|
||
|
||
## The pull request
|
||
|
||
A PR should have a clear purpose, documented in its description. Mention any #ISSUENOs addressed.
|
||
|
||
Don't tackle too much at once.
|
||
Smaller/more focussed PRs can be reviewed quicker and accepted (or rejected) quicker.
|
||
|
||
Consider showing a draft of documentation first (more on this below).
|
||
|
||
## The commit(s)
|
||
|
||
Commits should be easy to review.
|
||
Ideally each commit is complete, and has a single clear purpose,
|
||
which should be documented in the summary (and long description, if needed).
|
||
\#ISSUENOs can be mentioned in summary/description too when appropriate.
|
||
|
||
Within the above constraint, fewer, larger commits are preferred.
|
||
|
||
Keep in mind that commit messages are valuable documentation
|
||
for future developers and troubleshooters.
|
||
They are also the starting point for package changelogs and hledger release notes.
|
||
High-quality commit messages makes the release process quicker, and the resulting docs better.
|
||
|
||
User-impacting commits should mention the user-visible changes,
|
||
and be described in user-relevant language.
|
||
Library-user-impacting commits, eg API changes, ideally will also
|
||
be called out, and can described in more technical language.
|
||
Commits affecting hledger internals are less important,
|
||
but you may notice some adhoc conventions if you browse the history.
|
||
In particular, you can optionally prefix the summary with short component codes (cf [Issues](#issues))
|
||
to facilitate history reading and changelog/release note production.
|
||
|
||
Rewrite and force-push your commits freely (rebase -i, push -f) to clean them up.
|
||
Unless we decide to squash the PR into one commit,
|
||
your commits will become part of hledger's history "for all time",
|
||
so think about future developers trying to understand them, git bisect, etc.
|
||
|
||
Rebase your commits against latest master for easiest review. Especially if they start to conflict.
|
||
|
||
We like to use some conventions in commit messages when it makes sense. These aren't mandatory, but appreciated:
|
||
|
||
- prepend a [topic](#topics) prefix, eg `cli: ` or `journal: `, for clarity and to help with changelog production
|
||
- prepend a semicolon (`;`) to indicate commits that need not be mentioned in changelogs/release notes (as in the Emacs project)
|
||
- append a final `[ci skip]` line to indicate commits that need not trigger a CI build, to reduce carbon emissions from Travis.
|
||
|
||
## The docs
|
||
|
||
PRs should include appropriate updates to reference documentation, unless otherwise agreed.
|
||
Typically this means the manual source files (hledger*/hledger*.m4.md).
|
||
It can also involve
|
||
command line option names and descriptions,
|
||
other --help output,
|
||
hledger's commands list,
|
||
hledger-ui's help dialog,
|
||
hledger-web's help dialog,
|
||
etc.
|
||
Sometimes it means the developer docs, at least the ones in the main repo (READMEs).
|
||
|
||
Reviewers can understand your PR more efficiently once proposed doc changes are provided, and may postpone it otherwise.
|
||
We are happy to help with the docs if needed - just ask.
|
||
|
||
Updating rendered manuals (hledger.{1,info,txt,md,html}) is not required, and probably best avoided to reduce conflicts.
|
||
Updating other docs such as tutorials, how-tos, examples, or screenshots is not required,
|
||
though it's welcome (may be in a different repo).
|
||
|
||
## Documentation first
|
||
|
||
hledger follows documentation-driven design.
|
||
It is in fact highly effective, and highly recommended,
|
||
to write the new docs (help text/user manual/haddocks/developer README..) before writing any code.
|
||
You can share a rough draft on IRC, on the mail list, in an issue comment,
|
||
or in a "WIP" PR starting with just the proposed docs commit.
|
||
|
||
This is often the quickest road to getting something merged into hledger.
|
||
hledger's many parts interact in surprisingly complex ways.
|
||
The documentation-driven working style lets us discuss, clarify and reach a good-enough consensus economically,
|
||
after which coding/review/acceptance can go quicker.
|
||
<!--
|
||
changes can impact past and future users,
|
||
ease of contribution,
|
||
long-term maintenance costs,
|
||
product architecture,
|
||
compatibility with the larger plain text accounting ecosystem,
|
||
etc.
|
||
-->
|
||
|
||
## Related ideas
|
||
|
||
[Neil Mitchell’s Blog - The One PR Per Day Rule](https://neilmitchell.blogspot.com/2019/06/the-one-pr-per-day-rule.html)
|
||
|
||
|