X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist%2FGit%2FObject%2FCommit.pm;h=752b930f81bcad7ec6edbae22197ea6440e49873;hb=30db8f5b4b22213c6f1cb399cb6b25f1be0a37a3;hp=d42e41b32bb35e0e17b57e382b4c9c96baabbc44;hpb=35eaa65aba0d1db614097e6b85e4530f1a572d3b;p=catagits%2FGitalist.git diff --git a/lib/Gitalist/Git/Object/Commit.pm b/lib/Gitalist/Git/Object/Commit.pm index d42e41b..752b930 100644 --- a/lib/Gitalist/Git/Object/Commit.pm +++ b/lib/Gitalist/Git/Object/Commit.pm @@ -8,6 +8,7 @@ class Gitalist::Git::Object::Commit use MooseX::Types::Common::String qw/NonEmptySimpleStr/; use Moose::Autobox; use List::MoreUtils qw/any zip/; + use Gitalist::Util qw(to_utf8); our $SHA1RE = qr/[0-9a-fA-F]{40}/; has '+type' => ( default => 'commit' ); @@ -44,7 +45,7 @@ class Gitalist::Git::Object::Commit ? '--cc' : '--root'; push @cmd, $self->sha1; } - return $self->_run_cmd( @cmd ); + return $self->_run_cmd_fh( @cmd ); } method diff ( Maybe[Bool] :$patch?, @@ -79,6 +80,18 @@ class Gitalist::Git::Object::Commit return \@difftree, [$self->_parse_diff(@out)]; } +method snapshot ( NonEmptySimpleStr $format ) { +# return unless (qw/tar zip/->any($format)); + my $name = $self->project->name; + $name =~ s,([^/])/*\.git$,$1,; + my $filename = to_utf8($name); + $filename .= "-$self->sha1.$format"; + $name =~ s/\047/\047\\\047\047/g; + + my @cmd = ('archive', "--format=$format", "--prefix=$name", $self->sha1); + return $self->_run_cmd_fh(@cmd); +} + ## Private methods # gitweb uses the following sort of command for diffing merges: # /home/dbrook/apps/bin/git --git-dir=/home/dbrook/dev/app/.git diff-tree -r -M --no-commit-id --patch-with-raw --full-index --cc 316cf158df3f6207afbae7270bcc5ba0 --