From dab07e8c6896df3129bc153ead1f107e695652ee Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Sun, 12 Feb 2023 08:43:44 -0500 Subject: [PATCH] pgindent: filter files for the --commit option per gripe from Shi Yu, solution from Jelte Fennema Also add a check that the file exists, and issue a warning if it doesn't. As an efficiency measure, avoid processing any file more than once. Discussion: https://postgr.es/m/TYAPR01MB6315B86619944D4A6B56842DFDDE9@TYAPR01MB6315.jpnprd01.prod.outlook.com --- src/tools/pgindent/pgindent | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent index 07970f758c..a793971e07 100755 --- a/src/tools/pgindent/pgindent +++ b/src/tools/pgindent/pgindent @@ -444,7 +444,7 @@ File::Find::find({wanted => $wanted}, @ARGV) if @ARGV; foreach my $commit (@commits) { my $prev="$commit~"; - my @affected=`git diff-tree --no-commit-id --name-only -r $commit $prev`; + my @affected=`git diff --diff-filter=ACMR --name-only $prev $commit`; die "git error" if $?; chomp(@affected); push(@files,@affected); @@ -453,11 +453,23 @@ foreach my $commit (@commits) # remove excluded files from the file list process_exclude(); +my %processed; + foreach my $source_filename (@files) { + # skip duplicates + next if $processed{$source_filename}; + $processed{$source_filename} = 1; + # ignore anything that's not a .c or .h file next unless $source_filename =~ /\.[ch]$/; + # don't try to indent a file that doesn't exist + unless (-f $source_filename) + { + warn "Could not find $source_filename"; + next; + } # Automatically ignore .c and .h files that correspond to a .y or .l # file. indent tends to get badly confused by Bison/flex output, # and there's no value in indenting derived files anyway.