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 96% rename from Directory/Simplify/FileHash.pm rename to lib/Directory/Simplify/FileHash.pm index 1e8db4f..54a0eb8 100644 --- a/Directory/Simplify/FileHash.pm +++ b/lib/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/lib/Directory/Simplify/Instruction/CopyTimestamp.pm similarity index 93% rename from Directory/Simplify/Instruction/CopyTimestamp.pm rename to lib/Directory/Simplify/Instruction/CopyTimestamp.pm index 491a4f4..fba95c9 100644 --- a/Directory/Simplify/Instruction/CopyTimestamp.pm +++ b/lib/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/lib/Directory/Simplify/Instruction/Generator.pm similarity index 99% rename from Directory/Simplify/Instruction/Generator.pm rename to lib/Directory/Simplify/Instruction/Generator.pm index 3567d05..d2bab1b 100644 --- a/Directory/Simplify/Instruction/Generator.pm +++ b/lib/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/lib/Directory/Simplify/Instruction/Hardlink.pm similarity index 95% rename from Directory/Simplify/Instruction/Hardlink.pm rename to lib/Directory/Simplify/Instruction/Hardlink.pm index 9a7e7c0..24d274e 100644 --- a/Directory/Simplify/Instruction/Hardlink.pm +++ b/lib/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/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 e69e39a..78ecfe4 100755 --- a/simplify_static_dir-main.pl +++ b/simplify_static_dir-main.pl @@ -104,16 +104,16 @@ 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; +use lib "$FindBin::RealBin/lib"; 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..a015533 100755 --- a/util/squash +++ b/util/squash @@ -18,17 +18,48 @@ 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; + my $empty_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') { + $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; + } elsif (/#.*:squash-remove-end:$/) { + $in_section = ''; + next; + } + next if $in_section eq 'remove'; + next if /#.*:squash-remove-line:$/; next if /^\s*1;$/; @@ -49,12 +80,13 @@ 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; } -# Remove repeated newlines between paragraphs -$code =~ s/\n\n+/\n\n/gs; - print $code; exit 0;