From 9dc3e4578c39fd4767cdc6612f53ea31b7f91d8a Mon Sep 17 00:00:00 2001 From: Dan Church Date: Thu, 29 Jun 2023 12:57:15 -0500 Subject: [PATCH 1/3] Re-write squasher Add ability to skip over sections (ignore) vs. completely remove them (remove). --- Directory/Simplify/FileHash.pm | 4 +-- .../Simplify/Instruction/CopyTimestamp.pm | 4 +-- Directory/Simplify/Instruction/Generator.pm | 4 +-- Directory/Simplify/Instruction/Hardlink.pm | 4 +-- simplify_static_dir-main.pl | 4 +-- util/squash | 34 +++++++++++++++---- 6 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Directory/Simplify/FileHash.pm b/Directory/Simplify/FileHash.pm index 1e8db4f..54a0eb8 100644 --- a/Directory/Simplify/FileHash.pm +++ b/Directory/Simplify/FileHash.pm @@ -8,9 +8,9 @@ Object for abstracting management of a hashed filesystem =cut -# :squash-ignore-start: +# :squash-remove-start: require Directory::Simplify::File; -# :squash-ignore-end: +# :squash-remove-end: sub new { my $class = shift; diff --git a/Directory/Simplify/Instruction/CopyTimestamp.pm b/Directory/Simplify/Instruction/CopyTimestamp.pm index 491a4f4..fba95c9 100644 --- a/Directory/Simplify/Instruction/CopyTimestamp.pm +++ b/Directory/Simplify/Instruction/CopyTimestamp.pm @@ -4,9 +4,9 @@ use strict; use warnings; use overload '""' => 'as_string'; -# :squash-ignore-start: +# :squash-remove-start: require Directory::Simplify::Utils; -# :squash-ignore-end: +# :squash-remove-end: sub new { my $class = shift; diff --git a/Directory/Simplify/Instruction/Generator.pm b/Directory/Simplify/Instruction/Generator.pm index 3567d05..d2bab1b 100644 --- a/Directory/Simplify/Instruction/Generator.pm +++ b/Directory/Simplify/Instruction/Generator.pm @@ -6,10 +6,10 @@ use overload '""' => 'as_string'; use File::Basename qw/ dirname /; use File::Compare qw/ compare /; -# :squash-ignore-start: +# :squash-remove-start: require Directory::Simplify::Instruction::CopyTimestamp; require Directory::Simplify::Instruction::Hardlink; -# :squash-ignore-end: +# :squash-remove-end: sub new { my $class = shift; diff --git a/Directory/Simplify/Instruction/Hardlink.pm b/Directory/Simplify/Instruction/Hardlink.pm index 9a7e7c0..24d274e 100644 --- a/Directory/Simplify/Instruction/Hardlink.pm +++ b/Directory/Simplify/Instruction/Hardlink.pm @@ -4,9 +4,9 @@ use strict; use warnings; use overload '""' => 'as_string'; -# :squash-ignore-start: +# :squash-remove-start: require Directory::Simplify::Utils; -# :squash-ignore-end: +# :squash-remove-end: sub new { my $class = shift; diff --git a/simplify_static_dir-main.pl b/simplify_static_dir-main.pl index e69e39a..6e1522d 100755 --- a/simplify_static_dir-main.pl +++ b/simplify_static_dir-main.pl @@ -104,7 +104,7 @@ use File::Find qw/ find /; use Getopt::Std qw/ getopts /; use Pod::Usage qw/ pod2usage /; -# :squash-ignore-start: +# :squash-remove-start: # (this prepends to the load path) use FindBin qw//; use lib $FindBin::RealBin; @@ -113,7 +113,7 @@ require Directory::Simplify::File; require Directory::Simplify::FileHash; require Directory::Simplify::Instruction::Generator; require Directory::Simplify::Utils; -# :squash-ignore-end: +# :squash-remove-end: sub HELP_MESSAGE { my $fh = shift; diff --git a/util/squash b/util/squash index 3403c19..f46e2f8 100755 --- a/util/squash +++ b/util/squash @@ -18,17 +18,35 @@ for my $arg (@ARGV) { warn "Reading $filename\n"; open my $fh, '<', $filename or die "Can't open $filename: $!"; my $in_pod = 0; - my $in_ignore_section = 0; + my $in_section = ''; + my $ignore_lines = 0; while (<$fh>) { if (/#.*:squash-ignore-start:$/) { - $in_ignore_section = 1; - next; + $in_section = 'ignore'; + $ignore_lines = 1; } elsif (/#.*:squash-ignore-end:$/) { - $in_ignore_section = 0; + $in_section = ''; + $ignore_lines = 1; + } + if ($ignore_lines > 0) { + $ignore_lines--; next; } - next if $in_ignore_section; - next if /#.*:squash-ignore-line:$/; + + if ($in_section eq 'ignore') { + $code .= $_; + next; + } + + if (/#.*:squash-remove-start:$/) { + $in_section = 'remove'; + next; + } elsif (/#.*:squash-remove-end:$/) { + $in_section = ''; + next; + } + next if $in_section eq 'remove'; + next if /#.*:squash-remove-line:$/; next if /^\s*1;$/; @@ -49,6 +67,10 @@ for my $arg (@ARGV) { s{\s*##.+critic.*}{}; $code .= $_; } + + # Warn if there were unterminated :squash-*: sections + warn "$filename: Unterminated :squash-$in_section-start: section" if $in_section; + close $fh; } From 4d4edd5e9d6198b3ee96fe9dc96654e26d32d1a7 Mon Sep 17 00:00:00 2001 From: Dan Church Date: Thu, 29 Jun 2023 12:59:27 -0500 Subject: [PATCH 2/3] Move library code to lib/ Fixes accidental inclusion of test instrumentation into the all-in-one script. --- {Directory => lib/Directory}/Simplify/File.pm | 0 {Directory => lib/Directory}/Simplify/FileHash.pm | 0 .../Directory}/Simplify/Instruction/CopyTimestamp.pm | 0 {Directory => lib/Directory}/Simplify/Instruction/Generator.pm | 0 {Directory => lib/Directory}/Simplify/Instruction/Hardlink.pm | 0 {Directory => lib/Directory}/Simplify/Utils.pm | 0 make-allinone.sh | 2 +- simplify_static_dir-main.pl | 2 +- 8 files changed, 2 insertions(+), 2 deletions(-) rename {Directory => lib/Directory}/Simplify/File.pm (100%) rename {Directory => lib/Directory}/Simplify/FileHash.pm (100%) rename {Directory => lib/Directory}/Simplify/Instruction/CopyTimestamp.pm (100%) rename {Directory => lib/Directory}/Simplify/Instruction/Generator.pm (100%) rename {Directory => lib/Directory}/Simplify/Instruction/Hardlink.pm (100%) rename {Directory => lib/Directory}/Simplify/Utils.pm (100%) diff --git a/Directory/Simplify/File.pm b/lib/Directory/Simplify/File.pm similarity index 100% rename from Directory/Simplify/File.pm rename to lib/Directory/Simplify/File.pm diff --git a/Directory/Simplify/FileHash.pm b/lib/Directory/Simplify/FileHash.pm similarity index 100% rename from Directory/Simplify/FileHash.pm rename to lib/Directory/Simplify/FileHash.pm diff --git a/Directory/Simplify/Instruction/CopyTimestamp.pm b/lib/Directory/Simplify/Instruction/CopyTimestamp.pm similarity index 100% rename from Directory/Simplify/Instruction/CopyTimestamp.pm rename to lib/Directory/Simplify/Instruction/CopyTimestamp.pm diff --git a/Directory/Simplify/Instruction/Generator.pm b/lib/Directory/Simplify/Instruction/Generator.pm similarity index 100% rename from Directory/Simplify/Instruction/Generator.pm rename to lib/Directory/Simplify/Instruction/Generator.pm diff --git a/Directory/Simplify/Instruction/Hardlink.pm b/lib/Directory/Simplify/Instruction/Hardlink.pm similarity index 100% rename from Directory/Simplify/Instruction/Hardlink.pm rename to lib/Directory/Simplify/Instruction/Hardlink.pm diff --git a/Directory/Simplify/Utils.pm b/lib/Directory/Simplify/Utils.pm similarity index 100% rename from Directory/Simplify/Utils.pm rename to lib/Directory/Simplify/Utils.pm diff --git a/make-allinone.sh b/make-allinone.sh index 5f201d9..6bbaa4d 100755 --- a/make-allinone.sh +++ b/make-allinone.sh @@ -8,6 +8,6 @@ echo "Outputting to $OUT" >&2 shopt -s globstar "$WORKDIR/util/squash" \ "$WORKDIR/simplify_static_dir-main.pl" \ - "$WORKDIR"/**/*.pm \ + "$WORKDIR"/lib/**/*.pm \ > "$OUT" chmod +x -- "$OUT" diff --git a/simplify_static_dir-main.pl b/simplify_static_dir-main.pl index 6e1522d..78ecfe4 100755 --- a/simplify_static_dir-main.pl +++ b/simplify_static_dir-main.pl @@ -107,7 +107,7 @@ use Pod::Usage qw/ pod2usage /; # :squash-remove-start: # (this prepends to the load path) use FindBin qw//; -use lib $FindBin::RealBin; +use lib "$FindBin::RealBin/lib"; require Directory::Simplify::File; require Directory::Simplify::FileHash; From a26764fd2f61ffa32824c7f09dfac78d8a37b6de Mon Sep 17 00:00:00 2001 From: Dan Church Date: Thu, 29 Jun 2023 13:28:03 -0500 Subject: [PATCH 3/3] Fix squasher stripping repeated newlines in ignored sections --- util/squash | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/util/squash b/util/squash index f46e2f8..a015533 100755 --- a/util/squash +++ b/util/squash @@ -20,6 +20,7 @@ for my $arg (@ARGV) { my $in_pod = 0; my $in_section = ''; my $ignore_lines = 0; + my $empty_lines = 0; while (<$fh>) { if (/#.*:squash-ignore-start:$/) { $in_section = 'ignore'; @@ -34,10 +35,22 @@ for my $arg (@ARGV) { } if ($in_section eq 'ignore') { + $empty_lines = 0 unless /^$/; $code .= $_; next; } + # Remove repeated newlines between paragraphs + # (Provided of course we're not in an 'ignore' section) + if (/^$/) { + ++$empty_lines; + if ($empty_lines > 1) { + next; + } + } else { + $empty_lines = 0; + } + if (/#.*:squash-remove-start:$/) { $in_section = 'remove'; next; @@ -74,9 +87,6 @@ for my $arg (@ARGV) { close $fh; } -# Remove repeated newlines between paragraphs -$code =~ s/\n\n+/\n\n/gs; - print $code; exit 0;