App-gqmt

 view release on metacpan or  search on metacpan

lib/App/gqmt.pm  view on Meta::CPAN


    p ( $query, colored => $self->option('colored') ) if $self->option('d') > 1 || $self->option('dry_run');
    next if $self->option('dry_run');

    $self->option('req')->content( $self->jso->encode({ query => $query }) );

    my $res = $self->lwp->request($self->option('req'));

    if ( ! $res->is_success ) {
      my $res_cont  = $self->jso->decode( $res->content );
      my $res_error = sprintf("--- ERROR ---\n\n%s\n\nMessage: %s\n    doc: %s\n\n",
			      $res->status_line,
			      $res_cont->{message},
			      $res_cont->{documentation_url} );
      print $res_error;
      exit 1;
    }

    my $reply = $self->jso->decode( $res->decoded_content );

    if ( exists $reply->{errors} ) {
      unshift @{$reply->{errors}}, "--- ERROR ---";
      p ( $reply->{errors}, colored => $self->option('colored') );
      exit 1;
    }

    p ( $reply, colored => $self->option('colored') );
    print "package of version ID: $_, has been successfully deleted\n" if $self->option('d') > 0;

  }

}


sub get_versions {
  my ($self, $args) = @_;
  my $arg  = {
	      res => $args->{res},	  # result
	      inf => $args->{inf} // {    # pageInfo
				      startCursor     => undef,
				      endCursor       => undef,
				      hasNextPage     => -1,
				      hasPreviousPage => -1
				     }
	     };

  my $query;
  if ( defined $self->option('query_template') ) {
    my $tt_out;
    my $tt = Template->new( ABSOLUTE => 1,
			    RELATIVE => 1 ) || die Template->error(), "\n";

    $tt->process(
		 $self->option('query_template'),
		 {
		  repo     => $self->option('repo'),
		  user     => $self->option('user'),
		  pkg_num  => $self->option('rows_number'),
		  pkg_name => $self->option('package'),
		  vers_num => $self->option('rows_number'),
		  cursor   => $arg->{inf}->{hasPreviousPage} == 1 ? sprintf(', before: "%s"', $arg->{inf}->{startCursor}) : ''
		 },
		 \$tt_out
		);
    $query = { query => $tt_out };

  } else {
    $query = $self->
      query_default({ inf => $arg->{inf}->{hasPreviousPage} == 1 ? sprintf(', before: "%s"', $arg->{inf}->{startCursor}) : ''});
  }

  p( $query->{query}, colored => $self->option('colored'), print_escapes => 0 )
    if $self->option('d') > 0 && ! defined $arg->{inf}->{startCursor};

  my $json = $self->jso->encode( $query );

  $self->option('req')->content( $json );

  my $res   = $self->lwp->request($self->option('req'));

  if ( ! $res->is_success ) {
    my $res_cont  = $self->jso->decode( $res->content );
    my $res_error = sprintf("--- ERROR ---\n\n%s\n\nMessage: %s\n    doc: %s\n\n",
			    $res->status_line,
			    $res_cont->{message},
			    $res_cont->{documentation_url} );
    print $res_error;
    exit 1;
  }

  my $reply = $self->jso->decode( $res->decoded_content );

  p ( $reply, caller_message => "REPLY: __FILENAME__:__LINE__ ", colored => $self->option('colored') )
    if $self->option('d') > 2 && ! defined $arg->{inf}->{startCursor};

  if ( exists $reply->{errors} ) {
    unshift @{$reply->{errors}}, "--- ERROR ---";
    p ( $reply->{errors}, colored => $self->option('colored') );
    exit 1;
  } elsif ( $reply->{data}->{repository}->{packages}->{nodes} ) {
    print "WARNING: not hardcoded package name \"", $self->option('package'), "\"\n"
      if $self->option('d') > 1;
  }

  push @{$arg->{res}}, @{$reply->{data}->{repository}->{packages}->{nodes}->[0]->{versions}->{nodes}};

  return 1 if $arg->{inf}->{hasPreviousPage} == 0 || $self->option('single_iteration') == 1;

  my $pageInfo = $reply->{data}->{repository}->{packages}->{nodes}->[0]->{versions}->{pageInfo};
  $self->get_versions ({
			res => $arg->{res},
			inf => {
				startCursor     => $pageInfo->{startCursor},
				endCursor       => $pageInfo->{endCursor},
				hasNextPage     => $self->jso->decode( $pageInfo->{hasNextPage} ),
				hasPreviousPage => $self->jso->decode( $pageInfo->{hasPreviousPage} ),
			       }
		       });

  return 0;
}



( run in 0.744 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )