]> git.vpit.fr Git - perl/modules/rgit.git/blobdiff - lib/App/Rgit/Command.pm
Get rid of validate()
[perl/modules/rgit.git] / lib / App / Rgit / Command.pm
index 026c73a7047a2082bda40a3f52a9b81dc14a7381..348b8c40aab70ef4c659ba8167ca287222b95807 100644 (file)
@@ -5,9 +5,7 @@ use warnings;
 
 use Carp qw/croak/;
 
-use Object::Tiny qw/cmd args/;
-
-use App::Rgit::Utils qw/validate/;
+use App::Rgit::Utils qw/:codes/;
 
 =head1 NAME
 
@@ -15,11 +13,11 @@ App::Rgit::Command - Base class for App::Rgit commands.
 
 =head1 VERSION
 
-Version 0.03
+Version 0.06
 
 =cut
 
-our $VERSION = '0.03';
+our $VERSION = '0.06';
 
 =head1 DESCRIPTION
 
@@ -39,21 +37,29 @@ my %commands;
 __PACKAGE__->action($_ => 'Once') for qw/daemon gui help init version/, ' ';
 
 sub new {
- my ($class, %args) = &validate;
+ my $class = shift;
+ $class = ref $class || $class;
+
+ my %args = @_;
+
  my $cmd = $args{cmd};
  $cmd = ' ' unless defined $cmd;
+
  my $action = $class->action($cmd);
+
  if ($class eq __PACKAGE__) {
   $class = $action;
  } else {
   croak "Command $cmd should be executed as a $action"
                                unless $class->isa($action);
  }
+
  eval "require $action; 1" or croak "Couldn't load $action: $@";
- $class->SUPER::new(
-  cmd  => $cmd,
-  args => $args{args} || [ ],
- );
+ bless {
+  cmd    => $cmd,
+  args   => $args{args} || [ ],
+  policy => $args{policy},
+ }, $class;
 }
 
 =head2 C<< action $cmd [ => $pkg ] >>
@@ -77,17 +83,39 @@ sub action {
  $commands{$cmd} = $pkg;
 }
 
+=head2 C<report $conf, $repo, $status>
+
+Reports that the execution of the command in C<$repo> exited with C<$status> to the current command's policy.
+Returns what policy C<report> method returned, which should be one of the policy codes listed in C<App::Rgit::Utils>.
+
+=cut
+
+sub report {
+ my ($self) = @_;
+
+ my $code = $self->policy->report(@_);
+
+ return defined $code ? $code : NEXT;
+}
+
 =head2 C<cmd>
 
 =head2 C<args>
 
-Accessors.
+=head2 C<policy>
+
+Read-only accessors.
+
+=cut
+
+BEGIN {
+ eval "sub $_ { \$_[0]->{$_} }" for qw/cmd args policy/;
+}
 
 =head2 C<run $conf>
 
 Runs the command with a L<App::Rgit::Config> configuration object.
-Stops as soon as one of the executed commands fails, and returns the corresponding exit code.
-Returns zero when all went fine.
+Handles back the code to return to the system and the last policy.
 Implemented in subclasses.
 
 =head1 SEE ALSO
@@ -97,7 +125,7 @@ L<rgit>.
 =head1 AUTHOR
 
 Vincent Pit, C<< <perl at profvince.com> >>, L<http://profvince.com>.
-   
+
 You can contact me by mail or on C<irc.perl.org> (vincent).
 
 =head1 BUGS
@@ -112,7 +140,7 @@ You can find documentation for this module with the perldoc command.
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2008 Vincent Pit, all rights reserved.
+Copyright 2008-2009 Vincent Pit, all rights reserved.
 
 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.