http://qs321.pair.com?node_id=11100578


in reply to git-push target for Makefile (via ExtUtils::MakeMaker)

It isn't obvious what advantage you see from putting this in a Makefile.PL, rather than just having a standalone shell script that initializes your local git repository. The target you are creating only seems to be useful once, when creating the repo. After that, you would be cloning the repository, or running normal git operations on your repo.

Normally, make targets would be used for things you run repeatedly as a dist author, or for things you would expect a user of your module to run.

  • Comment on Re: git-push target for Makefile (via ExtUtils::MakeMaker)

Replies are listed 'Best First'.
Re^2: git-push target for Makefile (via ExtUtils::MakeMaker)
by bliako (Monsignor) on May 27, 2019 at 15:53 UTC

    The advantage, for me, is not to have to look for the git commands and their switches to update my local files into the remote (or init if it is the first time). I just do make git-push and all my local changes are pushed onto the remote, ready for end users to use it. First time or Nth time, this can be run repeatedly, every time I need to update the remote with my local changes.

    It's bad enough to have to remember every time how to make available to git my public key, I just refuse to learn git nomenclature. It is very likely that the git commands I am using are not entirely fit - I was under the impression that git push will forward all local changes to remote. If you need something else, then just create another target. The main idea is still the same.

    The obvious disadvantage of my method is that Makefile.PL now contains a target (git-push) which the end user should never need.

      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,

        my $github_username = $Config->{$sub_hash}{'username'}; ... say "username is $github_username";
        and
        'user' => 'TBlazer66' ... login is tblazer66@gmail.com
        don't go together...
        • key 'user' vs. 'username'
        • say "username is ..." vs. "login is ..."