I frequently find myself trying to replicate what bliako posts. I was able to get the expected result with the github values hard-coded into the script and taking the repo name off of STDIN. I then wanted to shuffle those values out of the source and load them using Config:Tiny, and take the new repo name off of STDIN. Right now I'm failing. Source:
#!/usr/bin/perl
use 5.011;
use warnings;
# original by bliako on 27/05/2019 PM node_id=11100309
## embellishments don't work yet
use Net::GitHub;
use Data::Dumper;
use Config::Tiny;
my $ini_path = qw( /home/bob/Documents/html_template_data/3.values.ini
+ );
say "ini path is $ini_path";
my $sub_hash = "my_github";
my $Config = Config::Tiny->new;
$Config = Config::Tiny->read( $ini_path, 'utf8' );
say Dumper $Config;
# -> is optional between brackets
my $github_login = $Config->{$sub_hash}{'email'};
my $github_username = $Config->{$sub_hash}{'username'};
my $github_password = $Config->{$sub_hash}{'password'};
say "login is $github_login";
say "password is $github_password";
print "$0 : enter value for reponame: ";
my $github_reponame = <STDIN>;
chomp($github_reponame);
my $git = Net::GitHub->new(
login => $github_username,
pass => $github_password
);
say "username is $github_username";
my $reposinfo = $git->repos->list($github_username);
print Dumper($reposinfo);
my %reposlist =
map { lc $_->{'full_name'} =~ s|^${github_username}/||r => $_ } @$re
+posinfo;
print "Repos: " . join( ",", keys %reposlist ) . "\n";
if ( !defined $reposlist{ lc $github_reponame } ) {
print "$0 : creating new repository '$github_reponame' ...\n";
my $ret = undef;
eval {
$ret = $git->repos->create(
{
name => $github_reponame,
description => "change this to suit",
}
);
};
if ($@) {
print STDERR "$0 : failed to create repository '$github_reponame'
+: $@\n";
exit(1);
}
}
__END__
Output:
$ ./2.github.pl
ini path is /home/bob/Documents/html_template_data/3.values.ini
$VAR1 = bless( {
...
'my_github' => {
'password' => 'redacted',
'email' => 'tblazer66@gmail.com',
'user' => 'TBlazer66'
},
...
}, 'Config::Tiny' );
login is tblazer66@gmail.com
password is redacted
./2.github.pl : enter value for reponame: 2.newrepo
Undef did not pass type constraint "Str" (in $args->{"login"}) at /usr
+/local/share/perl/5.26.1/Net/GitHub.pm line 10
"Str" is a subtype of "Value"
"Value" is a subtype of "Defined"
Undef did not pass type constraint "Defined" (in $args->{"login"})
"Defined" is defined as: (defined($_))
It seems like the problem is that I'm not getting values passed. I looked at line 10 of Github.pm is in the subroutine that wraps the arguments and sends them further:
$ cd /usr/local/share/perl/5.26.1/Net
$ cat GitHub.pm
package Net::GitHub;
use Net::GitHub::V3;
our $VERSION = '0.95';
our $AUTHORITY = 'cpan:FAYLAND';
sub new {
my $class = shift;
Net::GitHub::V3->new(@_);
}
1;
__END__
Question 1 is what gives with the values being undefined?
The obvious disadvantage of my method is that Makefile.PL now contains a target (git-push) which the end user should never need.
I spent a lot of time looking at ExtUtils::MakeMaker, and I'm wondering what the word "target" denotes. I had used it for the OS of the plaform you're developing for.
Thanks for your post, and thanks for your comments,
|