Analizo
view release on metacpan or search on metacpan
lib/Analizo/Batch/Job/Git.pm view on Meta::CPAN
package Analizo::Batch::Job::Git;
use parent 'Analizo::Batch::Job';
use Cwd;
use Cwd 'abs_path';
use File::Spec;
use Digest::SHA qw/ sha1_hex /;
use File::Copy::Recursive qw(dircopy);
use File::Path qw(remove_tree);
sub new {
my ($class, $directory, $id, $data) = @_;
$class->SUPER::new(directory => $directory, actual_directory => $directory, id => $id, data => $data);
}
sub batch($$) {
my ($self, $batch) = @_;
if ($batch) {
$self->{finder} = sub { $batch->find($_[0]); };
$batch->share_filters_with($self);
}
return undef;
}
sub parallel_prepare {
my ($self) = @_;
$self->{actual_directory} = _create_work_directory($self->directory);
}
sub parallel_cleanup {
my ($self) = @_;
my $actual_directory = _create_work_directory($self->directory);
remove_tree($actual_directory);
}
sub _create_work_directory {
my ($original_dir) = @_;
my $basename = 'analizo.' . $$ . '.' . sha1_hex(abs_path($original_dir));
my $newdir = File::Spec->catfile(File::Spec->tmpdir(), $basename);
if (! -d $newdir) {
# Assume that the same directory may have been created before by the same
# process.
dircopy($original_dir, $newdir);
}
return $newdir;
}
sub prepare {
my ($self) = @_;
# change directory
$self->{oldcwd} = getcwd();
chdir($self->{actual_directory});
# checkout
$self->{old_branch} = git_current_branch();
$self->git_checkout($self->id);
}
sub cleanup {
my ($self) = @_;
# undo checkout
$self->git_checkout($self->{old_branch});
delete($self->{old_branch});
# undo directory change
chdir($self->{oldcwd});
delete($self->{oldcwd});
}
sub relevant {
my ($self) = @_;
for my $file (keys(%{$self->changed_files})) {
if ($self->filename_matches_filters($file)) {
return 1;
}
( run in 0.427 second using v1.01-cache-2.11-cpan-e1769b4cff6 )