Hashlib通过GitHub操作在Ubuntu和Windows上产生不同的结果



我创建了一个测试,以确保许可证文件的内容不会更改。测试如下:

license_file = context.root_dir.joinpath("LICENSE")
with open(license_file, "rb") as license_fd:
content = license_fd.read()
license_hash = hashlib.sha224(content).hexdigest()
# Compare to "sha224sum LICENSE" of initial commit
# TODO: Figure out why Windows gives another hash
# assert license_hash == "45fd0b382919a02f391b9ce13e70ed703b9569cce812332d03c514a2"

在GitHub中,我在一个矩阵中运行测试,操作系统设置为";ubuntu最新"macos最新";,以及";windows最新";。Python版本设置为3.8。

对于Ubuntu和MacOS来说,测试都通过了。但是这个断言在Windows上失败了。

我已经读到,如果模式设置为r,那么open将取代Windows上的行尾。但是用rb打开该文件不应更改该文件。我也尝试过用r+b来替换模式。这些测试在两个Unix系统上进行,但不在Windows上进行。

hashlib在Windows上的工作方式不同吗?不应该。管道正在更改文件吗?不应该。

我没有Windows机器来验证哪个部分正在更改文件,或者hashlib在Windows实现中是否有错误。很可能是第一部分。

我是不是错过了显而易见的东西?

管道是否正在更改文件?不应该。

根据Iłya Bursov的建议,源代码的签出更改了Windows上默认的文件结尾。

这是一个已知的障碍(但不是bug(:https://github.com/actions/checkout/issues/135#issuecomment-602171132

固定使用:

steps:
- name: Set git to use LF
run: |
git config --global core.autocrlf false
- uses: actions/checkout@v2

然而,我并没有像GitHub上的答案中所说的那样,强迫行尾为lf

相关内容

  • 没有找到相关文章

最新更新