pgindent_silent_plus_showdiff-2.patch
text/x-patch
Filename: pgindent_silent_plus_showdiff-2.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/tools/pgindent/pgindent | 34 | 20 |
diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent
index 741b0ccb58..af0ddd1944 100755
--- a/src/tools/pgindent/pgindent
+++ b/src/tools/pgindent/pgindent
@@ -21,7 +21,8 @@ my $indent_opts =
my $devnull = File::Spec->devnull;
-my ($typedefs_file, $typedef_str, $code_base, $excludes, $indent, $build);
+my ($typedefs_file, $typedef_str, $code_base, $excludes, $indent, $build,
+ $show_diff, $silent_diff);
my %options = (
"typedefs=s" => \$typedefs_file,
@@ -29,9 +30,14 @@ my %options = (
"code-base=s" => \$code_base,
"excludes=s" => \$excludes,
"indent=s" => \$indent,
- "build" => \$build,);
+ "build" => \$build,
+ "show-diff" => \$show_diff,
+ "silent_diff" => \$silent_diff,);
GetOptions(%options) || die "bad command line argument\n";
+die "Cannot have both --silent-diff and --show-diff"
+ if $silent_diff && $show_diff;
+
run_build($code_base) if ($build);
# command line option wins, then first non-option arg,
@@ -283,30 +289,19 @@ sub run_indent
}
-
-# for development diagnostics
-sub diff
+sub show_diff
{
- my $pre = shift;
- my $post = shift;
- my $flags = shift || "";
+ my $indented = shift;
+ my $source_filename = shift;
- print STDERR "running diff\n";
-
- my $pre_fh = new File::Temp(TEMPLATE => "pgdiffbXXXXX");
my $post_fh = new File::Temp(TEMPLATE => "pgdiffaXXXXX");
- print $pre_fh $pre;
- print $post_fh $post;
+ print $post_fh $indented;
- $pre_fh->close();
$post_fh->close();
- system( "diff $flags "
- . $pre_fh->filename . " "
- . $post_fh->filename
- . " >&2");
- return;
+ my $diff = `diff -u $source_filename $post_fh->filename 2>&1`;
+ return $diff;
}
@@ -404,6 +399,8 @@ push(@files, @ARGV);
foreach my $source_filename (@files)
{
+ # ignore anything that's not a .c or .h file
+ next unless $source_filename =~/\.[ch]$/;
# Automatically ignore .c and .h files that correspond to a .y or .l
# file. indent tends to get badly confused by Bison/flex output,
@@ -429,7 +426,24 @@ foreach my $source_filename (@files)
$source = post_indent($source, $source_filename);
- write_source($source, $source_filename) if $source ne $orig_source;
+ if ($source ne $orig_source)
+ {
+ if ($silent_diff)
+ {
+ exit 2;
+ }
+ elsif ($show_diff)
+ {
+ print show_diff($source, $source_filename);
+ }
+ else
+ {
+ write_source($source, $source_filename);
+ }
+ }
+
}
build_clean($code_base) if $build;
+
+exit 0;