Cregit-Linux:代码如何进入内核
cregit:Linux 内核的贡献者
cregit-Linux:代码如何进入内核
Linux 内核的贡献者
Linux 源代码
来自 Linux 内核的以下源代码文件已经使用 cregit 进行了转换,并按照内核使用的相同文件系统顺序排列。每个文件对应一个 C 源代码文件(扩展名为 .c 和 .h)。
这些文件中的源代码已被着色,以便识别插入该代码的贡献者。在每个文件中,代码被分为函数,并为每个作者提供贡献者摘要。源代码的末尾包含贡献者的总体摘要。
例如,以下是文件 kernel/profile.c
的一个片段。具体来说,是函数 create_proc_profile
。不同的颜色可以识别出大部分代码是由 William Lee Irwin III 贡献的,其次是 Srivatsa S. Bhat。Dave Hensen 仅贡献了一个 token:ENOMEM
,而 David Howells 贡献了 2 个:proc_set_size
和 (
。该函数总共有 100 个 token。
int __ref create_proc_profile(void) /* false positive from hotcpu_notifier */
{
struct proc_dir_entry *entry;
int err = 0;
if (!prof_on)
return 0;
cpu_notifier_register_begin();
if (create_hash_tables()) {
err = -ENOMEM;
goto out;
}
entry = proc_create("profile", S_IWUSR | S_IRUGO,
NULL, &proc_profile_operations);
if (!entry)
goto out;
proc_set_size(entry, (1 + prof_len) * sizeof(atomic_t));
__hotcpu_notifier(profile_cpu_callback, 0);
out:
cpu_notifier_register_done();
return err;
}
#### Contributors
william lee irwin iii| william lee irwin iii| 58| 58.00% ---|---|---|--- srivatsa s. bhat| srivatsa s. bhat| 26| 26.00% paolo ciarrocchi| paolo ciarrocchi| 5| 5.00% david howells| david howells| 4| 4.00% denis v. lunev| denis v. lunev| 4| 4.00% al viro| al viro| 2| 2.00% dave hansen| dave hansen| 1| 1.00%
如何浏览 cregit 源代码文件
cregit 版本的源代码文件具有两个交互式功能,可提供有关贡献者的反馈:
- 鼠标悬停。如果将鼠标停留在 token 上,您将获得有关添加此 token 的 commit 的信息摘要。此信息包括:
- 它的 commit id
- 它的 git-author (commit 的 Author 字段的值)
- 它的 git-author-date (commit 的 Author Date 字段的值)
- commit 的摘要日志
- 左键单击 token。此操作将打开一个新窗口,其中包含 commit 的详细信息(在 github 中)。您可以保持此窗口打开,它将不断重新加载文件。
以下版本可用
- Release 6.13
- Release 6.12
- Release 6.11
- Release 6.10
- Release 6.9
- Release 6.8
- Release 6.7
- Release 6.6
- Release 6.5
- Release 6.4
- Release 6.3
- Release 6.2
- Release 6.1
- Release 6.0
- Release 5.19
- Release 5.18
- Release 5.17
- Release 5.16
- Release 5.15
- Release 5.14
- Release 5.13
- Release 5.12
- Release 5.11
- Release 5.10
- Release 5.9
- Release 5.8
- Release 5.7
- Release 5.6
- Release 5.5
- Release 5.4
- Release 5.3
- Release 5.2
- Release 5.1
- Release 5.0
- Release 4.20
- Release 4.19
- Release 4.18
- Release 4.17
- Release 4.16
- Release 4.15
- Release 4.14
- Release 4.13
- Release 4.12
- Release 4.11
- Release 4.10
- Release 4.9
- Release 4.8
- Release 4.7
局限性
创建这些文件存在一些局限性。最重要的是:
- cregit 使用与
git blame
(使用默认选项)相同的算法来确定谁贡献了给定的 token。因此,应用于git-blame
的相同限制也适用于 cregit 的输出。 - 我们使用 srcML 来标记源代码,特别是它的 C 解析器。这是一个 island parser,并且不执行真正的 C 编译(例如,它不扩展宏)。
- 什么是 token?通常,token 是 C 语法认为的 token,但有一些例外:
- 预处理器宏的右侧始终被视为一个 token。
- 注释被认为是一个 token,并归于最后修改该 token 的人。
团队
cregit 由 Alexandre Courouble、Isabella Ferreira 和来自加拿大蒙特利尔理工学院的 Bram Adams、来自 Linux Foundation 的 Kate Stewart、Jason Lim、Kevin Chen 和来自加拿大维多利亚大学的 Daniel German 创建。
致谢
- cregit 使用 srcMl 来解析源代码。
- Jason Lim 开发了改进的源代码界面,包括源代码的颜色映射(4.19 及更高版本)。
- Kevin Chen 开发了改进的目录界面(5.1 及更高版本)。
- Ali Bahrani 贡献了对 rust 文件解析的支持(6.10 及更高版本)。
- Alexandre Carouble 和 Isabella Ferreira 致力于代码审查讨论和 commits 之间的匹配。
免责声明
提供此信息是为了帮助 Linux 开发人员了解内核的历史贡献。本网站上的数据可能会在没有事先警告的情况下随着新信息的可用而更新。欢迎并感谢开发人员识别属性中的不准确之处。
本网站包含的信息仅供历史信息目的,并不表明或代表版权所有权。
联系方式
有关 cregit 和本网站的更多信息,请联系 Daniel German (dmg@uvic.ca)。