diff --git a/Makefile.PL b/Makefile.PL index facf9eeb7..78d2d13ce 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -70,6 +70,7 @@ my %WriteMakefileArgs = ( "File::ShareDir" => 0, "File::Spec" => 0, "File::Temp" => 0, + "Getopt::Yath" => "2.000007", "HTTP::Tiny" => 0, "HTTP::Tiny::Multipart" => 0, "HTTP::Tiny::UNIX" => 0, @@ -149,7 +150,7 @@ my %WriteMakefileArgs = ( }, "VERSION" => "2.000007", "test" => { - "TESTS" => "t/*.t t/JUnit/*.t t/UI/*.t t/acceptence/*.t t/database/*.t t/integration/*.t t/integration/signals/*.t t/unit/App/*.t t/unit/App/Yath/*.t t/unit/App/Yath/Command/*.t t/unit/App/Yath/Command/client/*.t t/unit/App/Yath/Command/db/*.t t/unit/App/Yath/Options/*.t t/unit/App/Yath/Plugin/*.t t/unit/App/Yath/Renderer/*.t t/unit/App/Yath/Renderer/Default/*.t t/unit/App/Yath/Resource/*.t t/unit/App/Yath/Resource/SharedJobSlots/*.t t/unit/App/Yath/Schema/*.t t/unit/App/Yath/Schema/MariaDB/*.t t/unit/App/Yath/Schema/MySQL/*.t t/unit/App/Yath/Schema/Overlay/*.t t/unit/App/Yath/Schema/Percona/*.t t/unit/App/Yath/Schema/PostgreSQL/*.t t/unit/App/Yath/Schema/Result/*.t t/unit/App/Yath/Schema/SQLite/*.t t/unit/App/Yath/Server/*.t t/unit/App/Yath/Server/Controller/*.t t/unit/App/Yath/Server/Util/*.t t/unit/App/Yath/Theme/*.t t/unit/Getopt/Yath/*.t t/unit/Getopt/Yath/Option/*.t t/unit/Getopt/Yath/Settings/*.t t/unit/TAP/Harness/*.t t/unit/TAP/Harness/Yath/*.t t/unit/Test2/*.t t/unit/Test2/EventFacet/*.t t/unit/Test2/Formatter/*.t t/unit/Test2/Harness/*.t t/unit/Test2/Harness/Collector/*.t t/unit/Test2/Harness/Collector/Auditor/*.t t/unit/Test2/Harness/Collector/IOParser/*.t t/unit/Test2/Harness/IPC/*.t t/unit/Test2/Harness/IPC/Protocol/*.t t/unit/Test2/Harness/IPC/Protocol/AtomicPipe/*.t t/unit/Test2/Harness/IPC/Protocol/IPSocket/*.t t/unit/Test2/Harness/IPC/Protocol/UnixSocket/*.t t/unit/Test2/Harness/Instance/*.t t/unit/Test2/Harness/Log/*.t t/unit/Test2/Harness/Log/CoverageAggregator/*.t t/unit/Test2/Harness/Preload/*.t t/unit/Test2/Harness/Reloader/*.t t/unit/Test2/Harness/Resource/*.t t/unit/Test2/Harness/Run/*.t t/unit/Test2/Harness/Runner/*.t t/unit/Test2/Harness/Runner/Preloading/*.t t/unit/Test2/Harness/Scheduler/*.t t/unit/Test2/Harness/Util/*.t t/unit/Test2/Harness/Util/File/*.t t/unit/Test2/Tools/*.t" + "TESTS" => "t/*.t t/JUnit/*.t t/UI/*.t t/acceptence/*.t t/database/*.t t/integration/*.t t/integration/signals/*.t t/unit/App/*.t t/unit/App/Yath/*.t t/unit/App/Yath/Command/*.t t/unit/App/Yath/Command/client/*.t t/unit/App/Yath/Command/db/*.t t/unit/App/Yath/Options/*.t t/unit/App/Yath/Plugin/*.t t/unit/App/Yath/Renderer/*.t t/unit/App/Yath/Renderer/Default/*.t t/unit/App/Yath/Resource/*.t t/unit/App/Yath/Resource/SharedJobSlots/*.t t/unit/App/Yath/Schema/*.t t/unit/App/Yath/Schema/MariaDB/*.t t/unit/App/Yath/Schema/MySQL/*.t t/unit/App/Yath/Schema/Overlay/*.t t/unit/App/Yath/Schema/Percona/*.t t/unit/App/Yath/Schema/PostgreSQL/*.t t/unit/App/Yath/Schema/Result/*.t t/unit/App/Yath/Schema/SQLite/*.t t/unit/App/Yath/Server/*.t t/unit/App/Yath/Server/Controller/*.t t/unit/App/Yath/Server/Util/*.t t/unit/App/Yath/Theme/*.t t/unit/TAP/Harness/*.t t/unit/TAP/Harness/Yath/*.t t/unit/Test2/*.t t/unit/Test2/EventFacet/*.t t/unit/Test2/Formatter/*.t t/unit/Test2/Harness/*.t t/unit/Test2/Harness/Collector/*.t t/unit/Test2/Harness/Collector/Auditor/*.t t/unit/Test2/Harness/Collector/IOParser/*.t t/unit/Test2/Harness/IPC/*.t t/unit/Test2/Harness/IPC/Protocol/*.t t/unit/Test2/Harness/IPC/Protocol/AtomicPipe/*.t t/unit/Test2/Harness/IPC/Protocol/IPSocket/*.t t/unit/Test2/Harness/IPC/Protocol/UnixSocket/*.t t/unit/Test2/Harness/Instance/*.t t/unit/Test2/Harness/Log/*.t t/unit/Test2/Harness/Log/CoverageAggregator/*.t t/unit/Test2/Harness/Preload/*.t t/unit/Test2/Harness/Reloader/*.t t/unit/Test2/Harness/Resource/*.t t/unit/Test2/Harness/Run/*.t t/unit/Test2/Harness/Runner/*.t t/unit/Test2/Harness/Runner/Preloading/*.t t/unit/Test2/Harness/Scheduler/*.t t/unit/Test2/Harness/Util/*.t t/unit/Test2/Harness/Util/File/*.t t/unit/Test2/Tools/*.t" } ); @@ -182,6 +183,7 @@ my %FallbackPrereqs = ( "File::ShareDir" => 0, "File::Spec" => 0, "File::Temp" => 0, + "Getopt::Yath" => "2.000007", "HTTP::Tiny" => 0, "HTTP::Tiny::Multipart" => 0, "HTTP::Tiny::UNIX" => 0, diff --git a/cpanfile b/cpanfile index 606331a7c..822248f68 100644 --- a/cpanfile +++ b/cpanfile @@ -27,6 +27,7 @@ requires "File::Path" => "2.11"; requires "File::ShareDir" => "0"; requires "File::Spec" => "0"; requires "File::Temp" => "0"; +requires "Getopt::Yath" => "2.000007"; requires "HTTP::Tiny" => "0"; requires "HTTP::Tiny::Multipart" => "0"; requires "HTTP::Tiny::UNIX" => "0"; diff --git a/lib/App/Yath/IPC.pm b/lib/App/Yath/IPC.pm index 01fda8836..1ff7dc416 100644 --- a/lib/App/Yath/IPC.pm +++ b/lib/App/Yath/IPC.pm @@ -46,7 +46,8 @@ sub dir { my $base = clean_path($settings->yath->base_dir); my $sha = sha1_hex($base); - $ipc_dir = File::Spec->catdir($settings->yath->orig_tmp, "yath-ipc-$ENV{USER}-$sha"); + my $tmp = $settings->maybe('yath', 'orig_tmp', File::Spec->tmpdir()); + $ipc_dir = File::Spec->catdir($tmp, "yath-ipc-$ENV{USER}-$sha"); make_path($ipc_dir) unless -e $ipc_dir; diff --git a/lib/Getopt/Yath/Option/BoolMap.pm b/lib/Getopt/Yath/Option/BoolMap.pm new file mode 100644 index 000000000..e02f9dc92 --- /dev/null +++ b/lib/Getopt/Yath/Option/BoolMap.pm @@ -0,0 +1,83 @@ +package Getopt::Yath::Option::BoolMap; +use strict; +use warnings; + +our $VERSION = '2.000007'; + +use Carp qw/croak/; + +use parent 'Getopt::Yath::Option::Map'; +use Test2::Harness::Util::HashBase qw/+pattern +requires_arg +custom_matches/; + +sub allows_list { 1 } +sub allows_default { 1 } +sub allows_arg { 1 } +sub allows_autofill { 0 } +sub requires_autofill { 0 } + +sub notes { (shift->SUPER::notes(), 'Can be specified multiple times') } + +sub requires_arg { $_[0]->{+REQUIRES_ARG} ? 1 : 0 } + +sub init { + my $self = shift; + $self->SUPER::init(@_); + + croak "A 'pattern' is required" unless $self->{+PATTERN}; + + return $self; +} + +sub no_arg_value { $_[0]->field, 1 } + +sub pattern { + my $self = shift; + + my $append = $self->{+PATTERN}; + return qr/^--(no-)?$append$/; +} + +sub default_long_examples { + my $self = shift; + my $out = $self->SUPER::default_long_examples(@_); + push @$out => $self->pattern; + return $out; +} + +sub default_short_examples { + my $self = shift; + my $out = $self->SUPER::default_short_examples(@_); + push @$out => $self->pattern; + return $out; +} + +sub custom_matches { + my $self = shift; + my $pattern = $self->pattern; + + return sub { + my ($input, $state) = @_; + + return $self->{+CUSTOM_MATCHES}->($self, @_) + if $self->{+CUSTOM_MATCHES}; + + return unless $input =~ $pattern; + my ($no, $key) = ($1, $2); + return ($self, 1, [$key => $no ? 0 : 1]); + }; +} + +sub doc_forms { + my $self = shift; + my %params = @_; + + my ($forms, $no_forms) = $self->SUPER::doc_forms(%params); + + my $inner = "" . $self->{+PATTERN}; + $inner =~ s{^\Q(?^:\E}{}; + $inner =~ s{\)$}{}; + + return ($forms, $no_forms, ["/^--(no-)?$inner\$/"]); +} + +1;