use MooseX::Types::Moose qw/Str Int Bool Maybe ArrayRef/;
use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
+ use Fcntl ':mode';
+ use constant {
+ S_IFINVALID => 0030000,
+ S_IFGITLINK => 0160000,
+ };
+
+ BEGIN {
+ no warnings;
+ *S_ISLNK = sub ($) {}
+ if $^O eq 'MSWin32';
+ }
+
# repository and sha1 are required initargs
has repository => ( isa => 'Gitalist::Git::Repository',
required => 1,
method _build_modestr {
# XXX The POSIX constants make win32 sad :(
- return eval { _mode_str($self->mode) } || '?rwxrwxrwx';
+ return _mode_str($self->mode);
}
- # via gitweb.pm circa line 1305
- use Fcntl ':mode';
- use constant {
- S_IFINVALID => 0030000,
- S_IFGITLINK => 0160000,
- };
-
+ # via gitweb.pm
# submodule/subrepository, a commit object reference
sub S_ISGITLINK($) {
return (($_[0] & S_IFMT) == S_IFGITLINK)
use List::MoreUtils qw/any zip/;
use DateTime;
use Encode qw/decode/;
-# use I18N::Langinfo qw/langinfo CODESET/;
+
+ use if $^O ne 'MSWin32', 'I18N::Langinfo', => qw/langinfo CODESET/;
+ BEGIN {
+ no strict 'subs';
+ *__owner = defined &langinfo
+ ? sub { map { decode(langinfo(CODESET), $_) } (getpwuid $_[0]->path->stat->uid)[6,0] }
+ : sub { return qw/OwnEr GroUp/ }
+ ;
+ }
+
use Gitalist::Git::Object::Blob;
use Gitalist::Git::Object::Tree;
use Gitalist::Git::Object::Commit;
}
method _build_owner {
- # XXX No I18N::Langinfo & getpwuid make win32 sad :(
- # my ($gecos, $name) = map { decode(langinfo(CODESET), $_) } (getpwuid $self->path->stat->uid)[6,0];
- my ($gecos, $name) = do {
- local $@;
- my($g,$n) = eval { (getpwuid $self->path->stat->uid)[6,0] };
- !$@ ? ($g,$n) : qw(OwenEr GroUp);
- };
+ my ($gecos, $name) = $self->__owner;
$gecos =~ s/,+$//;
return length($gecos) ? $gecos : $name;
}