use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
use MooseX::Types::Path::Class qw/Dir/;
use MooseX::Types::Moose qw/Str Maybe Bool HashRef ArrayRef/;
+ use Gitalist::Git::Types qw/SHA1/;
use Moose::Autobox;
use List::MoreUtils qw/any zip/;
use DateTime;
+ use Encode qw/decode/;
+ use I18N::Langinfo qw/langinfo CODESET/;
use Gitalist::Git::Object::Blob;
use Gitalist::Git::Object::Tree;
use Gitalist::Git::Object::Commit;
return $sha1;
}
- method list_tree (Str $sha1?) {
+ method list_tree (SHA1 $sha1?) {
$sha1 ||= $self->head_hash;
my $object = $self->get_object($sha1);
return @{$object->tree};
}
method get_object (NonEmptySimpleStr $sha1) {
- unless ( $self->_is_valid_rev($sha1) ) {
+ unless (is_SHA1($sha1)) {
$sha1 = $self->head_hash($sha1);
}
my $type = $self->run_cmd('cat-file', '-t', $sha1);
$sha1 = $self->head_hash($sha1)
if !$sha1 || $sha1 !~ $SHA1RE;
- my @search_opts;
+ my @search_opts;
if ($search) {
$search->{type} = 'grep'
if $search->{type} eq 'commit';
}
method _build_owner {
- my ($gecos, $name) = (getpwuid $self->path->stat->uid)[6,0];
+ my ($gecos, $name) = map { decode(langinfo(CODESET), $_) } (getpwuid $self->path->stat->uid)[6,0];
$gecos =~ s/,+$//;
return length($gecos) ? $gecos : $name;
}
my @revlines = $self->run_cmd_list('for-each-ref',
'--sort=-creatordate',
'--format=%(objectname) %(objecttype) %(refname) %(*objectname) %(*objecttype) %(subject)%00%(creator)',
- 'refs/tags'
+ 'refs/tags'
);
my @ret;
for my $line (@revlines) {
my($refinfo, $creatorinfo) = split /\0/, $line;
- my($rev, $type, $name, $refid, $reftype, $title) = split(' ', $refinfo, 6);
+ my($rev, $type, $name, $refid, $reftype, $title) = split(' ', $refinfo, 6);
my($creator, $epoch, $tz) = ($creatorinfo =~ /^(.*) ([0-9]+) (.*)$/);
$name =~ s!^refs/tags/!!;
}
method _build_references {
- # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
- # c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{}
- my @reflist = $self->run_cmd_list(qw(show-ref --dereference))
+ # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
+ # c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{}
+ my @reflist = $self->run_cmd_list(qw(show-ref --dereference))
or return;
my %refs;
for (@reflist) {
}
## Private methods
- method _is_valid_rev (Str $rev) {
- return ($rev =~ /^($SHA1RE)$/);
- }
-
method _parse_rev_list ($output) {
return
map $self->get_gpp_object($_),
- grep $self->_is_valid_rev($_),
+ grep is_SHA1($_),
map split(/\n/, $_, 6), split /\0/, $output;
}