Re: run pgindent on a regular basis / scripted manner
Magnus Hagander <magnus@hagander.net>
On Thu, Aug 13, 2020 at 6:08 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > Noah Misch <noah@leadboat.com> writes: > > On Wed, Aug 12, 2020 at 07:47:01PM -0400, Tom Lane wrote: > >> If the workflow is commit first and re-indent later, then we can always > >> revert the pgindent commit and clean things up manually; but an auto > >> re-indent during commit wouldn't provide that history. > > > There are competing implementations of assuring pgindent-cleanliness at > every > > check-in: > > > 1. After each push, an automated followup commit appears, restoring > > pgindent-cleanliness. > > 2. "git push" results in a commit that melds pgindent changes into what > the > > committer tried to push. > > 3. "git push" fails, for the master branch, if the pushed commit disrupts > > pgindent-cleanliness. > There's another option here as well, that is a bit "softer", is to use a pre-commit hook. That is, it's a hook that runs on the committers machine prior to the commit. This hook can then yell "hey, you need to run pgindent before committing this", but it gives the committer the ability to do --no-verify and commit anyway (thus won't block things that are urgent). Since it allows a simple bypass, and very much relies on the committer to remember to install the hook in their local repository, this is not a guarantee in any way. So it might need to be done together with something else in the background doing like a daily job or so, but it might make that background work be smaller and fewer changes. This obviously only works in the case where we can rely on the committers to remember to install such a hook, but given the few committers that we do have, I think we can certainly get that up to an "acceptable rate" fairly easily. FWIW, this is similar to what we do in the pgweb, pgeu and a few other repositories, to ensure python styleguides are followed. > Were you thinking of (2)? > > I was objecting to (2). (1) would perhaps work. (3) could be pretty > darn annoying, especially if it blocks a time-critical security patch. > FWIW, I agree that (2) seems like a really bad option. In that suddenly a committer has committed something they were not aware of. > > > Regarding typedefs.list, I would use the in-tree one, like you discussed > here: > > Yeah, after thinking about that more, it seems like automated > typedefs.list updates would be far riskier than automated reindent > based on the existing typedefs.list. The latter could at least be > expected not to change code unrelated to the immediate commit. > typedefs.list updates need some amount of adult supervision. > > (I'd still vote for nag-mail to the committer whose work got reindented, > in case the bot made things a lot worse.) > Yeah, I'm definitely not a big fan of automated commits, regardless of if it's just indent or both indent+typedef. It's happened at least once, and I think more than once, that we've had to basically hard reset the upstream repository and clean things up after automated commits have gone bonkers (hi, Bruce!). Having an automated system do the whole flow of change->commit->push definitely invites this type of problem. There are many solutions that do such things but that do it in the "github workflow" way, which is they do change -> commit -> create pull request, and then somebody eyeballs that pullrequest and approves it. We don't have PRs, but we could either have a script that simply sends out a patch to a mailinglist, or we could have a script that maintains a separate branch which is auto-pgindented, and then have a committer squash-merge that branch after having reviewed it. Maybe something like that in combination with a pre-commit hook per above. -- Magnus Hagander Me: https://www.hagander.net/ <http://www.hagander.net/> Work: https://www.redpill-linpro.com/ <http://www.redpill-linpro.com/>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix comment from commit 22655aa231.
- 01529c704008 17.0 cited
-
Add a few recent commits to .git-blame-ignore-revs.
- 0df7d1da40e3 17.0 landed
-
Pre-beta2 mechanical code beautification.
- b334612b8aee 16.0 landed
-
Pre-beta mechanical code beautification.
- 0245f8db36f3 16.0 landed
-
Make agreed-on updates in perltidy options.
- df6b19fbbc20 16.0 landed
-
Remove obsolete pgindent options --code-base and --build
- b16259b3c189 16.0 landed
-
Integrate pg_bsd_indent into our build/test infrastructure.
- 156c049beed9 16.0 landed
-
Sync pg_bsd_indent's copyright notices with Postgres practice.
- b44e5fced3e5 16.0 landed
-
Import pg_bsd_indent sources.
- 4e831f4cee14 16.0 landed
-
pgindent: filter files for the --commit option
- dab07e8c6896 16.0 landed
-
pgindent: more ways to find files to indent
- 068a243b7771 16.0 landed
-
Fix pgindent --show-diff option.
- 62e1e28bf769 16.0 cited
-
Add non-destructive modes to pgindent
- b90f0b57474e 16.0 landed
-
Initial pgindent run with pg_bsd_indent version 2.0.
- e3860ffa4dd0 10.0 cited