X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist%2FGit%2FObject.pm;h=7d46632b465268e1f51638d9e21cff1fb98633db;hb=96410fb53cae4b097d227548ef75600f5d8f19b4;hp=de693f32495e042cc17c12385c280522757354d5;hpb=5c8154bb226e9efcf7f8aefaa19d89e4e3b5483b;p=catagits%2FGitalist.git diff --git a/lib/Gitalist/Git/Object.pm b/lib/Gitalist/Git/Object.pm index de693f3..7d46632 100644 --- a/lib/Gitalist/Git/Object.pm +++ b/lib/Gitalist/Git/Object.pm @@ -1,12 +1,15 @@ use MooseX::Declare; use Moose::Autobox; -class Gitalist::Git::Object { +class Gitalist::Git::Object with Gitalist::Git::Serializable is dirty { + use MooseX::Storage::Meta::Attribute::Trait::DoNotSerialize; + use MooseX::Types::Moose qw/Str Int Bool Maybe ArrayRef/; use MooseX::Types::Common::String qw/NonEmptySimpleStr/; + use overload '""' => '_to_string', fallback => 1; - # project and sha1 are required initargs - has project => ( isa => 'Gitalist::Git::Project', + # repository and sha1 are required initargs + has repository => ( isa => 'Gitalist::Git::Repository', required => 1, is => 'ro', weak_ref => 1, @@ -31,12 +34,12 @@ class Gitalist::Git::Object { lazy_build => 1 ) for qw/modestr size/; - has _gpp_obj => ( isa => 'Git::PurePerl::Object', - required => 1, - is => 'ro', + has _gpp_obj => ( isa => 'Git::PurePerl::Object', + required => 1, + is => 'ro', lazy_build => 1, - handles => [ 'content', - ], + handles => [ 'content' ], + traits => ['DoNotSerialize'] ); # objects can't determine their mode or filename @@ -51,6 +54,9 @@ class Gitalist::Git::Object { method BUILD { $self->$_() for qw/_gpp_obj size modestr/ } ## Private methods + method _to_string { + return $self->sha1; + }; ## Builders method _build__gpp_obj { @@ -74,11 +80,11 @@ class Gitalist::Git::Object { # via gitweb.pm circa line 1305 use Fcntl ':mode'; use constant { - S_IFINVALID => 0030000, - S_IFGITLINK => 0160000, + S_IFINVALID => 0030000, + S_IFGITLINK => 0160000, }; - # submodule/subproject, a commit object reference + # submodule/subrepository, a commit object reference sub S_ISGITLINK($) { return (($_[0] & S_IFMT) == S_IFGITLINK) } @@ -91,7 +97,7 @@ class Gitalist::Git::Object { return 'm---------'; } elsif (S_ISDIR($mode & S_IFMT)) { return 'drwxr-xr-x'; - } elsif (S_ISLNK($mode)) { + } elsif ($^O ne 'MSWin32' and S_ISLNK($mode)) { # this is ENOLINKS country, we can't stop here! return 'lrwxrwxrwx'; } elsif (S_ISREG($mode)) { # git cares only about the executable bit @@ -115,7 +121,7 @@ Gitalist::Git::Object - Model of a git object. =head1 SYNOPSIS - my $object = Project->get_object($sha1); + my $object = Repository->get_object($sha1); =head1 DESCRIPTION