]> git.vpit.fr Git - perl/modules/rgit.git/commitdiff
Simplify repository check
authorVincent Pit <vince@profvince.com>
Tue, 23 Feb 2010 23:41:01 +0000 (00:41 +0100)
committerVincent Pit <vince@profvince.com>
Tue, 23 Feb 2010 23:41:01 +0000 (00:41 +0100)
lib/App/Rgit/Repository.pm

index 1d8d490c16ea6c6e84db0ade55e760612fa1bcbe..f7b03d7fd799964ffecc042a330c52ec5e9b32df 100644 (file)
@@ -48,37 +48,36 @@ sub new {
  my %args = @_;
 
  my $dir = $args{dir};
- $dir = abs_path $dir if defined $dir and not file_name_is_absolute $dir;
- $dir = cwd       unless defined $dir;
+ $dir    = abs_path $dir if defined $dir and not file_name_is_absolute $dir;
+ $dir    = cwd       unless defined $dir;
+ $dir    = canonpath $dir;
 
  my ($repo, $bare, $name, $work);
  if ($args{fake}) {
   $repo = $work = $dir;
  } else {
-  my @tries = ($dir);
+  return unless -d $dir
+            and -d "$dir/refs"
+            and -d "$_/objects"
+            and -e "$_/HEAD";
+
   my @chunks = splitdir $dir;
-  my $last = pop @chunks;
-  push @tries, "$dir.git" unless $last =~ /\.git$/;
-  push @tries, catdir($dir, '.git') unless $last eq '.git';
-  for (@tries) {
-   if (-d $_ && -d "$_/refs" and -d "$_/objects" and -e "$_/HEAD") {
-    $repo = $_;
-    last;
-   }
-  }
-  return unless defined $repo;
-  $repo = canonpath $repo;
-  @chunks = splitdir $repo;
-  $last = pop @chunks;
+  my $last   = pop @chunks;
+  return unless defined $last;
+
   if ($last eq '.git') {
    $bare = 0;
    $name = $chunks[-1];
    $work = catdir @chunks;
-  } else {
+  } elsif ($last =~ /(.+)\.git$/) {
    $bare = 1;
-   ($name) = $last =~ /(.*)\.git$/;
-   $work = $repo;
+   $name = $1;
+   $work = catdir @chunks, $last;
+  } else {
+   return;
   }
+
+  $repo = $dir;
  }
 
  bless {