Re: pgindent exit status if a file encounters an error

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: pgindent exit status if a file encounters an error
Date: 2024-06-26 11:23:39
Message-ID: 07e50709-86af-4d14-8255-ca0e9cb80abe@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
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(at)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(at)2424: Stuff
> missing from end of file
>
> Failure in ./src/backend/optimizer/util/appendinfo.c: Error(at)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tomas Vondra 2024-06-26 11:27:17 Re: long-standing data loss bug in initial sync of logical replication
Previous Message Dean Rasheed 2024-06-26 11:18:16 Re: Adding OLD/NEW support to RETURNING