是否可以在 cpanm 文件中要求 git 存储库?

Mik*_*Mik 5 perl github unicode-string cpanm

我正在尝试使用 cpanfile 和 cpanm 来安装大量模块。其中一个模块 Unicode::String 在 CPAN 上有一个错误,作者仅在 Github 上修复了该错误。(https://github.com/msouth/Unicode-String

是否可以将 Github 存储库列为 cpanfile 中的要求,并从那里而不是从 CPAN 安装 cpanm?如果是这样,这样做的正确语法是什么?

我发现的最接近的是 2013 年的一条线索,宫川说它将在未来的版本中推出,然后未来的版本很脆弱并且被搁置:

https://github.com/perl-carton/carton/issues/132 (这里讨论 carton,但由于它们都使用 cpanfile,因此语法应该相同。)

小智 0

由于您无法在 中使用 git URL cpanfile,因此您可以在安装过程中使用Distroprefs来修补软件包。我不知道这是否适用于 cpanm、cpm 或除 cpan 之外的任何包管理器。

你可以传递你自己的差异(git format-patch这是你的朋友)并告诉修补特定版本(下一个版本应该是固定的,不需要尝试修补它)。


我用它来修补Module::Manifest::Skip,该模块在 docker 映像创建过程中在 GitHub 中修复了两个错误,以在 CI 上测试一些代码。

CPAN 将需要YAML包。

我将首选项添加到 cpandir ( ~/.cpan/prefs)

---
match:
  distribution: 'INGY/Module-Manifest-Skip-0.23.tar.gz'
depends:
  configure_requires:
    File::ShareDir: 1.114
patches:
  - 'FOOBAR/Module-Manifest-Skip-0.23.patch'
Run Code Online (Sandbox Code Playgroud)

以及 CPAN 源中的补丁 ( ~/.cpan/sources/authors/id/F/FO/FOOBAR)

diff --git a/lib/Module/Manifest/Skip.pm b/lib/Module/Manifest/Skip.pm
index 434f7ce..27c1ac7 100644
--- a/lib/Module/Manifest/Skip.pm
+++ b/lib/Module/Manifest/Skip.pm
@@ -28,9 +28,6 @@ sub import {
         close MS;
         exit;
     }
-    else {
-        goto &Moo::import;
-    }
 }

 sub add {
Run Code Online (Sandbox Code Playgroud)

这样,CPAN 将能够即时修补软件包。你可以在安装过程中看到它,它会告诉我们

# cpan Module::Manifest::Skip
Loading internal logger. Log::Log4perl recommended for better logging
Reading '/root/.cpan/Metadata'
  Database was generated on Wed, 30 Mar 2022 04:55:39 GMT
Running install for module 'Module::Manifest::Skip'

______________________ D i s t r o P r e f s ______________________
                    Module-Manifest-Skip.yml[0]
Checksum for /root/.cpan/sources/authors/id/I/IN/INGY/Module-Manifest-Skip-0.23.tar.gz ok
Applying 1 patch:
  /root/.cpan/sources/authors/id/F/FO/FOOBAR/Module-Manifest-Skip-0.23.patch
  /usr/bin/patch -N -p1
patching file lib/Module/Manifest/Skip.pm
Configuring I/IN/INGY/Module-Manifest-Skip-0.23.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
# ...
Run Code Online (Sandbox Code Playgroud)