- my $root = $args{root};
- return unless defined $root and -d $root;
- $root = File::Spec->canonpath(Cwd::abs_path($root));
-
- my $git = $args{git};
- return unless defined $git;
+ my $root = defined $args{root}
+ ? $args{root}
+ : defined $ENV{GIT_DIR}
+ ? $ENV{GIT_DIR}
+ : Cwd::cwd;
+ Carp::confess("Invalid root directory") unless -d $root;
+ $root = File::Spec->canonpath(App::Rgit::Utils::abs_path($root));
+
+ my $git;
+ my @candidates = (
+ defined $args{git}
+ ? $args{git}
+ : defined $ENV{GIT_EXEC_PATH}
+ ? $ENV{GIT_EXEC_PATH}
+ : map File::Spec->catfile($_, 'git'), File::Spec->path
+ );