Fire is step THREE! | github.com/perl6/toolchain-bikeshed | Channel logs: irclog.perlgeek.de/perl6-toolchain/today | useful prior art: metacpan.org/pod/CPAN::Meta::Spec
Set by moderator on 27 July 2017.
ugexe ah moving the role outside of the method allows it to work 00:18
but for some reason declaring the role inside the method or applying the role anonymously would fail 00:19
01:53 ilbot3 joined
moderator Fire is step THREE! | github.com/perl6/toolchain-bikeshed | Channel logs: irclog.perlgeek.de/perl6-toolchain/today | useful prior art: metacpan.org/pod/CPAN::Meta::Spec
ugexe nine: github.com/rakudo/rakudo/pull/1120/files I pushed it here 02:05
github.com/rakudo/rakudo/pull/1120...cf08a4ce1a er the summary is here though 02:06
05:38 Cheery joined 05:40 Cheery joined 07:05 domidumont joined 07:12 domidumont joined 12:52 perlpilot joined 13:35 perlpilot joined 13:41 lizmat joined 15:03 domidumont joined 15:32 jdv79 joined
ugexe i feel like we could also remove setting the version/auth/api in CompUnit.new in CURI by giving CU a way to use its $.distribution to obtain those 16:19
i would also propose implementing .candidates on ::FileSystem (or any CUR that can represent more than one file/module) 16:38
actually maybe we need to chain .candidates when calling .resolve.... because right now I'm thinking a if repo-1 has XXX:ver<2> and repo-2 has XXX:ver<3> that ver<2> would get loaded because that repo is seen first 16:42
...which would explain some of the weird "why is this using the old version of my module?" that goes away when deleting ~/.perl6 16:43
i'm surprised we overlooked this 16:44
nine We didn't. 16:53
That was a concious choice. If you say :ver<2> suffices, you shouldn't complain when it gets loaded. 16:54
ugexe i mean when you say just 'XXX' 17:06
i thought this was understood as 'load the latest version', not 'load the latest version found in the first repo' 17:09
first repo with a match^
nine The only thing we guarantee is that you will get a module that matches your stated requirements. Given multiple matching ones, CompUnit::Repository::Installation happens to pick the highest one it has available. 17:14
ugexe so the problem with ~/.perl6 seems to be somewhat related. if you install zef v0.1.25 to site, and use that to install zef v0.1.24 to home, then `zef ...` will launch/use v0.1.24 18:10
nine But why would you install the older version? 18:22
ugexe 1: a dependency may have required that specific version 2: emulate the problem of updating an old rakudo, getting problems with zef (from IO refactor), finally figure out how to install a newer zef only to have it continue using the old version and continue giving the same errors 18:25
nine Considering all repos will not exactly do wonders for performance :/ 18:30
ugexe i wouldnt think it would hurt performance much. the first lookup is already optimized to avoid as much io as possible, and after that its just looking up %!loaded{...} a few extra times 18:35
at the very least CompUnit::RepositoryRegistry.run-script should consider every repository 18:54
or rather, that the script it launches is using those libs 18:56
ah this is a problem with .script as what it returns gives no indication of the version, so you cant compare the results from multiple CURs in run-script 19:01
so whats happening is people have some old version of zef installed in ~/.perl6 and were likely using a newer version of zef installed to site ok. then they upgrade rakudo and .run-script starts grabbing the old version of zef because the wrapper no longer does a version sort over all candidates 19:19
on the bright side that means those weird problems, despite the hail mary delete ~/.perl6 always solving it, aren't precomp issues 19:24
i could add more info to the zef "Already installed" message as well to indicate where, which might be enough to nudge the majority into figuring out to uninstall from home 19:28
19:37 mspo joined
mspo hi I'm trying to get reproducable builds into precomp/ and the timestamps in the middle of the path are not exactly working 19:38
is there a way to tell install-dist.pl (or another method) to use a fixed path?
for example compiling zen I have 19:39
precomp/9AD391BB028FBF86169E02934A6181BA21049736.1497985253.01802/FE/FE48D13883ACBA2CF35E1746EEFE956A173BE8AE.repo-id vs precomp/6C3B1056A15F23B58ED8A7017D2C24B8F7524EB2.1501209729.51376/FE/FE48D13883ACBA2CF35E1746EEFE956A173BE8AE.repo-id
s/zen/zef
ugexe im not sure, but just for some insight into a naive solution: change the timestamp to all 0 on initial install. this is naive because it only would work if you knew the dependency graph beforehand (which you can probably emulate by ordering META6.json provides perfectly) - but for it to actually figure this graph out it has to run the code, which (to oversimplify) will try to precompile each file and 19:51
if it fails it puts it at the end of the queue to try after trying everything else
so that timestamp would change each time it needs to retry to precompile 19:52
or something along those lines
which, btw, ordering your META6.json provides to the perfect precomp order should speed up a distribution's install time 19:54
mspo ugexe: this is only for bootstrapping stuff and packaging individual things into pkgsrc which has a requirement for reproducable-ish builds (file names, at least) 19:55
ugexe: the timestamp is obvious but I don't know what the other stuff is: 6C3B1056A15F23B58ED8A7017D2C24B8F7524EB2
ugexe well, couldnt you just use rename to 0 out that time stamp before finalizing the package?
mspo just rename the entire middle part? does that work? 19:56
like moar could find it, I mean
ugexe im not sure but i suspect it would
mspo interesting
ugexe i'm failing to find where the code that generates that path is at heh
mspo ugexe: wouldn't it make more sense to add an option to the compiler? :) 19:57
yeah I was looking too but this is my first time down the road
so I'm miles away
compunit something?
PRECOMP_PREFIX would be nice
ugexe CompUnit::Precomp* 19:58
mspo here somewhere? github.com/rakudo/rakudo 19:59
ah I need to go pick up my kid. bbl
ugexe a utility to capture RAKUDO_MODULE_DEBUG output from an install of a module could provide an author with an optimal provides order. that could be a neat little tool or mi-6 plugin 20:05
nine The timestamped thing is the compiler's id which is the serialization context's id + the timestamp
Oh that's not correct. 20:12
It's actually the sha1 hash of CORE.setting's source code + the timestamp at time of compilation. 20:14
What it doesn't include is the NQP code, i.e. src/Perl6/. With that it could be enough to enable reproducible builds. 20:15
ugexe: looks like our ::Installation repos will have to communicate a little. So the first matching one asks the following repo for a matching one with a higher version. 20:24
ugexe i think the version sort can be done inside of run-script the same way it used to - no intercommunication required - using .files and/or .candidates from PR#1120 by just changing 20:35
`my $matches-file := $_.grep: { .meta<files>{$file} }` to `my $matches-file := $_.grep: { .meta<source> eq $file || .meta<files>{$file} }`
since the distributions all use the fast path and include <source> 20:36
e.g. .meta<source> would not call self!dist, but .meta<files>{$file} would 20:37
mspo nine: so my CORE.setting must be different since the first part of my file path was also different 21:06
{CORE.setting}.unix.milliseconds/module_hash{2}/module_hash?
something like that?
anyway is there a way for me to influence this or do I need to wait until something is changed? 21:07