Re-write squasher

Add ability to skip over sections (ignore) vs. completely remove them
(remove).
This commit is contained in:
Dan Church 2023-06-29 12:57:15 -05:00
parent 1582920286
commit 9dc3e4578c
Signed by: h3xx
GPG key ID: EA2BF379CD2CDBD0
6 changed files with 38 additions and 16 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
}