Как рассчитать хеш модуля - PullRequest
0 голосов
/ 24 июня 2018

У меня Perl 6 установлен в ~/.rakudo-star/rakudo-star-2018.04 с использованием LoneStar. Когда zef устанавливает модуль, он устанавливается в подкаталог каталога Rakudo Perl 6. Здесь находится каталог с именем perl6/site/resources, в котором хранятся все установленные файлы. Как я могу выяснить, какой модуль содержится в каком файле, используя Perl 6?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Если вы хотите получить источник загружаемого пространства имен, вы можете сделать:

my $module-name = 'Test';

# Get a Distribution object which provides an IO interface to its contents
my $compunit         = $*REPO.resolve(CompUnit::DependencySpecification.new(:short-name{$module-name}));
my $distribution     = $compunit.distribution;
my $handle-from-name = $distribution.content($distribution.meta<provides>{$module-name}.keys[0]).open;
say $handle-from-name.slurp(:close);

# Or if we already know the name-path:
my $handle-from-path = $distribution.content("lib/Test.pm6").open;
say $handle-from-path.slurp(:close);

Обратите внимание, что $compunit.distribution будет работать только в том случае, если функция разрешения вернула CompUnit из CompUnit::Repository::Installation хранилища.

rakudo @ 1812 - это структура для дальнейшего улучшения, позволяющая запрашивать отдельные репозитории ($*REPO.resolve повторяет связанный список репозитариев для получения результата) и унифицирующая поведение для resol / sources / etc между CompUnit::Repository::Installation и CompUnit::Repository::FileSystem.

0 голосов
/ 24 июня 2018

Если я правильно помню, вы не должны.Это zef тот, кто должен позаботиться об этом.Но если вам положительно, используйте сигнатуры SHA1 в каталоге с zef locate

zef --sha1 locate 5417D0588AE3C30CF7F84DA87D27D4521713522A

будет выводить (в моей системе)

===> From Distribution: zef:ver<0.4.4>:auth<github:ugexe>:api<>
lib/Zef/Service/Shell/PowerShell/download.pm6 => /home/jmerelo/.rakudobrew/moar-2018.06/install/share/perl6/site/sources/5417D0588AE3C30CF7F84DA87D27D4521713522A

Из вашего вопроса это не слишкомясно, если то, что вы хотите сделать, является противоположным, то есть выяснить, какой SHA1 соответствует какому файлу;в этом случае попробуйте следующее:

zef locate bin/lwp-download.pl

, которое вернет

===> From Distribution: LWP::Simple:ver<0.103>:auth<Cosimo Streppone>:api<>
bin/lwp-download.pl => /home/jmerelo/.rakudobrew/moar-2018.06/install/share/perl6/site/resources/059BD7DBF74D1598B0ACDB48574CC351A3AD16BC
...