Re: pgindent exit status if a file encounters an error
Andrew Dunstan <andrew@dunslane.net>
From: Andrew Dunstan <andrew@dunslane.net>
To: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-06-26T11:23:39Z
Lists: pgsql-hackers
On 2024-06-26 We 6:37 AM, Ashutosh Bapat wrote: > Hi All, > > If pgindent encounters an error while applying pg_bsd_indent on a > file, it reports an error to stderr but does not exit with non-zero > status. > > $ src/tools/pgindent/pgindent . > Failure in ./src/backend/optimizer/util/relnode.c: Error@2412: Stuff > missing from end of file > > $ echo $? > 0 > > A zero status usually indicates success [1]. In that sense pgindent > shouldn't be returning 0 in this case. It has not been able to process > file/s successfully. Not returning non-zero exit status in such cases > means we can not rely on `set -e` or `git rebase` s automatic > detection of command failures. I propose to add non-zero exit status > in the above case. > > In the attached patch I have used exit code 3 for file processing > errors. The program exits only after reporting all such errors instead > of exiting on the first instance. That way we get to know all the > errors upfront. But I am ok if we want to exit on the first instance. > That might simplify its interaction with other exit codes. > > With this change, if I run pgident in `git rebase` it stops after > those errors automatically like below > ``` > Executing: src/tools/pgindent/pgindent . > Failure in ./src/backend/optimizer/util/relnode.c: Error@2424: Stuff > missing from end of file > > Failure in ./src/backend/optimizer/util/appendinfo.c: Error@1028: > Stuff missing from end of file > > warning: execution failed: src/tools/pgindent/pgindent . > You can fix the problem, and then run > > git rebase --continue > ``` > > I looked at pgindent README but it doesn't mention anything about exit > codes. So I believe this change is acceptable as per documentation. > > With --check option pgindent reports a non-zero exit code instead of > making changes. So I feel the above change should happen at least if > --check is provided. But certainly better if we do it even without > --check. > > In case --check is specified and both the following happen a. > pg_bsd_indent exits with non-zero status while processing some file > and b. changes are produced while processing some other file, the > program will exit with status 2. It may be argued that instead it > should exit with code 3. I am open to both. Yeah, I think this is reasonable but we should adjust the status setting a few lines lower to $status ||= 2; cheers andrew -- Andrew Dunstan EDB:https://www.enterprisedb.com
Commits
-
Set exit status for pgindent if pg_bsd_indent fails
- b20fe54c9c21 18.0 landed