Gerrit-Client
view release on metacpan or search on metacpan
lib/Gerrit/Client.pm view on Meta::CPAN
use Data::Alias;
use Data::Dumper;
use Digest::MD5 qw(md5_hex);
use English qw(-no_match_vars);
use File::Path;
use File::Spec::Functions;
use File::Temp;
use File::chdir;
use JSON;
use Params::Validate qw(:all);
use Scalar::Util qw(weaken);
use URI;
use URI::Escape;
use base 'Exporter';
our @EXPORT_OK = qw(
for_each_patchset
stream_events
git_environment
next_change_id
random_change_id
lib/Gerrit/Client.pm view on Meta::CPAN
my $stash = {};
$restart->($stash);
my $out = { stash => $stash };
if ( defined wantarray ) {
$out->{guard} = guard {
$cleanup->($stash);
};
$out_weak = $out;
weaken($out_weak);
}
else {
$out_weak = $out;
}
return $out;
}
=item B<< for_each_patchset(ssh_url => $ssh_url, workdir => $workdir, ...) >>
Set up a high-level event watcher to invoke a custom callback or
lib/Gerrit/Client.pm view on Meta::CPAN
# drop the path section of the URL to get base gerrit URL
my $url = URI->new($args{ssh_url});
$url->path( undef );
$args{ssh_url} = $url->as_string();
require "Gerrit/Client/ForEach.pm";
my $self = bless {}, 'Gerrit::Client::ForEach';
$self->{args} = \%args;
my $weakself = $self;
weaken($weakself);
# stream_events takes care of incoming changes, perform a query to find
# existing changes
my $do_query = sub {
return unless $args{query};
query(
$args{query},
ssh_url => $args{ssh_url},
current_patch_set => 1,
lib/Gerrit/Client/ForEach.pm view on Meta::CPAN
use warnings;
use AnyEvent;
use AnyEvent::Util;
use Capture::Tiny qw(capture_merged);
use Data::Alias;
use Data::Dumper;
use English qw(-no_match_vars);
use File::chdir;
use Gerrit::Client;
use Scalar::Util qw(weaken);
# counter of how many connections we have per server
my %CONNECTION_COUNTER;
# counter of how many worker processes we have
my $WORKER_COUNTER;
# 1 when fetching into a gitdir
my %GITDIR_FETCHING;
lib/Gerrit/Client/ForEach.pm view on Meta::CPAN
my $cvkey = "_cmd_${name}_cv";
my $statuskey = "_cmd_${name}_status";
my $outputkey = "_cmd_${name}_output";
return 1 if ( $event->{$donekey} );
my $onlyif = $args{onlyif} || sub { 1 };
my $queue = $args{queue};
my $weakself = $self;
weaken($weakself);
alias my $cmdcv = $event->{$cvkey};
my $cmd = $args{cmd};
my $cmdstr;
{
local $LIST_SEPARATOR = '] [';
$cmdstr = "[@{$cmd}]";
}
if ( !$cmdcv ) {
lib/Gerrit/Client/ForEach.pm view on Meta::CPAN
return {
returned => $returned,
output => $output
};
}
sub _do_cb_forksub {
my ( $self, $sub, $event, $queue ) = @_;
my $weakself = $self;
weaken($weakself);
if ($event->{_forksub_result}) {
return $event->{_forksub_result};
}
if ( $event->{_forked} ) {
push @{$queue}, $event;
return;
}
lib/Gerrit/Client/ForEach.pm view on Meta::CPAN
Gerrit::Client::review(
$event->{patchSet}{revision},
%review_args
);
}
sub _dequeue_soon {
my ($self) = @_;
my $weakself = $self;
weaken($weakself);
$self->{_dequeue_timer} ||= AE::timer( .1, 0,
sub {
return unless $weakself;
delete $weakself->{_dequeue_timer};
$weakself->_dequeue();
}
);
}
sub _dequeue {
my ($self) = @_;
if ($Gerrit::Client::DEBUG) {
_debug_print 'queue before processing: ', Dumper( $self->{queue} );
}
my $weakself = $self;
weaken($weakself);
my @queue = @{ $self->{queue} || [] };
my @newqueue;
while (my $event = shift @queue) {
next unless $self->_ensure_git_cloned( $event, \@newqueue );
next unless $self->_ensure_git_fetched( $event, \@newqueue, \@queue );
next unless $self->_ensure_git_workdir_uptodate( $event, \@newqueue );
$self->_do_callback( $event, \@newqueue );
}
( run in 0.272 second using v1.01-cache-2.11-cpan-1f129e94a17 )