move all core use of "debug" to use "trace" instead (or almost all of them)
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Script / Server.pm
index 4e87191..4da0f0b 100644 (file)
@@ -1,9 +1,7 @@
 package Catalyst::Script::Server;
 use Moose;
-use MooseX::Types::Common::Numeric qw/PositiveInt/;
-use MooseX::Types::Moose qw/ArrayRef Str Bool Int RegexpRef/;
 use Catalyst::Utils;
-use Try::Tiny;
+use Class::Load qw(try_load_class load_class);
 use namespace::autoclean;
 
 with 'Catalyst::ScriptRole';
@@ -11,15 +9,23 @@ with 'Catalyst::ScriptRole';
 has debug => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'd',
-    isa           => Bool,
+    isa           => 'Bool',
     is            => 'ro',
     documentation => q{Force debug mode},
 );
 
+has trace => (
+    traits        => [qw(Getopt)],
+    cmd_aliases   => 'd',
+    isa           => 'Integer',
+    is            => 'ro',
+    documentation => q{Force trace mode},
+);
+
 has host => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'h',
-    isa           => Str,
+    isa           => 'Str',
     is            => 'ro',
     # N.B. undef (the default) means we bind on all interfaces on the host.
     documentation => 'Specify a hostname or IP on this host for the server to bind to',
@@ -28,7 +34,7 @@ has host => (
 has fork => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'f',
-    isa           => Bool,
+    isa           => 'Bool',
     is            => 'ro',
     default       => 0,
     documentation => 'Fork the server to be able to serve multiple requests at once',
@@ -37,7 +43,7 @@ has fork => (
 has port => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'p',
-    isa           => PositiveInt,
+    isa           => 'Int',
     is            => 'ro',
     default       => sub {
         Catalyst::Utils::env_value(shift->application_name, 'port') || 3000
@@ -50,12 +56,10 @@ class_type 'MooseX::Daemonize::Pid::File';
 subtype 'Catalyst::Script::Server::Types::Pidfile',
     as 'MooseX::Daemonize::Pid::File';
 
-coerce 'Catalyst::Script::Server::Types::Pidfile', from Str, via {
-    try { Class::MOP::load_class("MooseX::Daemonize::Pid::File") }
-    catch {
-        warn("Could not load MooseX::Daemonize::Pid::File, needed for --pid option\n");
-        exit 1;
-    };
+coerce 'Catalyst::Script::Server::Types::Pidfile', from 'Str', via {
+    my ($success, $error) = try_load_class("MooseX::Daemonize::Pid::File");
+    warn("Could not load MooseX::Daemonize::Pid::File, needed for --pid option: $error\n"),
+        exit 1 if not $success;
     MooseX::Daemonize::Pid::File->new( file => $_ );
 };
 MooseX::Getopt::OptionTypeMap->add_option_type_to_map(
@@ -71,24 +75,27 @@ has pidfile => (
     predicate     => '_has_pidfile',
 );
 
+# Override MooseX::Daemonize
+sub dont_close_all_files { 1 }
 sub BUILD {
     my $self = shift;
 
     if ($self->background) {
         # FIXME - This is evil. Should we just add MX::Daemonize to the deps?
-        try { Class::MOP::load_class('MooseX::Daemonize::Core') }
-        catch {
-            warn("MooseX::Daemonize is needed for the --background option\n");
-            exit 1;
-        };
+        my ($success, $error) = try_load_class("MooseX::Daemonize::Core");
+        warn("MooseX::Daemonize is needed for the --background option: $error\n"),
+            exit 1 if not $success;
+        ($success, $error) = try_load_class("POSIX");
+        warn("$error\n"), exit 1 if not $success;
         MooseX::Daemonize::Core->meta->apply($self);
+        POSIX::close($_) foreach (0..2);
     }
 }
 
 has keepalive => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'k',
-    isa           => Bool,
+    isa           => 'Bool',
     is            => 'ro',
     default       => 0,
     documentation => 'Support keepalive',
@@ -97,7 +104,7 @@ has keepalive => (
 has background => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'bg',
-    isa           => Bool,
+    isa           => 'Bool',
     is            => 'ro',
     default       => 0,
     documentation => 'Run in the background',
@@ -106,7 +113,7 @@ has background => (
 has restart => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'r',
-    isa           => Bool,
+    isa           => 'Bool',
     is            => 'ro',
     default       => sub {
         Catalyst::Utils::env_value(shift->application_name, 'reload') || 0;
@@ -117,7 +124,7 @@ has restart => (
 has restart_directory => (
     traits        => [qw(Getopt)],
     cmd_aliases   => [ 'rdir', 'restartdirectory' ],
-    isa           => ArrayRef[Str],
+    isa           => 'ArrayRef[Str]',
     is            => 'ro',
     documentation => 'Restarter directory to watch',
     predicate     => '_has_restart_directory',
@@ -126,7 +133,7 @@ has restart_directory => (
 has restart_delay => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'rd',
-    isa           => Int,
+    isa           => 'Int',
     is            => 'ro',
     documentation => 'Set a restart delay',
     predicate     => '_has_restart_delay',
@@ -135,8 +142,8 @@ has restart_delay => (
 {
     use Moose::Util::TypeConstraints;
 
-    my $tc = subtype 'Catalyst::Script::Server::Types::RegexpRef', as RegexpRef;
-    coerce $tc, from Str, via { qr/$_/ };
+    my $tc = subtype 'Catalyst::Script::Server::Types::RegexpRef', as 'RegexpRef';
+    coerce $tc, from 'Str', via { qr/$_/ };
 
     MooseX::Getopt::OptionTypeMap->add_option_type_to_map($tc => '=s');
 
@@ -154,7 +161,7 @@ has restart_delay => (
 has follow_symlinks => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'sym',
-    isa           => Bool,
+    isa           => 'Bool',
     is            => 'ro',
     default       => 0,
     documentation => 'Follow symbolic links',
@@ -184,7 +191,7 @@ sub _restarter_args {
 
 has restarter_class => (
     is => 'ro',
-    isa => Str,
+    isa => 'Str',
     lazy => 1,
     default => sub {
         my $self = shift;
@@ -198,6 +205,9 @@ sub run {
     local $ENV{CATALYST_DEBUG} = 1
         if $self->debug;
 
+    local $ENV{CATALYST_TRACE} = $self->trace
+        if $self->trace;
+
     if ( $self->restart ) {
         die "Cannot run in the background and also watch for changed files.\n"
             if $self->background;
@@ -228,7 +238,7 @@ sub run {
 
             return 1 unless $self->is_daemon;
 
-            Class::MOP::load_class($self->application_name);
+            load_class($self->application_name);
 
             $self->daemon_detach;
         }