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 )