class CompUnit::Repository::Installation
    does CompUnit::Repository::Locally
    does CompUnit::Repository::Installable
    { }

由文件系统支持的 CompUnit::Repository 实现,但使用内部存储格式

  • 处理可能与 CompUnit::Repository::FileSystem 冲突的文件系统上的大小写敏感性问题。

  • 处理不支持的文件系统上的允许的文件名问题(例如 unicode)。

  • 允许具有相同名称但具有不同 ver 和/或 auth 和/或 api 值的多个发行版在单个存储库中安装并单独访问。

  • 通过提供模块预编译来实现更快的模块加载。

由于内部存储格式,添加发行版的通常方式不是复制文件,而是调用 CompUnit::Repository::Installation#method_install

方法§

方法安装§

method install(Distribution $distributionBool :$force)

将模块复制到特殊位置,以便以后可以加载它们。

:$force 将允许在具有相同 nameauthapiver 的现有发行版上安装。否则,这种情况将导致 Failure

my $inst-repo = CompUnit::RepositoryRegistry.repository-for-name("site");
my $dist = Distribution::Path.new(...);
$inst-repo.install($dist);

方法卸载§

method uninstall(Distribution $distribution)

从存储库中删除 $distribution$distribution 应从其被删除的存储库中获取

my $inst-repo = CompUnit::RepositoryRegistry.repository-for-name("site");
my $dist = $inst-repo.candidates("Acme::Unused").head;
$inst-repo.uninstall($dist);

方法候选§

multi method candidates(Str:D $name:$auth:$ver:$api)
multi method candidates(CompUnit::DependencySpecification $spec)

返回包含与指定的 $nameauthverapi 匹配的模块的所有发行版。

my $inst-repo-path = CompUnit::RepositoryRegistry.repository-for-name("perl").prefix;
my $inst-repo = CompUnit::Repository::Installation.new(prefix => $inst-repo-path);
my $dist = $inst-repo.candidates("Test").head;
say "Test version: " ~ $dist.meta<ver># OUTPUT: «6.d␤»

方法文件§

multi method files(Str:D $name:$auth:$ver:$api)
multi method files(CompUnit::DependencySpecification $spec)

返回与指定的 auth verapi 匹配的所有发行版,并包含与指定的 $name 匹配的非模块文件。

# assuming Zef is installed to the default location... 
my $repo = CompUnit::RepositoryRegistry.repository-for-name("site");
 
say $repo.files('bin/zef':ver<419.0+>).head.<name>              // "Nada"# OUTPUT: «Nada␤» 
say $repo.files('resources/config.txt':ver<419.0+>).head.<name> // "Nada"# OUTPUT: «Nada␤» 
 
say $repo.files('bin/zef':ver<0.4.0+>).head.<name>;                        # OUTPUT: «zef␤» 
say $repo.files('resources/config.txt':ver<0.4.0+>).head.<name>;           # OUTPUT: «zef␤»

方法解析§

method resolve(CompUnit::DependencySpecification $spec --> CompUnit:D)

返回一个 CompUnit,该 CompUnit 映射到与 $spec 匹配的最高版本发行版,该发行版来自存储库链中第一个包含与 $spec 匹配的任何发行版版本的存储库。

方法需要§

method need(
    CompUnit::DependencySpecification $spec,
    CompUnit::PrecompilationRepository $precomp = self.precomp-repository(),
    CompUnit::PrecompilationStore :@precomp-stores = self!precomp-stores(),
    --> CompUnit:D)

加载并返回一个 CompUnit,该 CompUnit 映射到与 $spec 匹配的最高版本发行版,该发行版来自存储库链中第一个包含与 $spec 匹配的任何发行版版本的存储库。

方法加载§

method load(IO::Path:D $file --> CompUnit:D)

加载 $file 并返回表示它的 CompUnit 对象。

方法 loaded§

method loaded(--> Iterable:D)

返回此存储库已加载的所有 CompUnit

方法 short-id§

method short-id()

返回存储库的短 ID,对于此存储库,该 ID 为 inst