use Carp qw/croak/;
-use Object::Tiny qw/cmd cwd_as_repo args repos/;
+use Object::Tiny qw/cmd cwd_as_repo args/;
use App::Rgit::Utils qw/validate/;
use App::Rgit::Repository;
=head1 VERSION
-Version 0.01
+Version 0.02
=cut
-our $VERSION = '0.01';
+our $VERSION = '0.02';
=head1 DESCRIPTION
=head1 METHODS
-=head2 C<< new cmd => $cmd, args => \@args, repos => \@repos >>
+=head2 C<< new cmd => $cmd, args => \@args >>
-Creates a new command object for C<$cmd> that will called for all repositories C<@repos> with arguments C<@args>.
+Creates a new command object for C<$cmd> that is bound to be called with arguments C<@args>.
=cut
my $cmd = $args{cmd};
$cmd = ' ' unless defined $cmd;
my $action = $class->action($cmd);
- croak "Command $cmd shouldn't be executed as an $action"
- unless $class eq __PACKAGE__ or $class->isa($action);
- my @repos = grep $_->isa('App::Rgit::Repository'),
- ref $args{repos} eq 'ARRAY' ? @{$args{repos}} : $args{repos};
+ 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: $@";
my $r = App::Rgit::Repository->new(fake => 1);
return unless defined $r;
- $action->SUPER::new(
+ $class->SUPER::new(
cmd => $cmd,
args => $args{args} || [ ],
- repos => \@repos,
cwd_as_repo => $r,
);
}
sub action {
my ($self, $cmd, $pkg) = @_;
- $cmd = $self->cmd if !defined $cmd
- and defined $self and $self->isa(__PACKAGE__);
- return unless defined $cmd;
+ if (not defined $cmd) {
+ return unless defined $self and ref $self and $self->isa(__PACKAGE__);
+ $cmd = $self->cmd;
+ }
unless (defined $pkg) {
return __PACKAGE__ . '::Each' unless defined $commands{$cmd};
return $commands{$cmd}
=head2 C<args>
-=head2 C<repos>
-
Accessors.
=head2 C<run $conf>