如何计算模块的dist哈希

时间:2018-06-23 23:20:36

标签: perl6 zef

我使用LoneStar在~/.rakudo-star/rakudo-star-2018.04中安装了Perl 6。 zef安装模块时,会将其安装到Rakudo Perl 6目录的子目录中。这里是一个名为perl6/site/resources的目录,该目录似乎包含所有已安装的文件。如何使用Perl 6找出哪个模块包含在哪个文件中?

2 个答案:

答案 0 :(得分:3)

如果要获取将要加载的名称空间的源,可以执行以下操作:

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仅在resolve从CompUnit::Repository::Installation存储库返回CompUnit时才起作用。

rakudo@1812是进一步改进此框架的框架,允许查询各个存储库($*REPO.resolve遍历存储库的链接列表以给出结果),并统一{之间的解析/候选/等行为{1}}和CompUnit::Repository::Installation

答案 1 :(得分:2)

如果我没记错的话,那你就不应该。 zef是必须照顾它的人。但是,如果确实需要,请在目录中使用zef locate

中的SHA1签名
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