tadzik / rakudobrew

Perl 6 installation manager
MIT License
185 stars 42 forks source link

Failed zef build #108

Closed Altai-man closed 7 years ago

Altai-man commented 7 years ago

How to reproduce: 1.rakudobrew build moar 2.rakudobrew build zef 3.rakudobrew build moar // After some time to update. 4.After rakudo updating, rakudobrew tries to update zef too. 5.Boom!

===> Testing: zef:auth('github:ugexe')
t/00-load.t ........... ok 
t/identity.t .......... ok 
t/utils-filesystem.t .. ok 
All tests successful.
Files=3, Tests=14,  3 wallclock secs
Result: PASS
===> Testing [OK] for zef:auth('github:ugexe')
===> Installing: zef:auth('github:ugexe')
===> Install [SKIP] for zef:auth('github:ugexe'): zef:ver<*>:auth<github:ugexe>:api<> already installed
!!!> Install failures: zef:auth('github:ugexe')
Failed running /home/yohan/.rakudobrew/bin/../moar-nom/install/bin/perl6 -Ilib bin/zef -v install . at /home/yohan/.rakudobrew/bin/rakudobrew line 58.
    main::run("/home/yohan/.rakudobrew/bin/../moar-nom/install/bin/perl6 -Ili"...) called at /home/yohan/.rakudobrew/bin/rakudobrew line 548
    main::build_zef() called at /home/yohan/.rakudobrew/bin/rakudobrew line 355
    main::build_impl("zef", undef, "") called at /home/yohan/.rakudobrew/bin/rakudobrew line 116
➜  ~ 

It looks like the problem is with already installed instance of zef. If we update zef after moar only if zef is installed, then we need to add --force flag to over-write it.

The bug disappears like this:

===> Testing: zef:auth('github:ugexe')
t/00-load.t ........... ok 
t/identity.t .......... ok 
t/utils-filesystem.t .. ok 
All tests successful.
Files=3, Tests=14,  2 wallclock secs
Result: PASS
===> Testing [OK] for zef:auth('github:ugexe')
===> Installing: zef:auth('github:ugexe')
===> Install [OK] for zef:auth('github:ugexe')

1 bin/ script [zef] installed to:
/home/yohan/.rakudobrew/moar-nom/install/share/perl6/site/bin
Updating shims
Done, built zef for moar-nom

with --force flag.

derrickcope commented 7 years ago

I am getting this error. Can you explain with a little more detail how to avoid it?

rakudobrew build moar --force?

thanks,

Derrick

On Fri, Dec 09, 2016 at 04:27:54AM -0800, Altai-man wrote:

How to reproduce: 1.rakudobrew build moar 2.rakudobrew build zef 3.rakudobrew build moar // After some time to update. 4.After rakudo updating, rakudobrew tries to update zef too. 5.Boom!

===> Testing: zef:auth('github:ugexe')
t/00-load.t ........... ok 
t/identity.t .......... ok 
t/utils-filesystem.t .. ok 
All tests successful.
Files=3, Tests=14,  3 wallclock secs
Result: PASS
===> Testing [OK] for zef:auth('github:ugexe')
===> Installing: zef:auth('github:ugexe')
===> Install [SKIP] for zef:auth('github:ugexe'): zef:ver<*>:auth<github:ugexe>:api<> already installed
!!!> Install failures: zef:auth('github:ugexe')
Failed running /home/yohan/.rakudobrew/bin/../moar-nom/install/bin/perl6 -Ilib bin/zef -v install . at /home/yohan/.rakudobrew/bin/rakudobrew line 58.
  main::run("/home/yohan/.rakudobrew/bin/../moar-nom/install/bin/perl6 -Ili"...) called at /home/yohan/.rakudobrew/bin/rakudobrew line 548
  main::build_zef() called at /home/yohan/.rakudobrew/bin/rakudobrew line 355
  main::build_impl("zef", undef, "") called at /home/yohan/.rakudobrew/bin/rakudobrew line 116
➜  ~ 

It looks like the problem is with already installed instance of zef. If we update zef after moar only if zef is installed, then we need to add --force flag to over-write it.

The bug disappears like this:

===> Testing: zef:auth('github:ugexe')
t/00-load.t ........... ok 
t/identity.t .......... ok 
t/utils-filesystem.t .. ok 
All tests successful.
Files=3, Tests=14,  2 wallclock secs
Result: PASS
===> Testing [OK] for zef:auth('github:ugexe')
===> Installing: zef:auth('github:ugexe')
===> Install [OK] for zef:auth('github:ugexe')

1 bin/ script [zef] installed to:
/home/yohan/.rakudobrew/moar-nom/install/share/perl6/site/bin
Updating shims
Done, built zef for moar-nom

with --force flag.

-- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/tadzik/rakudobrew/issues/108

Altai-man commented 7 years ago

@derrickcope, you should edit rakudobrew script, if you cloned the repo in your home directory with default command(i.e. command that is in the README), the path will be .rakudobrew/bin/rakudobrew. You need to open this file in your favorite editor and search for string sub build_zef. In this subroutine you should change

    run which('perl6', $version) . " -Ilib bin/zef -v install .";

to

    run which('perl6', $version) . " -Ilib bin/zef -v --force install .";

The initial issue is that zef doesn't re-install packages without --force flag.

derrickcope commented 7 years ago

Ok thank you for that. I will try it. yes, that worked. thanks

Altai-man commented 7 years ago

If I understand everything correctly, with https://github.com/tadzik/rakudobrew/pull/110 merged this can be closed.