nibra / fix-copyright
一个一次性项目,用于将Joomla项目中版权声明转换为标准化格式。也可能对其他项目有用。
Requires (Dev)
- phpunit/phpunit: ^8.5
README
此工具是一个一次性项目,旨在将Joomla项目中版权声明转换为标准化格式。它也可能对其他项目有用。
为什么这样做
直到2020年,Joomla一直使用此格式
版权(C)2005 - 2020开源问题。保留所有权利。
范围结束年份需要每年为每个文件更新。虽然这个更新是通过脚本完成的,但这种过程一直在无任何好处的情况下污染文件历史。
因此,Joomla生产部门领导在2020年中期决定遵循这篇优秀文章中的建议如何以及为什么要在代码中正确编写版权声明。
有些人认为这种改变毫无意义,但正如Michael Babker所说,
这可能看起来像是无意义的改变,但另一个无意义的改变是在1月份修改Joomla拥有的每个仓库中每个文件的结束日期。此外,在大多数Joomla拥有的仓库中,每个文件都声明了从2005年起的版权,这显然是不真实的。
工作原理
确定文件创建日期的原始方法是
YEAR=$(git log --follow --date=format:%Y --pretty=format:"%cd" --diff-filter=A --find-renames=40% "${FILE}" | tail -n 1)
然而,结果令人失望。 git
本身使用内容相似性来查找重命名,这导致了意外结果。
另一方面,PhpStorm的 Git > 显示历史
功能对第一次提交给出了非常合理的答案,一些研究揭示了IntelliJ的实现(这是PhpStorm的基础)。JetBrains的人发现
git log --follow
确实检测到重命名,但它有一个bug - 合并提交没有被正确处理:它们只是从历史中消失。请参阅http://kerneltrap.org/mailarchive/git/2009/1/30/4861054以及关于这个问题的整个线程:--follow有bug,但也许它不会被修复。
解决方案,这里重新实现,是
- 获取文件的第一次提交 具有该名称
- 获取该提交的状态(
添加
,复制
或重命名
) - 如果状态是
添加
或复制
,这确实是第一次提交。 - 状态是
重命名
,因此获取当前提交之前具有前一个名称的文件的第一次提交。 - 继续步骤2。
如何将脚本应用于您的环境
在 fix-copyright.sh
中,将行4-7更改为适合您的设置
GREP_PATTERN="(Copyright )?\(C\) .* Open Source Matters.*All rights reserved\.?" SED_PATTERN="\(Copyright \)\?(C) .* Open Source Matters.*All rights reserved\.\?" OWNER="Open Source Matters, Inc." CONTACT="https://joomla.net.cn"
请注意,grep
和sed
的不同类型的转义。
您可能需要调整行18和20中的默认年份(此处默认年份为2005
)
if [[ ${FILE} == *.xml ]]; then REPLACEMENT="(C) ${YEAR:-2005} ${OWNER}" else REPLACEMENT="(C) ${YEAR:-2005} ${OWNER} <${CONTACT}>" fi
待办事项
- 将功能从
fix-copyright.sh
移动到fix-copyright.php
- 将
PATTERN
,OWNER
和CONTACT
作为命令行参数提供 - 内部转义模式