use MooseX::Declare;
-class Gitalist::Git::Project {
+class Gitalist::Git::Project with Gitalist::Git::HasUtils {
# FIXME, use Types::Path::Class and coerce
use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
use MooseX::Types::Moose qw/Str Maybe Bool HashRef/;
use DateTime;
use MooseX::Types::Path::Class qw/Dir/;
use List::MoreUtils qw/any zip/;
- use Gitalist::Git::Util;
use aliased 'Gitalist::Git::Object';
our $SHA1RE = qr/[0-9a-fA-F]{40}/;
is => 'ro',
lazy_build => 1,
);
- has _util => ( isa => 'Gitalist::Git::Util',
- is => 'ro',
- lazy_build => 1,
- handles => [ 'run_cmd', 'get_gpp_object' ],
- );
has project_dir => ( isa => Dir,
is => 'ro',
);
method BUILD {
- $self->$_() for qw/_util last_change owner description/; # Ensure to build early.
+ $self->$_() for qw/last_change owner description/; # Ensure to build early.
}
method _project_dir {
return @ret;
}
- method get_object (Str $sha1) {
+ method get_object (NonEmptySimpleStr $sha1) {
+ unless ( $self->valid_rev($sha1) ) {
+ $sha1 = $self->head_hash($sha1);
+ }
return Object->new(
project => $self,
sha1 => $sha1,
);
}
-
+
# Should be in ::Object
method get_object_mode_string (Gitalist::Git::Object $object) {
return unless $object && $object->{mode};
# XXX Ideally this would return a wee object instead of ad hoc structures.
method diff ( Gitalist::Git::Object :$commit,
Bool :$patch?,
- NonEmptySimpleStr :$parent?,
+ Maybe[NonEmptySimpleStr] :$parent?,
NonEmptySimpleStr :$file? ) {
# Use parent if specifed, else take the parent from the commit
# if there is only one, otherwise it was a merge commit.
my @out = $self->raw_diff(
( $patch ? '--patch-with-raw' : () ),
- $parent, $commit->sha1, @etc
+ ( $parent ? $parent : () ),
+ $commit->sha1, @etc,
);
# XXX Yes, there is much wrongness having parse_diff_tree be destructive.