- croak "Command $cmd shouldn't be executed as an $action"
- unless $class eq __PACKAGE__ or $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(
- cmd => $cmd,
- args => $args{args} || [ ],
- repos => $args{repos},
- cwd_as_repo => $r,
- );
+
+ if ($class eq __PACKAGE__) {
+ $class = $action;
+ } else {
+ Carp::confess("Command $cmd should be executed as a $action")
+ unless $class->isa($action);
+ }
+
+ eval "require $action; 1" or Carp::confess("Couldn't load $action: $@");
+
+ bless {
+ cmd => $cmd,
+ args => $args{args} || [ ],
+ policy => $args{policy},
+ }, $class;