From: Jose Luis Martinez Date: Wed, 9 Mar 2011 16:43:05 +0000 (+0100) Subject: Be able to override the autodetected repo name X-Git-Tag: 0.003001~13 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FGitalist.git;a=commitdiff_plain;h=634770da1dfc088c407ef337692a034307cacadb Be able to override the autodetected repo name Use this capability in Git::CollectionOfRepositories::FromDirectoryRecursive --- diff --git a/lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm b/lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm index cba9de4..fc17eed 100644 --- a/lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm +++ b/lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm @@ -33,10 +33,15 @@ class Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive return $repo->path; } + method _get_repo_name (NonEmptySimpleStr $name) { + # strip off the repo_dir part from a path + return Path::Class::Dir->new($name)->relative($self->repo_dir)->stringify; + } + ## Builders method _build_repositories { return [ - map Gitalist::Git::Repository->new($_), $self->_find_repos( $self->repo_dir ) + map { Gitalist::Git::Repository->new($_, $self->_get_repo_name("$_")) } $self->_find_repos( $self->repo_dir ) ]; } } # end class diff --git a/lib/Gitalist/Git/Repository.pm b/lib/Gitalist/Git/Repository.pm index 2832505..1da8395 100644 --- a/lib/Gitalist/Git/Repository.pm +++ b/lib/Gitalist/Git/Repository.pm @@ -20,16 +20,16 @@ class Gitalist::Git::Repository with Gitalist::Git::HasUtils { our $SHA1RE = qr/[0-9a-fA-F]{40}/; - around BUILDARGS (ClassName $class: Dir $dir) { + around BUILDARGS (ClassName $class: Dir $dir, Str $override_name = '') { # Allows us to be called as Repository->new($dir) # Last path component becomes $self->name # Full path to git objects becomes $self->path - my $name = $dir->dir_list(-1); + my $name = ($override_name ne '') ? $override_name : $dir->dir_list(-1); if(-f $dir->file('.git', 'HEAD')) { # Non-bare repo above .git $dir = $dir->subdir('.git'); - $name = $dir->dir_list(-2, 1); # .../name/.git + $name = $dir->dir_list(-2, 1) if (not defined $override_name); # .../name/.git } elsif('.git' eq $dir->dir_list(-1)) { # Non-bare repo in .git - $name = $dir->dir_list(-2); + $name = $dir->dir_list(-2) if (not defined $override_name); } confess("Can't find a git repository at " . $dir) unless ( -f $dir->file('HEAD') );