1 package App::Rgit::Command;
8 use Object::Tiny qw/cmd cwd_as_repo args repos/;
10 use App::Rgit::Utils qw/validate/;
11 use App::Rgit::Repository;
15 App::Rgit::Command - Base class for App::Rgit commands.
23 our $VERSION = '0.01';
27 Base class for L<App::Rgit> commands.
29 This is an internal class to L<rgit>.
33 =head2 C<< new cmd => $cmd, args => \@args, repos => \@repos >>
35 Creates a new command object for C<$cmd> that will called for all repositories C<@repos> with arguments C<@args>.
40 __PACKAGE__->action($_ => 'Once') for qw/version help daemon init/, ' ';
43 my ($class, %args) = &validate;
45 $cmd = ' ' unless defined $cmd;
46 my $action = $class->action($cmd);
47 if ($class eq __PACKAGE__) {
50 croak "Command $cmd should be executed as a $action"
51 unless $class->isa($action);
53 eval "require $action; 1" or croak "Couldn't load $action: $@";
54 my $r = App::Rgit::Repository->new(fake => 1);
55 return unless defined $r;
58 args => $args{args} || [ ],
59 repos => $args{repos},
64 =head2 C<< action $cmd [ => $pkg ] >>
66 If C<$pkg> is supplied, handles command C<$cmd> with C<$pkg> objects.
67 Otherwise, returns the current class for C<$cmd>.
72 my ($self, $cmd, $pkg) = @_;
73 $cmd = $self->cmd if !defined $cmd
74 and defined $self and $self->isa(__PACKAGE__);
75 return unless defined $cmd;
76 unless (defined $pkg) {
77 return __PACKAGE__ . '::Each' unless defined $commands{$cmd};
78 return $commands{$cmd}
80 $pkg = __PACKAGE__ . '::' . $pkg unless $pkg =~ /:/;
81 $commands{$cmd} = $pkg;
96 Runs the command with a L<App::Rgit::Config> configuration object.
97 Stops as soon as one of the executed commands fails, and returns the corresponding exit code.
98 Returns zero when all went fine.
99 Implemented in subclasses.
107 Vincent Pit, C<< <perl at profvince.com> >>, L<http://profvince.com>.
109 You can contact me by mail or on C<irc.perl.org> (vincent).
113 Please report any bugs or feature requests to C<bug-rgit at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=rgit>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
117 You can find documentation for this module with the perldoc command.
119 perldoc App::Rgit::Command
121 =head1 COPYRIGHT & LICENSE
123 Copyright 2008 Vincent Pit, all rights reserved.
125 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
129 1; # End of App::Rgit::Command