2021 年 10 月,一个 Fedora Linux 用户 问了一个关于许可的问题. Fedora 项目负责人马修·米勒 留下了回应:“因为我们没有一个完整的、展开的、可搜索的存储库,其中包含所有包 Fedora,我没有快速检查的方法。”
其次是:“……或者可能支付 Sourcegraph 为我们做这件事。 他们看起来都是好人。” 他是对的,我们(Sourcegraph)是好人,但我们不想要你的钱。 相反,我们想与 Fedora 社区。
这 Fedora 社区现在可以搜索他们的开源代码世界——目前有超过 34,000 个存储库并且还在增加。
代码搜索简介
对于那些不熟悉的概念的人 代码搜索,它使团队能够加入新的代码库并更快地找到答案,帮助识别安全风险以及许多其他用例。 Sourcegraph 已经为 GitHub 和 GitLab 等多个代码主机上的超过 200 万个存储库建立了索引。 本文将严格关注 src.fedoraproject.org 的代码搜索。 Sourcegraph 提供了一个 网络应用 和 命令行界面 界面。
使用网络应用程序
使用 Sourcegraph 时 网络应用 您将需要开始每次搜索 回购:^src.fedoraprojects.org 在输入任何搜索查询之前。 使用此链接到 网络应用 将包括此初始字符串,如下所示:
以下部分将提供一些可能感兴趣的搜索 Web 应用示例。
使用流行的 OSI 批准的许可证查找存储库
以下查询将扫描与“开源定义”(OSD)兼容的软件的所有存储库。
repo:^src.fedoraproject.org/ lang:"RPM Spec" License: ^.*apache|bsd|gpl|lgpl|mit|mpl|cddl|epl.*$

使用 TODO 查找文件
以下查询可以在 34k 存储库中找到 TODO。 这对于那些希望为需要帮助的项目做出贡献的人来说非常有用。
repo:^src.fedoraproject.org/ "TODO"

查找通过 FTP 提供的文件
那天我的一位同事告诉我“FTP 是一个死协议”。 是吗? 您可以添加到此查询以查找任何其他协议,例如 irc、https 等。
repo:^src.fedoraproject.org/ (?:ftp)://[A-Za-z0-9-]{0,63}(.[A-Za-z0-9-]{0,63})+(:d{1,4})?/*(/*[A-Za-z0-9-._]+/*)*(?.*)?(#.*)?

使用易受攻击的 Log4j 版本查找文件
此查询将查找任何可能易受 CVE-2021-44228 (又名 Log4j)攻击(可能发生误报)的文件。 您还可以搜索其他可以报告给项目维护人员的漏洞。
repo:^src.fedoraproject.org/ org.apache.logging.log4j 2.((0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15)(.[0-9]+)) count:all

使用命令行界面
Sourcegraph 还有一个命令行界面工具,叫做 源代码,它允许您执行我刚才提到的所有操作,以及其他有用的命令,例如以 JSON 格式获取结果以供编程使用。
src search -json 'repo:^src.fedoraproject.org/ lang:"RPM Spec" License: ^.*apache|bsd|g pl|lgpl|mit|mpl|cddl|epl.*$'
JSON 输出

搜索语法
所示示例可能是一个很好的起点,但绝不是唯一可以进行的查询。 你可以 查看所有搜索查询语法 并根据需要创建自己的。
结论
如您所见,使用 Sourcegraph, Fedora Linux 社区现在可以快速搜索托管在 src.fedoraproject.org,无论它们是文字查询还是复杂的正则表达式查询。
我很欣赏 Fedora Linux 社区非常乐于助人和热情。 如果您有任何要添加的内容或问题,我和我的团队将在下面的评论部分中。 你也可以 加入我们的 Slack.
特别感谢 凡妮莎·奥尔蒂斯 为了 使这种合作发生, 本·文克 感谢他帮助修复我损坏的正则表达式(多次),以及 丽贝卡·多德 和 尼克·摩尔 感谢他们在编辑方面的帮助。