1 package Gitalist::Git::Head;
4 use namespace::autoclean;
6 with 'Gitalist::Git::Serializable';
8 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
9 use MooseX::Types::Moose qw/Maybe/;
10 use Gitalist::Git::Types qw/SHA1/;
11 use MooseX::Types::DateTime qw/DateTime/;
13 use aliased 'DateTime' => 'DT';
15 has sha1 => ( isa => SHA1,
19 has name => ( isa => NonEmptySimpleStr,
23 has committer => ( isa => NonEmptySimpleStr,
27 has last_change => ( isa => Maybe[DateTime],
32 around BUILDARGS => sub {
36 if ( @_ == 1 && ! ref $_[0] ) {
38 # expects $line to match the output from
39 # for-each-ref --format=%(objectname)%00%(refname)%00%(committer)
40 my ($sha1, $name, $commitinfo) = split /\0/, $line, 3;
41 $name =~ s!^refs/heads/!!;
43 my ($committer, $epoch, $tz) =
44 $commitinfo =~ /(.*)\s(\d+)\s+([+-]\d+)$/;
45 my $dt = DT->from_epoch(
53 committer => $committer,
57 return $class->$orig(@_);