Rename pgindent options
authorAndrew Dunstan <andrew@dunslane.net>
Wed, 20 Dec 2023 22:28:57 +0000 (22:28 +0000)
committerAndrew Dunstan <andrew@dunslane.net>
Wed, 20 Dec 2023 22:37:57 +0000 (22:37 +0000)
--show-diff becomes --diff, and --silent-diff becomes --check. These
options may now be given together. Without --check, --diff will exit
with a zero status even if diffs are found. With --check, it will now
exit with a non-zero status in that case.

Author: Tristan Partin
Reviewed-by: Daniel Gustafsson, Jelte Fennema-Nio
Discussion: https://postgr.es/m/CXLX2XYTH9S6.140SC6Y61VD88@neon.tech

src/tools/pgindent/pgindent
src/tools/pgindent/pgindent.man

index bce63d95daf629e802ed2c5f33279db19cbcde86..37f38eefc3e3f7d85588f93a8ccb0b1deda13102 100755 (executable)
@@ -22,8 +22,8 @@ my $indent_opts =
 my $devnull = File::Spec->devnull;
 
 my ($typedefs_file, $typedef_str, @excludes,
-       $indent, $build, $show_diff,
-       $silent_diff, $help, @commits,);
+       $indent, $build, $diff,
+       $check, $help, @commits,);
 
 $help = 0;
 
@@ -34,15 +34,12 @@ my %options = (
        "list-of-typedefs=s" => \$typedef_str,
        "excludes=s" => \@excludes,
        "indent=s" => \$indent,
-       "show-diff" => \$show_diff,
-       "silent-diff" => \$silent_diff,);
+       "diff" => \$diff,
+       "check" => \$check,);
 GetOptions(%options) || usage("bad command line argument");
 
 usage() if $help;
 
-usage("Cannot have both --silent-diff and --show-diff")
-  if $silent_diff && $show_diff;
-
 usage("Cannot use --commit with command line file list")
   if (@commits && @ARGV);
 
@@ -294,7 +291,7 @@ sub run_indent
        return $source;
 }
 
-sub show_diff
+sub diff
 {
        my $indented = shift;
        my $source_filename = shift;
@@ -323,8 +320,8 @@ Options:
        --list-of-typedefs=STR  string containing typedefs, space separated
        --excludes=PATH         file containing list of filename patterns to ignore
        --indent=PATH           path to pg_bsd_indent program
-       --show-diff             show the changes that would be made
-       --silent-diff           exit with status 2 if any changes would be made
+       --diff                  show the changes that would be made
+       --check                 exit with status 2 if any changes would be made
 The --excludes and --commit options can be given more than once.
 EOF
        if ($help)
@@ -375,6 +372,7 @@ warn "No files to process" unless @files;
 process_exclude();
 
 my %processed;
+my $status = 0;
 
 foreach my $source_filename (@files)
 {
@@ -417,19 +415,24 @@ foreach my $source_filename (@files)
 
        if ($source ne $orig_source)
        {
-               if ($silent_diff)
-               {
-                       exit 2;
-               }
-               elsif ($show_diff)
+               if (!$diff && !$check)
                {
-                       print show_diff($source, $source_filename);
+                       write_source($source, $source_filename);
                }
                else
                {
-                       write_source($source, $source_filename);
+                       if ($diff)
+                       {
+                               print diff($source, $source_filename);
+                       }
+
+                       if ($check)
+                       {
+                               $status = 2;
+                               last unless $diff;
+                       }
                }
        }
 }
 
-exit 0;
+exit $status;
index fe411ee699c1f9801cf58e7d92d8556c72e41ed1..caab5cde914070272b5e0e6f7e449259e7758c20 100644 (file)
@@ -31,13 +31,13 @@ find the file src/tools/pgindent/exclude_file_patterns. The --excludes option
 can be used more than once to specify multiple files containing exclusion
 patterns.
 
-There are also two non-destructive modes of pgindent. If given the --show-diff
+There are also two non-destructive modes of pgindent. If given the --diff
 option pgindent will show the changes it would make, but doesn't actually make
-them. If given instead the --silent-diff option, pgindent will exit with a
-status of 2 if it finds any indent changes are required, but will not
-make the changes or give any other information. This mode is intended for
-possible use in a git pre-commit hook. An example of its use in a git hook
-can be seen at https://wiki.postgresql.org/wiki/Working_with_Git#Using_git_hooks
+them. If given instead the --check option, pgindent will exit with a status of
+2 if it finds any indent changes are required, but will not make the changes.
+This mode is intended for possible use in a git pre-commit hook. The --check
+and --diff options can be combined. An example of its use in a git hook can be
+seen at https://wiki.postgresql.org/wiki/Working_with_Git#Using_git_hooks
 
 Any non-option arguments are taken as the names of files to be indented. In this
 case only these files will be changed, and nothing else will be touched.